SELECT 절(Transact-SQL)
쿼리에서 열을 반환하도록 지정합니다.
구문
SELECT [ ALL | DISTINCT ]
[ TOP expression [ PERCENT ] [ WITH TIES ] ]
<select_list>
<select_list> ::=
{
| { table_name | view_name | table_alias }.*
| {
[ { table_name | view_name | table_alias }. ]
{ column_name | $IDENTITY | $ROWGUID }
| udt_column_name [ { . | :: } { { property_name | field_name }
| method_name ( argument [ ,...n] ) } ]
| expression
[ [ AS ] column_alias ]
}
| column_alias = expression
} [ ,...n ]
인수
- ALL
결과 집합에 중복 행을 표시할 수 있도록 지정합니다. 기본값은 ALL입니다.
- DISTINCT
결과 집합에 고유한 행만 표시하도록 지정합니다. Null 값은 용도 면에서 DISTINCT 키워드와 동등한 것으로 간주됩니다.
TOP expression [ PERCENT ] [ WITH TIES ]
지정한 첫 번째 집합 또는 백분율 만큼의 행만 쿼리 결과 집합에서 반환될 것임을 나타냅니다. expression은 수 또는 행의 백분율이 될 수 있습니다.SELECT, INSERT, UPDATE 및 DELETE 문에 TOP 절을 사용할 수 있습니다. INSERT, UPDATE 및 DELETE 문에서는 괄호를 사용하여 TOP의 expression을 구분해야 합니다. 이전 버전과의 호환성을 위해 SELECT 문에서 괄호 없이 TOP expression을 사용할 수 있지만 권장되지는 않습니다. 자세한 내용은 TOP(Transact-SQL)을 참조하십시오.
- < select_list >
결과 집합에 대해 선택할 열입니다. 선택 목록은 쉼표로 구분된 일련의 식입니다. 선택 목록에 지정할 수 있는 식의 최대 수는 4096개입니다.
- *
FROM 절에서 모든 테이블과 뷰에 있는 모든 열이 반환되도록 지정합니다. 열은 FROM 절에서 지정된 대로 테이블 또는 뷰에 존재하는 순서대로 테이블이나 뷰에서 반환됩니다.
- table_ name| view_ name| table_ alias.*
*****의 범위를 지정된 테이블이나 뷰로 제한합니다.
- column_ name
반환할 열의 이름입니다. column_name을 한정하면 FROM 절의 두 테이블이 중복 이름 열을 가지는 것과 같은 확실하지 않은 참조를 방지할 수 있습니다. 예를 들어 AdventureWorks 데이터베이스의 SalesOrderHeader 및 SalesOrderDetail 테이블은 둘 다 ModifiedDate라는 열을 가집니다. 두 테이블이 한 쿼리에 조인된 경우 선택 목록에서 SalesOrderDetail 항목의 수정된 날짜를 SalesOrderDetail.ModifiedDate와 같이 지정할 수 있습니다.
- expression
상수, 함수, 연산자로 연결된 열 이름, 상수 및 함수의 모든 조합 또는 하위 쿼리입니다.
$IDENTITY
ID 열을 반환합니다. 자세한 내용은 IDENTITY(속성)(Transact-SQL), ALTER TABLE(Transact-SQL) 및 CREATE TABLE(Transact-SQL)을 참조하십시오.FROM 절에 둘 이상의 테이블이 IDENTITY 속성의 열을 가진 경우 T1.$IDENTITY와 같은 특정 테이블 이름으로 $IDENTITY를 한정해야 합니다.
$ROWGUID
행 GUID 열을 반환합니다.FROM 절에 둘 이상의 테이블이 ROWGUIDCOL 속성을 가진 경우 T1.$ROWGUID와 같은 특정 테이블 이름으로 $ROWGUID를 한정해야 합니다.
udt_column_name
반환할 CLR(공용 언어 런타임) 사용자 정의 형식 열의 이름입니다.[!참고] SQL Server Management Studio는 사용자 정의 형식 값을 이진 표현으로 반환합니다. 문자열 또는 XML 형식으로 사용자 정의 형식 값을 반환하려면 CAST 또는 CONVERT를 사용하십시오.
- { . | :: }
CLR 사용자 정의 형식의 메서드, 속성 또는 필드를 지정합니다. 인스턴스(비정적) 메서드, 속성 또는 필드에 대해서는 **.**을 사용하십시오. 정적 메서드, 속성 또는 필드에 대해서는 **::**을 사용하십시오. CLR 사용자 정의 형식의 메서드, 속성 또는 필드를 호출하려면 해당 형식에 대해 EXECUTE 권한이 있어야 합니다.
- property_name
udt_column_name의 공용 속성입니다.
- field_name
udt_column_name의 공용 데이터 멤버입니다.
method_name
하나 이상의 인수를 사용하는 udt_column_name의 공용 메서드입니다. method_name은 변경자 메서드가 될 수 없습니다.다음 예에서는
Distance
라는 메서드를 호출하여Cities
테이블에서point
형식으로 정의되는Location
열에 대한 값을 선택하는 방법을 보여 줍니다.CREATE TABLE Cities ( Name varchar(20), State varchar(20), Location point ); GO DECLARE @p point (32, 23), @distance float GO SELECT Location.Distance (@p) FROM Cities;
column_ alias
쿼리 결과 집합에서 열 이름을 대신하는 대체 이름입니다. 예를 들어 quantity라는 열에 Quantity, Quantity to Date 또는 Qty와 같은 별칭을 지정할 수 있습니다.별칭은 식의 결과에 이름을 지정하는 데도 사용됩니다. 다음 예를 참조하십시오.
USE AdventureWorks
;GO
SELECT AVG(UnitPrice) AS 'Average Price'
FROM Sales.SalesOrderDetail;
column_alias는 ORDER BY 절에는 사용할 수 있지만 WHERE, GROUP BY 또는 HAVING 절에서는 사용할 수 없습니다. 쿼리 식이 DECLARE CURSOR 문의 일부인 경우 FOR UPDATE 절에서 column_alias를 사용할 수 없습니다.
주의
SELECT 문에서 절의 순서는 매우 중요합니다. 선택 사항인 절은 생략할 수 있지만 이런 절을 사용할 때는 적절한 순서로 표시해야 합니다.
사용자 정의 함수 내의 SELECT 문은 함수에서 로컬인 변수에 값을 할당하는 식이 문의 선택 목록에 포함된 경우에만 허용됩니다.
뷰에는 OPTION 절이 허용되지 않습니다.
table 변수는 범위 내에서 일반 테이블처럼 액세스할 수 있으므로 SELECT 문의 테이블 원본으로 사용할 수 있습니다.
서버 이름 부분에 OPENDATASOURCE 함수를 사용하여 네 부분으로 구성한 이름은 SELECT 문에서 테이블 이름이 표시될 수 있는 곳이면 어디든 테이블 원본으로 사용할 수 있습니다.
원격 테이블과 관련된 SELECT 문에는 몇몇 구문 제한이 적용됩니다. 자세한 내용은 분산 쿼리 사용에 대한 지침을 참조하십시오.
SELECT 목록에 포함된 text 또는 ntext 열에 대해 반환되는 데이터의 길이는 text 열의 실제 크기, 기본 TEXTSIZE 세션 설정 또는 하드 코딩된 응용 프로그램 제한 중에서 가장 작은 값으로 설정됩니다. 세션에 대해 반환되는 텍스트의 길이를 변경하려면 SET 문을 사용하십시오. 기본적으로 하나의 SELECT 문이 반환하는 텍스트 데이터의 길이 제한은 4,000바이트입니다.
다음 동작 중 하나를 시도하면 SQL Server 2005 데이터베이스 엔진은 예외 511을 발생시키고 현재 실행 중인 문을 롤백합니다.
- SELECT 문에서 8,060바이트를 넘는 결과 행이나 중간 작업 테이블 행을 생성합니다.
- DELETE, INSERT 또는 UPDATE 문에서 8,060바이트를 넘는 행에 작업을 시도합니다.
SELECT INTO 또는 CREATE VIEW 문으로 만든 열에 열 이름을 지정하지 않으면 오류가 발생합니다.
ID 열 선택
기존 ID 열을 새 테이블로 선택하여 넣을 때 다음 조건 중 만족하는 것이 없는 경우 새 열은 IDENTITY 속성을 상속합니다.
- SELECT 문이 조인, GROUP BY 절 또는 집계 함수를 포함합니다.
- UNION을 사용하여 여러 SELECT 문을 조인합니다.
- 선택 목록에서 ID 열이 두 번 이상 나열됩니다.
- ID 열이 식의 일부입니다.
위의 조건 중 만족하는 것이 있으면 열은 IDENTITY 속성을 상속하지 않고 NOT NULL로 만들어집니다. ID 열에 대한 모든 규칙과 제한은 새 테이블에도 적용됩니다.
이전 유형의 외부 조인
이전 버전의 SQL Server는 WHERE 절에서 *= and =* 연산자를 사용하는 외부 조인의 정의를 지원합니다. SQL Server 버전 7.0은 SQL-92 표준을 지원합니다. 이 버전에서는 FROM 절에 조인 연산자가 제공됩니다. 데이터베이스의 호환성 수준을 90으로 설정하면 외부 조인 연산자(*= and =*)가 지원되지 않습니다.
WHERE, GROUP BY 및 HAVING 절 처리 순서
다음 단계는 WHERE 절, GROUP BY 절 및 HAVING 절이 있는 SELECT 문의 처리 순서를 보여 줍니다.
- FROM 절이 초기 결과 집합을 반환합니다.
- WHERE 절이 검색 조건에 일치하지 않는 행을 제외합니다.
- GROUP BY 절이 GROUP BY 절의 고유한 각 값마다 선택된 행을 하나의 그룹으로 모읍니다.
- 선택 목록에 지정된 집계 함수가 각 그룹에 대한 요약 값을 계산합니다.
- HAVING 절이 검색 조건에 일치하지 않는 행을 추가로 제외합니다.
사용 권한
sysadmin 고정 서버 역할, db_owner 및 db_datareader 고정 데이터베이스 역할 및 테이블 소유권이 필요합니다. sysadmin, db_owner 및 db_securityadmin 역할의 멤버와 테이블 소유자는 다른 사용자에게 권한을 위임할 수 있습니다.
INTO 절을 사용하여 영구 테이블을 만들려면 사용자에게 대상 데이터베이스에 CREATE TABLE 권한이 있어야 합니다.
참고 항목
참조
CONTAINS(Transact-SQL)
CONTAINSTABLE(Transact-SQL)
CREATE TRIGGER(Transact-SQL)
CREATE VIEW(Transact-SQL)
DELETE(Transact-SQL)
EXECUTE(Transact-SQL)
식(Transact-SQL)
FREETEXT(Transact-SQL)
FREETEXTTABLE(Transact-SQL)
INSERT(Transact-SQL)
SET TRANSACTION ISOLATION LEVEL(Transact-SQL)
table(Transact-SQL)
UNION(Transact-SQL)
UPDATE(Transact-SQL)
EXCEPT 및 INTERSECT(Transact-SQL)
WHERE(Transact-SQL)
관련 자료
전체 텍스트 검색 쿼리
조인 기본 사항
하위 쿼리 기본 사항
변수 및 매개 변수 사용(데이터베이스 엔진)
식별자를 개체 이름으로 사용