이 자습서에서는 SQL 문을 사용하는 방법을 배웁니다. 유니온 올구문 및 예제와 함께.

설명

SQL UNION ALL 문은 2개 이상의 SELECT 문의 결과 집합을 조인하는 데 사용됩니다. 다른 SELECT 문 사이의 중복 행을 제거하지 않습니다(모든 행이 반환됨).
UNION ALL의 각 SELECT 문에는 데이터 유형이 동일한 결과 집합에 동일한 수의 필드가 있어야 합니다.

UNION과 UNION ALL의 차이점은 무엇입니까?

  • UNION 연산자는 중복 행을 제거합니다.
  • 유니온 올 ~ 아니다중복 라인 제거

통사론

SQL의 UNION ALL 연산자에 대한 구문입니다.

옵션 또는 인수

expression1 , expression2 , expression_n 테이블을 가져올 열 또는 계산 레코드를 가져올 테이블입니다. FROM 절은 최소한 하나의 테이블을 포함해야 합니다 WHERE 조건 선택 사항. 레코드를 선택하기 위해 충족되어야 하는 조건

메모

  • 두 SELECT 쿼리에는 동일한 수의 표현식이 있어야 합니다.
  • 일치하는 표현식은 SELECT 쿼리에서 동일한 데이터 유형을 가져야 합니다. 예: expression1은 첫 번째 및 두 번째 SELECT 문 모두에서 동일한 데이터 유형을 가져야 합니다.
  • 연산자 참조

예 - 이름이 같은 단일 필드

단일 필드를 반환하는 UNION ALL SQL 문을 사용하는 방법을 살펴보겠습니다. 그 안에 간단한 예두 SELECT 문의 필드는 이름과 데이터 유형이 동일합니다.
예를 들어.

PgSQL

공급자 ID 선택

공급자로부터

유니온 올

공급자 ID 선택

주문에서

ORDER BY 공급자 ID;

이 UNION ALL SQL 예제는 동일한 값이 공급업체 및 주문 테이블에 표시되는 경우 결과 집합에 Supplier_id를 여러 번 반환합니다. SQL 문 UNION ALL ~ 아니다중복을 제거합니다. 중복을 제거하려면 UNION 연산자를 사용해 보십시오.
이제 이 예를 살펴보고 일부 데이터를 제공하겠습니다.

그리고 다음 UNION ALL 문을 실행했습니다.

PgSQL

SELECT Supplier_id FROM 공급업체 UNION ALL SELECT Supplier_id FROM 주문 ORDER BY Supplier_id;

이 예에서 볼 수 있듯이 UNION ALL은 공급자 테이블과 주문 테이블에서 모든 Supplier_id 값을 가져와 결합된 결과 집합을 반환했습니다. 결과 집합에 두 번 나타나는 provider_id 2000에서 볼 수 있듯이 중복 항목은 제거되지 않았습니다.

예 - 다른 필드 이름

각 SELECT 문의 해당 열이 동일한 이름을 가질 필요는 없지만 동일한 해당 데이터 유형을 가져야 합니다.
SELECT 문에 동일한 열 이름이 없으면 특히 ORDER BY 절을 사용하여 쿼리 결과를 정렬하려는 경우 약간 까다로워집니다.
열 이름이 다른 UNION ALL 연산자를 사용하고 쿼리 결과를 정렬하는 방법을 살펴보겠습니다.
예를 들어.

PgSQL

그 안에 SQL 예제 UNION ALL, 두 SELECT 문의 열 이름이 다르기 때문에 ORDER BY 절의 열을 결과 집합에서 위치별로 참조하는 것이 더 유리합니다. 이 예에서는 ORDER BY 1 로 표시된 대로 Supplier_id / company_id 를 기준으로 결과를 오름차순으로 정렬했습니다. Supplier_id / company_id 필드는 결과 집합에서 1번 위치에 있습니다.
이제 데이터와 함께 이 예를 더 자세히 살펴보겠습니다.
다음 항목으로 채워진 공급자 테이블이 있는 경우.

그리고 UNION ALL이 포함된 다음 쿼리를 실행했습니다.

나는 이미 에 대해 썼습니다. 그리고 거기에서 한 테이블의 출력은 다른 테이블의 내용에 의존했습니다. 그러나 한 테이블의 출력이 다른 테이블과 완전히 독립해야 할 때 발생합니다. 당신이 원하는 것은 단지 하나의 쿼리에서 여러 테이블의 레코드 검색, 더 이상은 없어. 그리고 이것을 위해 SQL UNION 키워드에 사용.

당신과 함께 알아내자 UNION을 사용한 SQL 쿼리:

SELECT `login`, `amount` FROM `employers` UNION SELECT `login`, `amount` FROM `staff`;

이 쿼리는 특정 사이트의 모든 고용주와 직원의 계정에 대한 로그인 및 금액을 반환합니다. 즉, 데이터가 다른 테이블에 있었지만 유사성을 통해 즉시 표시할 수 있습니다. 그런데 여기에서 사용 규칙이 나옵니다. UNION 요청: 필드의 수와 순서는 쿼리의 모든 부분에서 일치해야 합니다.

그런 UNION 부품많을 수 있지만 가장 중요한 마지막 UNION 다음에 세미콜론을 넣어야 합니다..

또 다른 좋은 기능 노동 조합반복의 부족이다. 예를 들어, 동일한 사람이 직원과 고용주 사이에 물론 계정에 동일한 금액이 있는 경우 샘플에서 그는 2번이 아니라 1번만일반적으로 필요한 것입니다. 그리고 여전히 반복이 필요한 경우 다음이 있습니다. 유니온 올:

SELECT `login`, `amount` FROM `employers` UNION ALL SELECT `login`, `amount` FROM `staff`;

이와 같이 다소 간단한 UNION 연산자가 SQL 쿼리에 사용됩니다., 여러 테이블에서 동일한 유형의 데이터를 한 번에 표시하는 절차를 단순화하여 성능에 매우 좋은 영향을 미칩니다.

디자인 도구에 의한 데이터 집계에 대해 이야기할 때입니다. 노동 조합그리고 모두 연합, 이것은 때때로 매우 유용하고 때로는 그러한 구성을 사용하지 않고는 불가능하기 때문입니다. 예제는 DBMS에 작성됩니다. MS SQL 2008 SQL 언어를 사용합니다.

그리고 나는 당신과 내가 이미 요청서를 작성하는 많은 예를 고려했다는 사실로 시작하고 싶습니다. SQL, SQL select 문과 같은 SQL 문자열 함수의 사용은 PL/pgSQL에서 함수를 작성하는 방법 및 Transact-sql - 테이블 함수 및 임시 테이블과 같은 plpgsql 및 transact-sql 프로그래밍 모두를 다루었습니다.

위의 글만 지적한 것이 아니라 오늘 강의를 더 잘 이해하고 동화시키려면 위의 자료에서 얻을 수 있는 기본 지식(초보 프로그래머를 위한 사이트)이 필요하기 때문에 지적했습니다. .

시작하겠습니다. 그리고 먼저 이 union과 union 전체 연산자가 무엇인지 살펴보겠습니다.

SQL에서 UNION 및 UNION ALL이란 무엇입니까?

  • 노동 조합여러 쿼리의 결과 집합을 결합하는 SQL 문이며 주어진 연산자요청에서 고유한 행만 출력합니다. 예를 들어, 두 쿼리를 결합하고 각 쿼리에는 동일한 데이터, 즉 완전히 동일한 데이터가 포함되어 있으며 통합 연산자는 중복이 없도록 두 쿼리를 한 줄로 결합합니다.
  • 유니온 올- 이것은 여러 쿼리의 결과 데이터 세트를 결합하기 위한 SQL 문이지만 이 문은 중복을 포함하여 절대적으로 모든 행을 표시합니다.

Union 및 Union 모든 연산자의 전제 조건

  1. 필드 세트는 다음과 같아야 합니다. 같은모든 쿼리에서, 즉 Union 또는 Union all 구문을 사용하여 결합되는 각 쿼리의 필드 수는 동일해야 합니다.
  2. 데이터 유형필드는 또한 각 요청에서 일치해야 합니다. 예를 들어 데이터 유형이 int이고 두 번째 쿼리에서 데이터 유형이 varchar인 쿼리를 작성하려는 경우 쿼리가 실행되지 않고 쿼리 창에 오류가 표시됩니다.
  3. 정렬의 경우 연산자 주문만 지정할 수 있습니다 마지막 요청 후.

이제 이러한 연산자를 사용해야 하는 경우에 대해 이야기해 보겠습니다. 예를 들어, 유사한 구조를 가진 여러 데이터베이스가 있고 각 데이터베이스는 예를 들어 지점용으로 생성되었으며 이 데이터를 결합하여 모든 지점에서 관리 부서에 보고해야 합니다. 이를 수행하는 가장 쉬운 방법은 각각 다른 기반을 참조하는 SQL로 쿼리를 작성하고 모든 구성을 통합 또는 통합하여 결합합니다. 또한 때로는 일반 공용체로는 구현할 수 없고 공용체를 사용해야 하는 방식으로 하나의 데이터베이스에 데이터를 결합해야 하는 경우가 있습니다. 예를 들어 많은 데이터가 있고 이를 남용할 필요가 없는 경우 이 디자인은 쿼리 실행 시간을 크게 증가시키기 때문에 "해야 함"이라고 말하는 이유는 무엇입니까?

이론은 충분하니 실습으로 넘어갑시다.

메모!이미 언급했듯이 요청을 작성합니다. 관리 스튜디오 SQL 서버 2008용

Union 및 Union all 사용의 예

먼저 test_table과 test_table_2라는 두 개의 간단한 테이블을 만들어 보겠습니다.

CREATE TABLE ( IDENTITY(1,1) NOT NULL, (18, 0) NULL, (50) NULL, CONSTRAINT PRIMARY KEY CLUSTERED ( ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_PON_ROW_LOCK = ON) ON ) ON GO SET ANSI_PADDING OFF GO --그리고 두 번째 테이블 CREATE TABLE ( IDENTITY(1,1) NOT NULL, (18, 0) NULL, (50) NULL, CONSTRAINT PRIMARY KEY CLUSTERED ( ASC)WITH (PAD_INDEX) = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON) ON GO SET ANSI_PADDING OFF GO

예를 들어 이름만 다를 뿐 동일합니다. 다음 정보를 입력했습니다.

이제 결과 데이터를 통합을 통해 하나로 결합하는 쿼리를 작성해 보겠습니다. 구문은 매우 간단합니다.

요청 1 Union 요청 2 Union 요청 3 등

요청은 다음과 같습니다.

번호 선택, test_table의 텍스트 조합 선택 번호, test_table_2의 텍스트

보시다시피 첫 번째 요청의 첫 번째 라인과 두 번째 요청의 첫 번째 라인이 동일하므로 5개 라인만 표시되어 병합됩니다.

이제 Union all을 통해 결합합시다.

요청은 다음과 같습니다.

번호 선택, test_table의 텍스트 유니온 모두 선택 번호, test_table_2의 텍스트

Union all을 지정했기 때문에 모든 행이 이미 여기에 표시됩니다.

이제 이 간단한 쿼리에서도 어떤 오류가 발생할 수 있는지 살펴보겠습니다. 예를 들어 필드 시퀀스를 혼합했습니다.

또는 첫 번째 요청에서 추가 필드를 지정했지만 두 번째 요청에서는 지정하지 않았습니다.

또한 예를 들어 order by를 사용할 때:

여기에서는 각 요청에서 정렬을 지정했지만 마지막 요청에서만 필요했습니다. 예를 들면 다음과 같습니다.

번호 선택, test_table Union의 텍스트 모두 선택 번호, test_table_2의 텍스트 번호순

마지막으로, 예를 들어 한 요청에서 일부 필드를 표시해야 하지만 다른 요청에서는 사용할 수 없거나 단순히 필요하지 않을 때 사용할 수 있는 한 가지 트릭에 대해 이야기하고 싶었습니다. 다음 요청:

test_table에서 id, number, text를 선택하십시오. 모두 test_table_2에서 "", number, text를 선택하십시오.

저것들. 보시다시피 필드가 비어 있어야 하고 요청이 제대로 작동하는 곳은 다음과 같습니다.

아마도 내가 디자인에 대해 말하고 싶었던 모든 것 노조와 노조 모두 SQL 언어 이 연산자의 사용에 대해 질문이 있으면 의견에 질문하라고 말했습니다. 행운을 빕니다!

대부분 SQL 쿼리단일 문은 하나 이상의 테이블에서 데이터를 반환하는 데 사용됩니다. SQL또한 동시에 여러 개의 개별 쿼리를 실행하고 결과를 단일 데이터세트로 표시할 수 있습니다. 이러한 결합된 쿼리는 일반적으로 조합또는 복잡한 요청.

1. UNION 연산자 사용하기

언어로 된 요청 SQL연산자와 결합 노동 조합. 이렇게 하려면 각 요청을 지정해야 합니다. 고르다그리고 그들 사이에 키워드를 놓으십시오. 노동 조합. 사용되는 연산자 수 제한 노동 조합하나의 일반적인 요청에서는 그렇지 않습니다. 이전 섹션에서 우리는 입장생성할 수 없음 완벽한 외부 조인 , 이제 우리는 연산자를 통해 이것을 달성하는 방법을 볼 것입니다 노동 조합.

고르다 *
FROM Sumproduct LEFT JOIN Sellers on Sumproduct.City = Sellers.City
노동 조합
고르다 *

FROM Sumproduct RIGHT JOIN Sumproduct.City = Sellers.City의 판매자

쿼리가 첫 번째 테이블의 모든 열과 다른 테이블의 모든 레코드가 일치하는지 여부에 관계없이 다른 테이블의 모든 열을 모두 표시한 것을 알 수 있습니다.

또한 많은 경우 대신 노동 조합우리는 제안을 사용할 수 있습니다 어디많은 조건을 가지고 비슷한 결과를 얻습니다. 그러나, 노동 조합기록이 더 간결하고 이해하기 쉬워 보입니다. 또한 결합된 쿼리를 작성할 때 특정 규칙을 따라야 합니다.

  • 요구 노동 조합두 개 이상의 문을 포함해야 합니다. 고르다키워드로 구분 노동 조합(즉, 쿼리가 4개의 SELECT 문을 사용하는 경우 3개의 SELECT 문을 사용해야 합니다. 키워드노동 조합)
  • 연산자의 각 요청 노동 조합동일한 열, 표현식 또는 집계가 있어야 하며 동일한 순서로 나열되어야 합니다.
  • 열 데이터 유형은 호환되어야 합니다. 동일한 유형일 필요는 없지만 유사한 유형이어야 합니다. DBMS명확하게 변환할 수 있습니다(예: 다른 숫자 데이터 유형 또는 다른 유형날짜).

2. 반복 라인 활성화 또는 비활성화

요청 노동 조합쿼리 결과 집합에서 모든 중복 행을 자동으로 제거합니다(즉, 어디하나의 명령문에 여러 조건이 있는 경우 고르다). 이 연산자 동작 노동 조합기본적으로 있지만 원하는 경우 변경할 수 있습니다. 이렇게 하려면 연산자를 사용해야 합니다. 유니온 올대신에 노동 조합.

3. 결합 쿼리 결과 정렬

명령문 실행 결과 고르다문장으로 정렬 주문. 쿼리를 결합할 때 노동 조합단 하나의 제안 주문사용할 수 있으며 마지막 문에 포함되어야 합니다. 고르다. 실제로 결과의 일부를 한 순서로 정렬하고 다른 부분을 다른 순서로 정렬하는 것은 거의 의미가 없습니다. 그래서 몇 가지 제안 주문신청할 수 없습니다.

SQL UNION 연산자는 SELECT 단어를 사용하여 얻은 결과 데이터베이스 테이블을 결합하도록 설계되었습니다. 결과 테이블을 조인하기 위한 조건은 열의 번호, 순서 및 데이터 유형이 일치하는 것입니다. ORDER BY는 조인 결과에 적용해야 하며 멀티파트 쿼리의 끝에만 배치해야 합니다. UNION 연산자의 구문은 다음과 같습니다.

SELECT COLUMNAMES(1..N) FROM TABLE_NAME UNION SELECT COLUMN_NAMES(1..N) FROM TABLE_NAME

이 구성에서 병합되는 쿼리는 WHERE 절에 조건이 있을 수도 있고 없을 수도 있습니다. UNION 연산자를 사용하면 쿼리를 결합하여 동일한 테이블과 다른 테이블에서 데이터를 검색할 수 있습니다.

단어 ALL 없이 UNION 연산자를 사용하면 결과에 중복 항목이 포함되지 않지만 ALL 단어가 있으면 중복 항목이 포함됩니다.

SQL UNION 문을 사용하여 한 테이블의 합계 및 개별 값

하나의 쿼리로 테이블의 개별 열 값(예: 회사 직원의 근무 년수, 급여 등)을 표시할 수 있습니다. 다른 요청 - 사용 집계 함수- 예를 들어 부서 직원이나 특정 직위를 차지하는 급여 금액 또는 평균 근무 년수를 얻을 수 있습니다(이러한 쿼리에서 그룹화는 GROUP BY 연산자를 사용하여 사용됨).

그러나 하나의 테이블에서 모든 개별 값과 총 값의 요약을 모두 가져와야 한다면 어떻게 될까요? 이것은 SQL UNION 연산자가 두 개의 쿼리가 결합된 도움으로 구출되는 곳입니다. ORDER BY 절을 사용하여 조인 결과에 순서를 적용해야 합니다. 이것이 필요한 이유는 예제에서 더 잘 이해될 것입니다.

실시예 1회사의 데이터베이스에는 회사의 직원에 대한 데이터가 포함된 Staff 테이블이 있습니다. 급여(급여), 직무(직위) 및 년(근속 기간) 열이 있습니다. 첫 번째 쿼리는 직위별로 정렬된 개별 급여를 반환합니다.

SELECT 이름, 직업, 급여 FROM STAFF ORDER BY Job

이름직업샐러리
샌더스관리자18357.5
마렝기관리자17506.8
퍼널매상18171.2
의사매상12322.4
요인매상16228.7

두 번째 쿼리는 직위별 총 급여를 반환합니다. 우리는 이미 첫 번째 쿼리와 조인하기 위해 이 쿼리를 준비하고 있으므로 조인 조건은 동일한 수의 열, 이름, 순서 및 데이터 유형의 일치라는 것을 기억할 것입니다. 따라서 합계가 있는 테이블에 임의 값 "Z-TOTAL"이 있는 이름 열도 포함합니다.

SELECT "Z-TOTAL" AS 이름, 직업, SUM(급여) AS 급여 FROM STAFF GROUP BY Job

쿼리 결과는 다음 테이블이 됩니다.

이름직업샐러리
Z-TOTAL관리자35864.3
Z-TOTAL매상46722.3

이제 UNION 연산자를 사용하여 쿼리를 결합하고 ORDER BY 연산자를 통합 결과에 적용해 보겠습니다. 이름 값이 "Z-TOTAL"인 총(전체) 값이 있는 행이 개별 값이 있는 행 아래에 있도록 job(작업) 및 이름(이름)의 두 열로 그룹화해야 합니다. 쿼리 결과를 결합하면 다음과 같습니다.

(SELECT 이름, Job, Salary FROM STAFF ) UNION (SELECT "Z-TOTAL" AS Name, Job, SUM (Salary) AS Salary FROM STAFF GROUP BY Job) ORDER BY Job, Name

UNION 연산자를 사용하여 쿼리를 실행한 결과는 다음 테이블이 됩니다. 여기서 각 직위 그룹의 각 첫 번째 행에는 이 직위에서 일하는 직원의 총 급여가 포함됩니다.

이름직업샐러리
마렝기관리자17506.8
샌더스관리자18357.5
Z-TOTAL관리자35864.3
의사매상12322.4
요인매상16228.7
퍼널매상18171.2
Z-TOTAL매상46722.3

UNION을 사용하여 쿼리를 작성한 다음 솔루션 보기

실시예 2데이터는 예제 1과 동일하지만 작업이 조금 더 복잡합니다. 직급별로 분류된 개인의 임금과 직급별 총액은 물론 전 직원의 임금총액을 한 테이블에 표시해야 한다.

실시예 3회사의 데이터베이스에는 회사의 직원에 대한 데이터가 포함된 Staff 테이블이 있습니다. Name(성), Dept(부서 번호) 및 Years(근속 기간) 열이 있습니다.

이름부서연령
샌더스20 7
퍼널20 8
마렝기38 5
의사20 5
요인38 8

부서별 평균 근속 기간과 직원 근속 기간의 개별 값을 부서 번호별로 그룹화하여 한 표에 표시합니다.

SQL UNION 연산자를 사용하여 동일한 테이블의 쿼리를 조인하는 다른 경우

실시예 4회사의 데이터베이스에는 회사의 직원에 대한 데이터가 포함된 Staff 테이블이 있습니다. 급여(급여), 직무(직위) 및 년(근속 기간) 열이 있습니다. 직원에 대한 데이터를 가져오려면 첫 번째 요청이 필요하며, 21000개 이상:

쿼리 결과는 다음 테이블이 됩니다.

이제 두 쿼리에 적용된 선택 기준을 결합하는 데이터가 필요합니다. UNION 연산자를 사용하여 쿼리를 결합합니다.

UNION 연산자를 사용하여 쿼리를 실행한 결과는 다음 테이블이 됩니다.

ID이름
10 샌더스
30 마렝기
100 플로츠
140 프레이
160 몰리나레
240 다니엘스
260 존스

UNION 연산자를 사용하는 쿼리는 더 많은 열을 반환할 수 있지만 결합된 쿼리에서 열 수, 순서 및 데이터 유형이 일치하는 것이 중요합니다.

먼저 주당 100개 이상의 광고가 있는 광고 카테고리 및 카테고리의 일부에 대한 데이터를 가져오겠습니다. 다음 쿼리를 작성합니다.

쿼리 결과는 다음 테이블이 됩니다.

쿼리 결과는 다음 테이블이 됩니다.

이제 첫 번째 및 두 번째 쿼리의 기준과 일치하는 데이터를 검색하려고 합니다. UNION 연산자를 사용하여 쿼리를 결합합니다.

쿼리 결과는 다음 테이블이 됩니다.

SQL UNION 연산자를 사용하여 두 테이블의 쿼리 결과 결합

지금까지 동일한 테이블의 결과를 결합하는 UNION 쿼리를 살펴보았습니다. 이제 두 테이블의 결과를 결합합니다.

실시예 6건축자재 창고 데이터베이스가 있습니다. 배경 화면 데이터가 포함된 테이블이 있습니다. Vinil 테이블에는 비닐 월페이퍼에 대한 데이터, Paper 테이블 - 종이 월페이퍼에 대한 데이터가 포함됩니다. 하나와 다른 테이블에서 월페이퍼 가격에 대한 데이터를 찾아야합니다.

반복되지 않는 비닐 벽지 가격 데이터를 검색하기 위해 DISTINCT라는 단어로 쿼리를 만듭니다.

VINIL에서 고유한 가격 선택

쿼리 결과는 다음 테이블이 됩니다.

이제 UNION 연산자를 사용하여 결합된 쿼리를 만들어 보겠습니다.

VINIL UNION에서 고유 가격 선택 종이에서 고유 가격 선택

ALL이라는 단어를 사용하지 않기 때문에 400, 500 및 530에 대해 중복 값이 ​​없습니다. 쿼리 결과는 다음 테이블이 됩니다.

가격
300
320
360
400
430
500
530
610
720
800
850

실시예 7데이터베이스와 테이블은 이전 예와 동일합니다.

반복되는 데이터를 포함하여 모든 가격 데이터를 가져오려고 합니다. UNION 연산자를 사용하여 결과를 결합하는 쿼리는 이전 예의 쿼리와 유사하지만 UNION 대신 UNION ALL을 작성합니다.

VINIL UNION ALL에서 고유 가격 선택 PAPER에서 고유 가격 선택

쿼리 결과는 다음 테이블이 됩니다.

가격
300
320
360
400
400
430
500
500
530
530
610
720
800
850

SQL UNION 연산자를 사용하면 간단한 쿼리와 하위 쿼리를 포함하는 쿼리(중첩 쿼리). 해당하는 예를 살펴보겠습니다.

실시예 8"극장" 데이터베이스가 있습니다. 재생 테이블에는 프로덕션(제목 - 이름 열)에 대한 데이터, 감독 테이블 - 감독에 대한 데이터(Fname 열 - 이름, Lname 열 - 성)에 대한 데이터가 포함됩니다. Director 테이블의 기본 키는 dir_id - 디렉터의 식별 번호입니다. Dir_id는 또한 Play 테이블의 외래 키이며 Director 테이블의 기본 키를 나타냅니다. John Barton과 Trevor Nunn이 감독한 공연을 표시해야 합니다.

해결책. 두 쿼리의 결과를 결합해 보겠습니다. 하나는 John Barton 감독의 연기를 반환하고 다른 하나는 Trevor Nunn 감독입니다. 그리고 Play 테이블에 대한 이러한 결합된 쿼리 각각은 Director 테이블에 대한 하위 쿼리로 이루어지며, 이 하위 쿼리는 감독의 이름과 성을 기준으로 dir_id를 반환합니다. 각 외부 쿼리는 하위 쿼리에서 dir_id 키 값을 가져오고 프로덕션(이름)의 이름을 반환합니다.

관계형 데이터베이스 및 SQL 언어