검색 조건(Transact-SQL)
검색 조건은 논리 연산자 AND, OR 및 NOT을 사용하여 하나 이상의 조건자를 결합한 것입니다.
구문
<search_condition> ::=
{ [ NOT ] <predicate> | ( <search_condition> ) }
[ { AND | OR } [ NOT ] { <predicate> | ( <search_condition> ) } ]
[ ,...n ]
<predicate> ::=
{ expression { = | < > | ! = | > | > = | ! > | < | < = | ! < } expression
| string_expression [ NOT ] LIKE string_expression
[ ESCAPE 'escape_character' ]
| expression [ NOT ] BETWEEN expression AND expression
| expression IS [ NOT ] NULL
| CONTAINS
( { column | * } , '<contains_search_condition>' )
| FREETEXT ( { column | * } , 'freetext_string' )
| expression [ NOT ] IN ( subquery | expression [ ,...n ] )
| expression { = | < > | ! = | > | > = | ! > | < | < = | ! < }
{ ALL | SOME | ANY} ( subquery )
| EXISTS ( subquery ) }
인수
<search_condition>
SELECT 문, 쿼리 식 또는 하위 쿼리에 대해 결과 집합에 반환되는 행의 조건을 지정합니다. UPDATE 문에는 업데이트할 행을 지정합니다. DELETE 문에는 삭제할 행을 지정합니다. Transact-SQL 문의 검색 조건에 포함할 수 있는 조건자의 개수에는 제한이 없습니다.NOT
조건자에서 지정한 부울 식을 부정합니다. 자세한 내용은 NOT(Transact-SQL)을 참조하십시오.AND
두 조건이 TRUE일 때 두 조건을 결합하여 TRUE로 평가합니다. 자세한 내용은 AND(Transact-SQL)를 참조하십시오.OR
두 조건 중 하나가 TRUE일 때 두 조건을 결합하여 TRUE로 평가합니다. 자세한 내용은 OR(Transact-SQL)을 참조하십시오.< predicate >
TRUE, FALSE 또는 UNKNOWN을 반환하는 식입니다.expression
열 이름, 상수, 함수, 변수, 스칼라 하위 쿼리이거나 열 이름, 상수 및 연산자나 하위 쿼리로 연결된 함수의 결합입니다. 식에는 CASE 식도 포함될 수 있습니다.[!참고]
nchar, nvarchar 및 ntext 유니코드 문자 데이터 형식을 참조할 때는 'expression' 앞에 대문자 'N'이 접두사로 와야 합니다. 'N'을 지정하지 않으면 SQL Server에서 데이터베이스 또는 열의 기본 데이터 정렬에 해당하는 코드 페이지로 문자열을 변환합니다. 이 코드 페이지에 없는 문자는 모두 손실됩니다.
=
두 식이 같은지 여부를 검사하는 데 사용되는 연산자입니다.<>
두 식이 서로 같지 않은지 조건을 검사하는 데 사용되는 연산자입니다.!=
두 식이 서로 같지 않은지 조건을 검사하는 데 사용되는 연산자입니다.>
두 식 중 한 식이 다른 식보다 큰지 조건을 검사하는 데 사용되는 연산자입니다.>=
두 식 중 한 식이 다른 식보다 크거나 같은지 조건을 검사하는 데 사용되는 연산자입니다.!>
두 식 중 한 식이 다른 식보다 크지 않은지 조건을 검사하는 데 사용되는 연산자입니다.<
두 식 중 한 식이 다른 식보다 작은지 조건을 검사하는 데 사용되는 연산자입니다.<=
두 식 중 한 식이 다른 식보다 작거나 같은지 조건을 검사하는 데 사용되는 연산자입니다.!<
두 식 중 한 식이 다른 식보다 작지 않은지 조건을 검사하는 데 사용되는 연산자입니다.string_expression
문자열과 와일드카드 문자입니다.[NOT] LIKE
다음에 나오는 문자열이 패턴 일치로 사용됨을 나타냅니다. 자세한 내용은 LIKE(Transact-SQL)를 참조하십시오.ESCAPE 'escape_ character'
와일드카드 문자의 기능을 하지 않고 문자열에서 와일드카드 문자를 검색할 수 있도록 합니다. escape_character는 와일드카드 문자 앞에 입력되는 문자로 해당 문자가 특별한 용도로 사용됨을 나타냅니다.[ NOT ] BETWEEN
값의 포함 범위를 지정합니다. AND를 사용하여 시작 값과 끝 값을 구분합니다. 자세한 내용은 BETWEEN(Transact-SQL)을 참조하십시오.IS [NOT] NULL
사용된 키워드에 따라 Null 값 또는 Null이 아닌 값이 검색되도록 지정합니다. 피연산자에 NULL이 있는 경우에 비트 연산자 또는 산술 연산자를 사용하는 식은 NULL로 평가됩니다.CONTAINS
문자 기반 데이터가 포함된 열에서 특정 단어나 구와 정확히 일치하거나 비슷하게 일치하는(유사 항목 일치) 단어를 검색하거나 서로 근접한 단어 검색, 가중치 검색에 사용됩니다. 이 옵션은 SELECT 문에서만 사용할 수 있습니다. 자세한 내용은 CONTAINS(Transact-SQL)를 참조하십시오.FREETEXT
문자 기반 데이터가 포함된 열에서 조건자에 있는 정확한 단어 대신 의미가 일치하는 값을 검색함으로써 단순한 형태의 자연어 쿼리를 제공합니다. 이 옵션은 SELECT 문에서만 사용할 수 있습니다. 자세한 내용은 FREETEXT(Transact-SQL)를 참조하십시오.[ NOT ] IN
식이 목록에 포함되는지 또는 제외되는지 여부에 따라 식을 검색하도록 지정합니다. 검색 식은 상수 또는 열 이름이 될 수 있으며 목록은 상수 집합 또는 더 일반적으로는 하위 쿼리가 될 수 있습니다. 값의 목록은 괄호로 묶어야 합니다. 자세한 내용은 IN(Transact-SQL)을 참조하십시오.subquery
제한된 SELECT 문으로 간주할 수 있고 SELECT 문의 <query_expresssion>과 비슷합니다. ORDER BY 절 및 INTO 키워드는 허용되지 않습니다. 자세한 내용은 SELECT(Transact-SQL)를 참조하십시오.ALL
비교 연산자 및 하위 쿼리와 함께 사용됩니다. 하위 쿼리에 대해 검색된 모든 값이 비교 연산을 만족시키면 <predicate>에 대해 TRUE를 반환하고 일부 값이 비교 연산을 만족시키지 않거나 하위 쿼리에서 외부 문에 반환하는 행이 없으면 FALSE를 반환합니다. 자세한 내용은 ALL(Transact-SQL)을 참조하십시오.{ SOME | ANY }
비교 연산자 및 하위 쿼리와 함께 사용됩니다. 하위 쿼리에 대해 검색된 값 중 비교 연산을 만족시키는 값이 있으면 <predicate>에 대해 TRUE를 반환하고 하위 쿼리의 어떠한 값도 비교 연산을 만족시키지 않거나 하위 쿼리에서 외부 문에 반환하는 행이 없으면 FALSE를 반환합니다. 그렇지 않을 경우에 식은 UNKNOWN입니다. 자세한 내용은 SOME | ANY(Transact-SQL)를 참조하십시오.EXISTS
하위 쿼리와 함께 사용되어 하위 쿼리에서 반환한 행의 존재 여부를 검사합니다. 자세한 내용은 EXISTS(Transact-SQL)를 참조하십시오.
주의
논리 연산자의 우선 순위는 NOT(가장 높음), AND, OR 순입니다. 검색 조건에 괄호를 사용하면 이 순서를 무시할 수 있습니다. 논리 연산자의 계산 순서는 쿼리 최적화 프로그램에서 선택한 내용에 따라 달라질 수 있습니다. 논리 연산자가 논리 값을 계산하는 방법에 대한 자세한 내용은 AND(Transact-SQL), OR(Transact-SQL) 및 NOT(Transact-SQL)을 참조하십시오.
예
1.WHERE 절에 LIKE 및 ESCAPE 구문 사용
다음 예에서는 LargePhotoFileName 열에 green_ 문자가 있는 행을 검색하며 _이 와일드카드 문자이므로 ESCAPE 옵션을 사용합니다. ESCAPE 옵션을 지정하지 않으면 이 쿼리는 green 다음에 _ 문자가 아닌 다른 한 문자가 나오는 설명 값을 검색합니다.
USE AdventureWorks2012 ;
GO
SELECT *
FROM Production.ProductPhoto
WHERE LargePhotoFileName LIKE '%greena_%' ESCAPE 'a' ;
2.WHERE 및 LIKE 구문에 유니코드 데이터 사용
다음 예에서는 WHERE 절을 사용하여 미국(US) 이외의 국가에서 Pa으로 시작하는 시에 있는 모든 기업의 우편 주소를 검색합니다.
USE AdventureWorks2012 ;
GO
SELECT AddressLine1, AddressLine2, City, PostalCode, CountryRegionCode
FROM Person.Address AS a
JOIN Person.StateProvince AS s ON a.StateProvinceID = s.StateProvinceID
WHERE CountryRegionCode NOT IN ('US')
AND City LIKE N'Pa%' ;