FROM 절(SQL Server Compact)

행을 검색할 테이블을 지정합니다. SQL Server Compact에서 FROM 절은 선택 사항입니다.

참고

테이블 반환 함수는 SQL Server Compact에서 지원되지 않습니다.

구문

  [ FROM { < table_source > } [ ,...n ]  
< table_source > ::= 
      table_name [ [ AS ] table_alias ] 
   | < joined_table > 
| <derived_table> [ [ AS ] table_alias ]
< joined_table > ::= 
   < table_source > < join_type > < table_source > ON < search_condition > 
| <table_source> CROSS JOIN <table_source>
| <left_table_source> { CROSS | OUTER } APPLY <right_table_source>
   | ( < joined_table > )
< join_type > ::= 
   [ INNER | { { LEFT | RIGHT } [ OUTER ] } ] JOIN ]
left_table_source::= table_source
right_table_source::=table_source

인수

  • < table_source >
    SELECT 문의 테이블 및 조인된 테이블을 지정합니다.

  • table_alias[ [ AS ] table_alias]
    테이블 이름 및 선택적 별칭을 지정합니다.

    파생된 테이블, 행 집합, 테이블 반환 함수를 사용할 경우 절 끝 부분에 지정되는 table_alias는 그룹화 열을 포함하여 반환되는 모든 열에 대한 대체 테이블 이름이어야 합니다.

  • <joined_table>
    둘 이상 테이블의 조인인 결과 집합입니다.

    조인이 여러 개인 경우 괄호를 사용하여 조인의 순서를 지정할 수 있습니다.

  • derived_table
    데이터베이스에서 행을 검색하는 하위 쿼리입니다. derived_table은 외부 쿼리에 대한 입력으로 사용됩니다.

  • <join_type>
    조인 연산의 유형을 지정합니다.

  • left_table_source { CROSS | OUTER } APPLY right_table_source
    left_table_source의 모든 행에 대해 APPLY 연산자의 right_table_source가 계산되도록 지정합니다. 이 기능은 right_table_source가 left_table_source의 값에 따라 달라지고 조인 연산을 사용하여 쿼리를 반복하는 쉬운 방법이 없을 경우에 유용합니다.

    CROSS 또는 OUTER를 APPLY와 함께 지정해야 합니다. CROSS를 지정하고 left_table_source의 지정된 행에 대해 right_table_source를 계산할 경우 아무 행도 생성되지 않으며 빈 결과 집합이 반환됩니다.

    OUTER를 지정하면 left_table_source의 각 행에 대해 하나의 행이 생성됩니다. right_table_source가 해당 행에 대해 계산하고 빈 결과 집합을 반환하는 경우에도 하나의 행이 생성됩니다.

  • left_table_source
    이전 인수에 정의된 테이블 원본입니다. 자세한 내용은 이 문서의 끝부분에 나오는 주의 섹션을 참조하십시오.

  • right_table_source
    이전 인수에 정의된 테이블 원본입니다. 자세한 내용은 이 문서의 끝부분에 나오는 주의 섹션을 참조하십시오.

  • CROSS JOIN
    두 테이블의 교차곱을 지정합니다.

  • INNER
    서로 일치하는 모든 행 쌍이 반환되도록 지정합니다. 두 테이블에서 일치하지 않는 행을 무시합니다. 조인 유형이 지정되지 않은 경우 이 값이 기본값입니다.

  • LEFT [ OUTER ]
    지정된 조건을 충족하지 않는 왼쪽 테이블의 모든 행이 결과 집합과 내부 조인에서 반환한 모든 행에 포함되도록 지정합니다. 왼쪽 테이블의 Output 열이 NULL로 설정됩니다.

  • RIGHT [ OUTER ]
    지정된 조건을 충족하지 않는 오른쪽 테이블의 모든 행이 결과 집합과 내부 조인에서 반환한 모든 행에 포함되도록 지정합니다. 오른쪽 테이블의 Output 열이 NULL로 설정됩니다.

  • JOIN
    지정된 테이블을 조인해야 함을 나타냅니다.

  • ON <search_condition>
    조인의 기반이 되는 조건을 지정합니다. 조건은 유효한 조건자를 모두 지정할 수 있지만 열 및 비교 연산자가 주로 사용됩니다.

주의

JOIN 또는 APPLY를 사용하여 같은 쿼리를 작성할 수 있으면 JOIN을 사용하는 것이 더 빠릅니다.

right_table_source에 표시된 테이블에 바인딩되지 않은 테이블 참조가 right_table_source에 있으면 (i) left_table_source에 의해 표시되는 테이블 별칭이나 테이블 이름을 일치시키거나 (ii) 외부 FROM 절에 의해 노출되는 테이블 이름이나 별칭을 일치시켜야 합니다(APPLY가 WHERE 절의 하위 쿼리 또는 SELECT 목록에 표시되는 경우). i 및 ii에서 일치하는 참조가 있으면 i의 우선 순위가 높습니다.

APPLY 연산자는 JOIN 연산자와 우선 순위가 같습니다. 괄호가 없으면 일련의 JOIN 및 APPLY 연산자는 왼쪽에서 오른쪽으로 계산됩니다.

자세한 내용은 SQL Server 온라인 설명서의 FROM 절 사용APPLY 사용 항목을 참조하십시오.

다음 예에서는 FROM 절 사용 방법에 대해 자세히 설명합니다.

SELECT [Order ID], [Unit Price]
FROM [Order Details]

간단한 FROM 절 사용

다음 예에서는 Northwind 예제 데이터베이스의 Employees 테이블에서 Employee ID 열과 Last Name 열을 검색합니다.

SELECT [Employee Id], [Last Name]
FROM Employees
ORDER BY [Employee Id]

CROSS JOIN 사용

다음 예에서는 Employees 및 Orders 두 테이블의 교차곱을 반환합니다. Employee ID 행과 모든 Order ID 행의 가능한 모든 조합 목록이 반환됩니다.

SELECT E.[Employee ID], O.[Order Id]
FROM Employees E
CROSS JOIN Orders O
ORDER BY E.[Employee ID], O.[Order Id];

LEFT OUTER JOIN 사용

다음 예에서는 Product ID의 두 테이블을 조인하고 왼쪽 테이블에서 일치하지 않는 행도 함께 반환합니다. Products 테이블은 각 테이블의 Product ID 열에 있는 Order Details 테이블과 일치합니다. 주문 여부에 관계없이 모든 제품이 결과 집합에 나타납니다.

SELECT p.[Product Name], od.[Order ID]
FROM Products p
LEFT OUTER JOIN [Order Details] od
ON p.[Product ID] = od.[Product ID]
ORDER BY p.[Product Name];

결과 집합은 다음과 같습니다.

        Product Name            Order ID
        --------------------------------
        Alice Mutton               10000
        Alice Mutton               10045
        Alice Mutton               10093
        Alice Mutton               10124
        Alice Mutton               10166
(2820 rows affected)

INNER JOIN 사용

다음 예에서는 모든 제품 이름과 판매 주문 ID를 반환합니다.

-- By default, SQL Server Compact performs an INNER JOIN if only  
-- the JOIN keyword is specified.
SELECT p.[Product Name], od.[Order ID]
FROM Products p
INNER JOIN [Order Details] od
ON p.[Product ID] = od.[Product ID]
ORDER BY p.[Product Name];

RIGHT OUTER JOIN 사용

다음 예에서는 Product ID의 두 테이블을 조인하고 오른쪽 테이블에서 일치하지 않는 행도 함께 반환합니다. Products 테이블은 각 테이블의 Product ID 열에 있는 Order Details 테이블과 일치합니다. 주문 여부에 관계없이 모든 제품이 결과 집합에 나타납니다.

SELECT p.[Product Name], od.[Order ID]
FROM Products p
RIGHT OUTER JOIN [Order Details] od
ON p.[Product ID] = od.[Product ID]
ORDER BY p.[Product Name];

파생 테이블 사용

다음 예에서는 파생 테이블을 사용하여 즉, SELECT 문을 FROM 절 다음에 사용하여 모든 직원의 성과 이름, 연락처 이름 및 직원이 담당하는 고객의 거주 도시를 반환합니다.

SELECT RTRIM(e.[First Name]) + ' ' + LTRIM(e.[Last Name]) AS [Employee Name], C.[Contact Name], C.City
FROM Employees e
INNER JOIN Orders O 
ON O.[Employee ID] = e.[Employee ID]
INNER JOIN (SELECT [Contact Name], City, [Customer Id] 
FROM Customers) AS C
ON O.[Customer Id] = C.[Customer Id]
ORDER BY e.[Last Name], e.[First Name];

APPLY 사용

CROSS APPLY는 원본 데이터를 테이블 이름 대신 테이블 결과 값으로 지정합니다. CROSS APPLY는 외부 쿼리의 각 행에 대해 신속하게 데이터 하위 집합을 생성하는 인스턴스에서 사용할 수 있습니다. CROSS APPLY를 통해 사용자는 외부 쿼리의 행을 기반으로 하위 집합을 생성하는 방법을 지정할 수 있습니다. 다음은 CROSS APPLY를 사용하여 각 행에 대한 작업을 수행하는 쿼리의 예입니다.

예:

SELECT
FROM
  Orders AS O CROSS APPLY
  (
    SELECT TOP(2) * --for each row in Orders there will be at most 2 customers
    FROM Customers C
    WHERE C.[Customer ID] = O.[Customer ID]
    ORDER BY C.[Customer ID]
  ) AS theOrdersTopCustomers

OUTER APPLY는 원본 데이터를 테이블 이름 대신 테이블 결과 값으로 지정합니다. OUTER APPLY는 외부 쿼리의 각 행에 대해 신속하게 데이터 하위 집합을 생성하는 인스턴스에서 사용할 수 있습니다. CROSS APPLY와 달리 OUTER APPLY는 내부 쿼리의 행과 일치하지 않는 외부 쿼리의 행을 보존하기도 합니다. 다음 예는 일치하는 항목 없이 결과도 포함하는 쿼리를 보여 줍니다.

예:

SELECT
FROM
  Customers AS C OUTER APPLY
  (
    SELECT TOP(1) *
    FROM Orders O
    WHERE O.[Customer ID] = C.[Customer ID]
    ORDER BY O.[Customer ID]
  ) AS topCustomerID

앞의 예에서는 Orders 테이블이 'PARIS'에 대한 레코드를 포함하지 않으므로 OUTER APPLY 결과에 Customer ID인 'PARIS'가 포함됨을 보여 줍니다. 따라서 내부 쿼리는 Orders 테이블의 'PARIS'와 일치하는 TOP Customer ID로 NULL을 반환했습니다. OUTER를 CROSS로 변경하면 결과에서 'PARIS'가 제외됩니다.

참고

SQL Server Compact의 APPLY에서는 사용자 정의 함수를 지원하지 않습니다.