다음을 통해 공유


테이블 외에 다른 항목을 사용하여 쿼리 만들기(Visual Database Tools)

적용 대상:SQL Server

검색 쿼리를 작성할 때마다 원하는 열, 원하는 행 및 쿼리 프로세서에서 원래 데이터를 찾아야 하는 위치를 명확하게 설명합니다. 일반적으로 이 원본 데이터는 함께 조인된 테이블 또는 여러 테이블로 구성됩니다. 그러나 원래 데이터는 테이블 이외의 원본에서 올 수 있습니다. 실제로 테이블을 반환하는 뷰, 쿼리, 동의어 또는 사용자 정의 함수에서 올 수 있습니다.

테이블 대신 보기 사용

보기에서 행을 선택할 수 있습니다. 예를 들어 데이터베이스에 각 행이 가격이 19.99를 초과하는 제목을 설명하는 "ExpensiveBooks"라는 뷰가 포함되어 있다고 가정합니다. 뷰 정의는 다음과 같이 표시될 수 있습니다.

SELECT *
FROM titles
WHERE price > 19.99;

고가의 심리학 서적은 ExpensiveBooks 보기에서 심리학 책을 선택하기만 하면 됩니다. 결과 SQL은 다음과 같을 수 있습니다.

SELECT *
FROM ExpensiveBooks
WHERE type = 'psychology';

마찬가지로 보기는 작업에 참여할 JOIN 수 있습니다. 예를 들어 판매 테이블을 ExpensiveBooks 보기에 조인하여 고가의 서적 판매를 찾을 수 있습니다. 결과 SQL은 다음과 같을 수 있습니다.

SELECT *
FROM sales
     INNER JOIN ExpensiveBooks
         ON sales.title_id = ExpensiveBooks.title_id;

쿼리에 뷰를 추가하는 방법에 대한 자세한 내용은 쿼리 에 테이블 추가(Visual Database Tools)를 참조하세요.

테이블 대신 쿼리 사용

쿼리에서 행을 선택할 수 있습니다. 예를 들어 공동 작성자가 두 명 이상인 책의 제목과 식별자를 검색하는 쿼리를 이미 작성했다고 가정합니다. SQL은 다음과 같이 표시될 수 있습니다.

SELECT titles.title_id,
       title,
       type
FROM titleauthor
     INNER JOIN titles
         ON titleauthor.title_id = titles.title_id
GROUP BY titles.title_id, title, type
HAVING COUNT(*) > 1;

그런 다음 이 결과를 기반으로 빌드되는 다른 쿼리를 작성할 수 있습니다. 예를 들어 공동 작성 심리학 책을 검색하는 쿼리를 작성할 수 있습니다. 이 새 쿼리를 작성하려면 기존 쿼리를 새 쿼리 데이터의 원본으로 사용할 수 있습니다. 결과 SQL은 다음과 같을 수 있습니다.

SELECT title
FROM (SELECT titles.title_id,
             title,
             type
      FROM titleauthor
           INNER JOIN titles
               ON titleauthor.title_id = titles.title_id
      GROUP BY titles.title_id, title, type
      HAVING COUNT(*) > 1) AS co_authored_books
WHERE type = 'psychology';

강조 표시된 텍스트는 새 쿼리 데이터의 원본으로 사용되는 기존 쿼리를 보여줍니다. 새 쿼리는 기존 쿼리에 별칭("co_authored_books")을 사용합니다. 별칭에 대한 자세한 내용은 테이블 별칭 만들기(Visual Database Tools)열 별칭 만들기(Visual Database Tools)를 참조하세요.

마찬가지로 쿼리는 작업에 참여할 JOIN 수 있습니다. 예를 들어 ExpensiveBooks 뷰를 공동 저술된 책을 검색하는 쿼리에 조인함으로써 고가의 공동 작성 서적의 판매를 확인할 수 있습니다. 결과 SQL은 다음과 같을 수 있습니다.

SELECT
    ExpensiveBooks.title
FROM
    ExpensiveBooks
        INNER JOIN
        (
        SELECT
            titles.title_id,
            title,
            type
        FROM
            titleauthor
                INNER JOIN
                titles
                ON titleauthor.title_id
                =  titles.title_id
        GROUP BY
            titles.title_id,
            title,
            type
        HAVING COUNT(*) > 1
        )

쿼리에 쿼리를 추가하는 방법에 대한 자세한 내용은 쿼리 에 테이블 추가(Visual Database Tools)를 참조하세요.

테이블 대신 사용자 정의 함수 사용

테이블을 반환하는 사용자 정의 함수를 만들 수 있습니다. 이러한 함수는 복잡한 또는 절차적 논리를 수행하는 데 유용합니다.

예를 들어 직원 테이블에 추가 열employee.manager_emp_id이 포함되어 있고 외래 키가 manager_emp_id.employee.emp_id 직원 테이블의 각 행 내에서 열은 manager_emp_id 직원의 상사를 나타냅니다. 더 정확하게 말하면 직원의 상사 emp_id를 나타냅니다. 특정 상위 수준 관리자의 조직 계층 구조 내에서 작업하는 각 직원에 대해 하나의 행이 포함된 테이블을 반환하는 사용자 정의 함수를 만들 수 있습니다. 함수 fn_GetWholeTeam 호출하여 검색하려는 팀의 입력 변수인 emp_id 입력 변수를 사용하도록 디자인할 수 있습니다.

fn_GetWholeTeam 함수를 데이터 원본으로 사용하는 쿼리를 작성할 수 있습니다. 결과 SQL은 다음과 같을 수 있습니다.

SELECT *
FROM fn_GetWholeTeam('VPA30890F');

VPA30890Femp_id 검색하려는 조직의 관리자입니다. 쿼리에 사용자 정의 함수를 추가하는 방법에 대한 자세한 내용은 쿼리 에 테이블 추가(Visual Database Tools)를 참조하세요. 사용자 정의 함수에 대한 전체 설명은 사용자 정의 함수를 참조하세요.