Microsoft로 로그인
로그인하거나 계정을 만듭니다.
안녕하세요.
다른 계정을 선택합니다.
계정이 여러 개 있음
로그인할 계정을 선택합니다.

경우에 따라 쿼리 결과를 다른 쿼리의 필드로 사용하거나 쿼리 필드의 기준으로 사용할 수 있습니다. 예를 들어 각 제품의 주문 간격을 확인하려는 경우를 가정해 보겠습니다. 이 간격을 보여 주는 쿼리를 만들려면 각 주문 날짜를 해당 제품의 다른 주문 날짜와 비교해야 합니다. 이러한 주문 날짜를 비교하려면 쿼리도 필요합니다. 하위 쿼리 사용하여 이 쿼리를 기본 쿼리 내부에 중첩할 수 있습니다.

식 또는 SQL 보기 구조적 쿼리 언어(SQL) 문에서 하위 쿼리를 작성할 수 있습니다.

이 문서의 내용

쿼리 결과를 다른 쿼리의 필드로 사용

하위 쿼리를 필드 별칭으로 사용할 수 있습니다. 하위 쿼리 결과를 기본 쿼리의 필드로 사용하려는 경우 하위 쿼리를 필드 별칭으로 사용합니다.

참고: 필드 별칭으로 사용하는 하위 쿼리는 둘 이상의 필드를 반환할 수 없습니다.

하위 쿼리 필드 별칭을 사용하여 현재 행의 다른 값에 종속된 값을 표시할 수 있습니다. 이 값은 하위 쿼리를 사용하지 않고는 불가능합니다.

예를 들어 각 제품의 주문 간격을 확인하려는 예제로 돌아가 보겠습니다. 이 간격을 확인하려면 각 주문 날짜를 해당 제품의 다른 주문 날짜와 비교해야 합니다. Northwind 데이터베이스 템플릿을 사용하여 이 정보를 보여 주는 쿼리를 만들 수 있습니다.

  1. 파일 탭에서 새로 만들기를 클릭합니다.

  2. 사용 가능한 템플릿에서 샘플 템플릿을 클릭합니다.

  3. Northwind를 클릭한 다음 만들기를 클릭합니다.

  4. 시작 화면 개체 탭의 Northwind Traders 페이지에 나타나는 설명에 따라 데이터베이스를 연 다음 로그인 대화 상자 창을 닫습니다.

  5. 만들기 탭의 쿼리 그룹에서 쿼리 디자인을 클릭합니다.

  6. 쿼리 탭 클릭한 다음 제품 주문을 두 번 클릭합니다.

  7. 제품 ID 필드와 주문 날짜 필드를 두 번 클릭하여 쿼리 디자인 표에 추가합니다.

  8. 제품 ID 열 정렬 행에서 오름차순을 선택합니다.

  9. 표의 Order Date 열의 정렬 행에서 내림차순을 선택합니다.

  10. 표의 세 번째 열에서 필드 행을 마우스 오른쪽 단추로 클릭한 다음 바로 가기 메뉴에서 확대/축소 를 클릭합니다.

  11. 확대/축소 대화 상자에서 다음 식을 입력하거나 붙여넣습니다.

    Prior Date: (SELECT MAX([Order Date]) 
    FROM [Product Orders] AS [Old Orders]
    WHERE [Old Orders].[Order Date] < [Product Orders].[Order Date]
    AND [Old Orders].[Product ID] = [Product Orders].[Product ID])

    이 식은 하위 쿼리입니다. 각 행에 대해 하위 쿼리는 행과 이미 연결된 주문 날짜보다 최근 주문 날짜를 선택합니다. 하위 쿼리의 값을 기본 쿼리의 현재 행에 있는 값과 비교할 수 있도록 AS 키워드(keyword) 사용하여 테이블 별칭을 만드는 방법을 확인합니다.

  12. 표의 네 번째 열에 필드 행에 다음 식을 입력합니다.

    Interval: [Order Date]-[Prior Date]

    이 식은 하위 쿼리를 사용하여 정의한 이전 날짜의 값을 사용하여 각 주문 날짜와 해당 제품의 이전 주문 날짜 사이의 간격을 계산합니다.

  13. 디자인 탭의 결과 그룹에서 실행을 클릭합니다.

    1. 쿼리가 실행되고 제품 이름, 주문 날짜, 이전 주문 날짜 및 주문 날짜 사이의 간격 목록이 표시됩니다. 결과는 먼저 제품 ID(오름차순)로 정렬된 다음 주문 날짜(내림차순)로 정렬됩니다.

    2. 참고: 제품 ID는 조회 필드이므로 기본적으로 Access는 실제 제품 ID가 아닌 조회 값(이 경우 제품 이름)을 표시합니다. 표시되는 값은 변경되지만 정렬 순서는 변경되지 않습니다.

  14. Northwind 데이터베이스를 닫습니다.

맨 위로 이동

쿼리 필드에 대한 기준으로 하위 쿼리 사용

하위 쿼리를 필드 기준으로 사용할 수 있습니다. 하위 쿼리의 결과를 사용하여 필드가 표시하는 값을 제한하려는 경우 하위 쿼리를 필드 기준으로 사용합니다.

예를 들어 영업 담당자가 아닌 직원이 처리한 주문 목록을 검토하려는 경우를 가정해 보겠습니다. 이 목록을 생성하려면 각 주문의 직원 ID를 영업 담당자가 아닌 직원의 직원 ID 목록과 비교해야 합니다. 이 목록을 만들고 필드 기준으로 사용하려면 다음 절차와 같이 하위 쿼리를 사용합니다.

  1. Northwind.accdb를 열고 해당 콘텐츠를 사용하도록 설정합니다.

  2. 로그인 양식을 닫습니다.

  3. 만들기 탭의 쿼리 그룹에서 쿼리 디자인을 클릭합니다.

  4. 테이블 탭에서 주문직원을 두 번 클릭합니다.

  5. Orders 테이블에서 직원 ID 필드, 주문 ID 필드 및 주문 날짜 필드를 두 번 클릭하여 쿼리 디자인 표에 추가합니다. Employees 테이블에서 작업 제목 필드를 두 번 클릭하여 디자인 그리드에 추가합니다.

  6. 직원 ID 열의 조건 행을 마우스 오른쪽 단추로 클릭한 다음 바로 가기 메뉴에서 확대/축소 를 클릭합니다.

  7. 확대/축소 상자에 다음 식을 입력하거나 붙여넣습니다.

    IN (SELECT [ID] FROM [Employees] 
    WHERE [Job Title]<>'Sales Representative')

    하위 쿼리입니다. 직원이 영업 담당자의 직급이 없는 모든 직원 ID를 선택하고 그 결과 집합을 기본 쿼리로 제공합니다. 그런 다음 기본 쿼리는 Orders 테이블의 직원 ID가 결과 집합에 있는지 확인합니다.

  8. 디자인 탭의 결과 그룹에서 실행을 클릭합니다.

    쿼리가 실행되고 쿼리 결과에는 영업 담당자가 아닌 직원이 처리한 주문 목록이 표시됩니다.

맨 위로 이동

하위 쿼리와 함께 사용할 수 있는 일반적인 SQL 키워드

하위 쿼리와 함께 사용할 수 있는 몇 가지 SQL 키워드가 있습니다.

참고: 이 목록은 완전하지 않습니다. 데이터 정의 키워드를 제외한 하위 쿼리에서 유효한 SQL 키워드(keyword) 사용할 수 있습니다.

  • 모든    WHERE 절의 ALL을 사용하여 하위 쿼리에서 반환된 모든 행과 비교할 때 조건을 충족하는 행을 검색합니다.

    예를 들어 대학에서 학생 데이터를 분석한다고 가정해 보겠습니다. 학생들은 전공에서 전공에 따라 달라지는 최소 GPA를 유지해야 합니다. 전공 및 최소 GPA는 Majors라는 테이블에 저장되며 관련 학생 정보는 Student_Records 테이블에 저장됩니다.

    해당 전공을 가진 모든 학생이 최소 GPA를 초과하는 전공(및 최소 GPA) 목록을 보려면 다음 쿼리를 사용할 수 있습니다.

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • ANY    WHERE 절에서 ANY를 사용하여 하위 쿼리에서 반환된 행 중 하나 이상과 비교할 때 조건을 충족하는 행을 검색합니다.

    예를 들어 대학에서 학생 데이터를 분석한다고 가정해 보겠습니다. 학생들은 전공에서 전공에 따라 달라지는 최소 GPA를 유지해야 합니다. 전공 및 최소 GPA는 Majors라는 테이블에 저장되며 관련 학생 정보는 Student_Records 테이블에 저장됩니다.

    해당 전공의 학생이 최소 GPA를 충족하지 않는 전공(및 최소 GPA) 목록을 보려면 다음 쿼리를 사용할 수 있습니다.

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] > ANY
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);

    참고: 같은 용도로 SOME 키워드(keyword) 사용할 수도 있습니다. SOME 키워드(keyword) ANY와 동의어입니다.

  • EXISTS     WHERE 절에서 EXISTS를 사용하여 하위 쿼리가 하나 이상의 행을 반환해야 함을 나타냅니다. 하위 쿼리가 행을 반환해서는 안 함을 나타내기 위해 NOT을 사용하여 EXISTS를 서문으로 표시할 수도 있습니다.

    예를 들어 다음 쿼리는 하나 이상의 기존 순서로 발견된 제품 목록을 반환합니다.

    SELECT *
    FROM [Products]
    WHERE EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);

    NOT EXISTS를 사용하여 쿼리는 하나 이상의 기존 순서로 찾을 수 없는 제품 목록을 반환합니다.

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • IN    WHERE 절에서 IN을 사용하여 기본 쿼리의 현재 행에 있는 값이 하위 쿼리가 반환하는 집합의 일부인지 확인합니다. 또한 IN을 NOT으로 서문으로 표시하여 기본 쿼리의 현재 행에 있는 값이 하위 쿼리가 반환하는 집합의 일부가 아닌지 확인할 수도 있습니다.

    예를 들어 다음 쿼리는 영업 담당자가 아닌 직원이 처리한 주문 목록(주문 날짜 포함)을 반환합니다.

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]<>'Sales Representative');

    NOT IN을 사용하면 다음과 같은 방식으로 동일한 쿼리를 작성할 수 있습니다.

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] NOT IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]='Sales Representative');

맨 위로 이동

도움이 더 필요하세요?

더 많은 옵션을 원하세요?

구독 혜택을 살펴보고, 교육 과정을 찾아보고, 디바이스를 보호하는 방법 등을 알아봅니다.

커뮤니티를 통해 질문하고 답변하고, 피드백을 제공하고, 풍부한 지식을 갖춘 전문가의 의견을 들을 수 있습니다.

이 정보가 유용한가요?

언어 품질에 얼마나 만족하시나요?
사용 경험에 어떠한 영향을 주었나요?
제출을 누르면 피드백이 Microsoft 제품과 서비스를 개선하는 데 사용됩니다. IT 관리자는 이 데이터를 수집할 수 있습니다. 개인정보처리방침

의견 주셔서 감사합니다!

×