SELECT(Transact-SQL)
데이터베이스에서 행을 검색하고 SQL Server 2008 R2에서 하나 이상의 테이블에서 하나 이상의 행 또는 열을 선택할 수 있도록 합니다. SELECT 문의 전체 구문은 복잡하지만 주요 절은 다음과 같이 요약할 수 있습니다.
[ WITH <common_table_expression>]
SELECT select_list [ INTO new_table ]
[ FROM table_source ] [ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ HAVING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ] ]
UNION, EXCEPT 및 INTERSECT 연산자는 쿼리 간에 결과를 비교하거나 하나의 결과 집합으로 결합하는 데 사용됩니다.
구문
<SELECT statement> ::=
[WITH <common_table_expression> [,...n]]
<query_expression>
[ ORDER BY { order_by_expression | column_position [ ASC | DESC ] }
[ ,...n ] ]
[ COMPUTE
{ { AVG | COUNT | MAX | MIN | SUM } (expression )} [ ,...n ]
[ BY expression [ ,...n ] ]
]
[ <FOR Clause>]
[ OPTION ( <query_hint> [ ,...n ] ) ]
<query_expression> ::=
{ <query_specification> | ( <query_expression> ) }
[ { UNION [ ALL ] | EXCEPT | INTERSECT }
<query_specification> | ( <query_expression> ) [...n ] ]
<query_specification> ::=
SELECT [ ALL | DISTINCT ]
[TOP (expression) [PERCENT] [ WITH TIES ] ]
< select_list >
[ INTO new_table ]
[ FROM { <table_source> } [ ,...n ] ]
[ WHERE <search_condition> ]
[ <GROUP BY> ]
[ HAVING < search_condition > ]
주의
SELECT 문은 복잡하기 때문에 자세한 구문 요소와 인수가 다음과 같은 절로 표시됩니다.
SELECT 문에서 절의 순서는 매우 중요합니다. 선택 사항인 절은 생략할 수 있지만 이러한 절을 사용할 때는 적절한 순서로 표시해야 합니다.
사용자 정의 함수 내의 SELECT 문은 함수에서 로컬인 변수에 값을 할당하는 식이 문의 선택 목록에 포함된 경우에만 허용됩니다.
서버 이름 부분에 OPENDATASOURCE 함수를 사용하여 네 부분으로 구성한 이름은 SELECT 문에서 테이블 이름이 표시될 수 있는 곳이면 어디든 테이블 원본으로 사용할 수 있습니다.
원격 테이블과 관련된 SELECT 문에는 몇몇 구문 제한이 적용됩니다. 자세한 내용은 분산 쿼리 사용에 대한 지침을 참조하십시오.
SELECT 문의 논리적 처리 순서
다음 단계에서는 SELECT 문의 논리적 처리 순서 또는 바인딩 순서를 보여 줍니다. 이 순서는 어느 한 단계에서 정의된 개체가 이후 단계의 절에서 사용 가능한 시점을 결정합니다. 예를 들어 쿼리 프로세서가 FROM 절에서 정의된 테이블 또는 뷰에 바인딩(액세스)할 수 있는 경우, 이러한 개체와 해당 열은 이후 모든 단계에서 사용할 수 있습니다. 반대로 SELECT 절은 8단계이므로 해당 절에 정의된 어떠한 열 별칭 또는 파생 열도 앞선 절에서 참조될 수 없습니다. 그러나 ORDER BY 절과 같은 이후 절에서는 참조될 수 있습니다. 문의 실제 물리적 실행은 쿼리 프로세서에 의해 결정되며 순서는 목록과 다를 수 있습니다.
FROM
ON
JOIN
WHERE
GROUP BY
WITH CUBE 또는 WITH ROLLUP
HAVING
SELECT
DISTINCT
ORDER BY
TOP
사용 권한
데이터를 선택하려면 테이블이나 뷰에 대한 SELECT 권한이 있어야 합니다. 이 권한은 스키마에 대한 SELECT 권한이나 테이블에 대한 CONTROL 권한과 같은 상위 범위에서 상속할 수 있습니다. 또는 db_datareader 또는 db_owner 고정 데이터베이스 역할이나 sysadmin 고정 서버 역할의 멤버여야 합니다. SELECTINTO를 사용하여 새 테이블을 만들려면 CREATETABLE 권한과 새 테이블을 소유하는 스키마에 대한 ALTERSCHEMA 권한이 둘 다 있어야 합니다.