일반적으로 테이블에는 많은 행이 있고, DB를 운영할수록 행 수는 점점 늘어난다.
그런데 보통 Select 문으로 이를 조회할때 모든 것은 조회하지는 않는다.
일반적으로 행을 제약, 원하는 일부분의 행들만 출력하게 되며 이 때 사용하는것이 제약 조건이다.
1. 비교 연산자
비교 연산자는 열의 값이 특정 갑과 일치하는지, 크거나 작은지 비교하는데 쓰인다.
비교 연산자가 포함된 연산식은 TRUE나, FALSE를 돌려준다.
연산자 |
설명 |
A = B |
A와 B가 같음 |
A > B |
A가 B보다 큼 |
A < B |
A가 B보다 작음 |
A >= B |
A가 B보다 크거나 같음 |
A <= B |
A가 B보다 작거나 같음 |
A <> B |
A와 B가 같지 않음(=서로 다름) |
Use AdventureWorksLT
Select CustomerID, FirstName, MiddleName, LastName
From SalesLT.Customer
Where FirstName='James'
Use AdventureWorksLT
Select ProductID, Name, ProductNumber, ListPrice
From SalesLT.Product
Where ListPrice <= 4.99;
2. 논리 연산자
논리 연산자는 연산식들을 논리적으로 결합하는 데 쓰인다. 비교 연산자가 포함된 연산식은 True / False를 돌려준다.
비교 연산자(논리 연산자만의 비교 연산자)는 NOT -> AND -> OR 순의 우선순위가 있다.
논리 연산자들을 단순이 결합하면 이 우선순위에 따라 결과가 출력되며, 우선순위를 바꾸려면 ()를 사용 한다.
연산자 |
설명 |
NOT A |
연산식 A가 Flase이면 True를 돌려준다(=부정) 연산식 A가 True이면 False를 돌려준다 |
A AND B |
연삭신 A와 B 둘다 만족하면 True를 돌려준다 |
A OR B |
연삭식 A와 B 중 하나만 만족하면 True를 돌려준다 |
아래 SQL문에서 결합 순서는 NOT -> AND -> OR 이다.
NOT 연산자 때문에 'ProductCategoryID=8' 행이 제외되었고,
OR 연산자 때문에 'Name = Bikes' 행이 추가되었다.
Use AdventureWorksLT
Select ProductCategoryID, ParentProductCategoryID, Name
From SalesLT.ProductCategory
Where NOT ProductCategoryID = 8
AND ParentProductCategoryID = 2
OR Name = 'Bikes'
/* ProductCategoryID = 8 이 아니고 2인 것, 혹은 이름이 Bikes 인것만 출력 */
아래 SQL문에서 결합 순서는 OR -> AND -> NOT 이다.
Use AdventureWorksLT
Select ProductCategoryID, ParentProductCategoryID, Name
From SalesLT.ProductCategory
Where NOT (
ProductCategoryID = 8
AND (
ParentProductCategoryID = 2
OR Name = 'Bikes'
)
)
/* ParentProductCategoryId = 2이거나, 이름이 Bikes 인것 중에서 ProductCategoryId = 8 이 아닌것만 출력 */
3. 문자열 패턴 매칭(Like 연산자)
Like 연산자는 문자열 패턴 매칭을 해주는 연산자로, 소량의 문자열 검색에 많이 사용된다.
Like 연산자의 사용 구문은 다음과 같다.
match_expression [NOT] LIKE pattern [ESCAPE <escape character>] |
match_expression에는 주로 열 / 변수 이름이 오고, pattern에는 아래 펴와 같은 와일드카드 문자가 포함된 문자열 상수가 온다.
와일드카드 문자 |
설명 |
예제 |
% |
문자가 0개 이상인 문자열 |
Where title LIKE '%computer%' title열 중, 어디든지 computer가 포함된 행을 찾음
Where title Like '%puter' title열 중, 특정 단어가 puter로 끝나는것을 찾음 |
_ (밑줄임) |
단일 문자 |
Where au_fname LIKE '_ean' au_fname열이 'ean'으로 끝나고 4문자로 구성되는 모든 행을 찾음 * Aean, Sean 등 |
[] |
지정된 범위 또는 집합에 있는 단일 문자 |
Where au_lname LIKE '[C-P]arsen' au_lname 열이 'arsen'으로 끝나고 C와 P 사이의 단일 문자로 시작되는 모든 행을 찾음 * Carsen, Karsen 등 |
[^] |
지정된 범위 또는 집합에 없는 단일 문자 |
Where au_lname LIKE 'de[^a]%' au_lname 열이 'de'로 시작하고 그 다음에 오는 문자가 'a'가 아닌 모든 행을 찾음 |
원래 DB에는 대소문자 구별이 있으나, 한글로 설치한 SQL Server의 경우 기본 언어값이 Korean으로 되어있어 대소문자 구별을하지 않는다.
Use AdventureWorksLT
Select CustomerID, LastName
From SalesLT.Customer
Where LastName LIKE '%[CKR]a%'
/* LastName이 Ca,Ka,Ra 중 하나라도 포함할 경우 출력 */
4. 범위 검색 ( BETWEEN 연산자 )
BETWEEN 연산자는 최소값과 최대값 사이의 범위에 들어가는지 여부를 파악할 대 쓰임
이 때, 최소값 & 최대값 또한 범위에 포함됨 (이상,이하 개념)
range_expression [ NOT ] BETWEEN 최소값 AND 최대값 |
range_expression에는 주로 열 또는 변수 이름이 온다.
* range_expression에는 주로 숫자 데이터 형을 많이 사용함
* 그러나 문자,날짜 및 시간 데이터 형도 오는데, 시간 데이터의 경우 자정을 기점으로 최소값과 최대값 날짜의 포함 여부를 결정함
숫자형 데이터 예제
Use AdventureWorksLT
Select ProductID, Name, ListPrice
From SalesLT.Product
Where ListPrice BETWEEN 2.29 AND 4.99;
문자형 데이터 예제
Use AdventureWorksLT
Select ProductID, Name, ProductNumber
From SalesLT.Product
Where ProductNumber BETWEEN 'BB-7421' AND 'BK-M18B-40' //문자의 경우 범위들을 작은 따옴표를 싸줘야함
날짜,시각형 데이터 예제
Use AdventureWorks
Select PurchaseOrderDetailID, DueDate
From Purchasing.PurchaseOrderDetail
WHERE DueDate BETWEEN '5/31/2001' AND '6/14/2001' //날짜 및 시각의 경우도 범위를 작은 따옴표를 싸야함
//순서는 월-일-년 순임
5. 목록 검색 ( IN 연산자 )
IN연산자는 목록 안의 값 중 하나와 일치하는지 여부를 파악하는데 사용된다.
list_expression [ NOT ] IN ( value list | subquery ) |
list_expression은 주로 열 또는 변수 이름이 옴
value_list는 보통 쉼표로 구분되는 상수 값들이 옴 ( IN (1,2,4,5, 등) )
value_list 대신에 하위 질의(subquery)가 올수도 있음
Use AdventureWorksLT
Select PostalCode, StateProvince, City
From SalesLT.Address
Where StateProvince IN ('Idaho', 'New Mexico', 'South Dakota')
<-- 위의 쿼리, 아래의 쿼리 모두 같은 결과를 보여주나, IN 연산자를 사용한 위의 쿼리문이 훨씬 깔끔하고 간략함 -->
Use AdventureWorksLT
Select PostalCode, StateProvince, City
From SalesLT.Address
Where StateProvince = 'Idaho'
OR StateProvince = 'New Mexico'
OR StateProvince = 'South Dakota'
'전공 > DB, 데이터베이스 SQL' 카테고리의 다른 글
DBMS / DB설치법 PPT (1) | 2012.10.15 |
---|