본문 바로가기

IT Story/SQL Story

SQL 시작하기: WHERE 문

4. SQL 시작하기

4.1 WHERE 문의 기본 형식
SELECT [열] FROM [테이블] WHERE [열] = [조건값]  

* 연산자: <, <=, =, >, >=, <>, != (조건과 같지 않은 값)

select * from nasdaq_company where ipo_year <2021

해석: nasdaq_company 테이블에 있는 모든 컬럼을 불러오는데, 그 중에서 ipo_year가 2021년 이하인 것만 불러오겠다

select * from nasdaq_company where ipo_year BETWEEN 2010 AND 2021
해석: nasdaq_company 테이블에 있는 모든 컬럼을 불러오는데, 그 중에서 ipo_year가 2010년과 2021년 사이에 있는 것만 불러오겠다

 

select * from nasdaq_company where symbol between 'A' and 'B

해석: nasdaq_company 테이블에 있는 모든 컬럼을 불러오는데, 그 중에서 symbol이 A나 B를 포함하는 값만 불러오겠다

 

select * from nasdaq_company where symbol not between 'A' and 'B'

해석: nasdaq_company 테이블에 있는 모든 컬럼을 불러오는데, 그 중에서 symbol이 A나 B를 제외한 값만 불러오겠다

 

select  *  from nasdaq_company where symbol = 'AAPL' or symbol = 'MSFT' or symbol = 'TSLA'
해석: nasdaq_company 테이블에 있는 모든 컬럼을 불러오는데, 그 중에서 symbol이  'AAPL', 'MSFT' , 'TSLA' 중 어느 하나를 포함하면 다 불러오겠다

 

select  *  from nasdaq_company where symbol  in ('AAPL', 'MSFT', 'TSLA')

 in(col1, col1, col3,...)는 여러 컬럼들에 대한 or 연산과 같은 역할을 한다. 

 

4.2  와일드 카드로 문자 검색
select [열] from [테이블] where [열] like [조건값]

'%A%'           --A를 포함한 글자 다 찾기
select * from nasdaq_company where symbol like '%A%' 
'A%'               --A로 시작하는 글자 다 찾기
select * from nasdaq_company where symbol like 'A%'  
'%A'               --A로 끝는 글자 다 찾기
select * from nasdaq_company where symbol like '%A' 
not like 'A%'  --A로 시작하지 않는글자 다 찾기
select * from nasdaq_company where symbol not like 'A%' 
 'AA%'          --AA로 시작하는 글자 다 찾기
select * from nasdaq_company where symbol like 'AA%'
 'A_'              --A로 시작하면서 어떤 글자든 (_) 1자리 글자가 오고 전체가 2글자인 것 다 찾기
select * from nasdaq_company where symbol like 'A_'
 '_A'              --A로 끝나서 어떤 글자든 (_) 1자리 글자가 앞오고 전체가 2글자인 것 다 찾기
select * from nasdaq_company where symbol like '_A'
'_A_'            --세글자 중 가운데 A인 것 다 찾기
select * from nasdaq_company where symbol like '_A_'
'A_C%'        --A로 시작하며 세번째는 글자가 C인 것 다 찾기
select * from nasdaq_company where symbol like 'A_C%'
'A__C'         --A로 시작하며 C로 끝나는 4글자 다 찾기
select * from nasdaq_company where symbol like 'A__C'
'AA[c,p]%'    --AA로 시작하면서 c 또는 p 글자 다 찾기
select * from nasdaq_company where symbol like 'AA[c,p]%'  
'AA[^L]%'     --AA로 시작하면서 L을 포함하지 않는 글자 다 찾기
select * from nasdaq_company where symbol like 'AA[^L]%'
like 'A%L_'  --A로 시작하면서 어떤 글자도 상관없고 마지막은 L과 어떤 한 글자 찾기
select * from nasdaq_company where symbol like 'A%L_'  

[ ]로 문자나 문자 범위를 지정해 문자열 검색하기

[A,B,C]% 또는 [A-C]%

select * from nasdaq_company where symbol like 'A[A-C]'

해석: 첫글자가 A로 시작하면서 다음 글자가 A 또는 B 또는 C로 시작하는 모든 문자열 검색

%[A,B,C] 또는 %[A-C]

select * from nasdaq_company where symbol like '%[A-C]'

해석: 마지막 글자가 A 또는 B 또는 C로 끝나는 모든 문자열 검색
select * from nasdaq_company where symbol like 'A[A-C, G, M-R]'

해석: 첫글자는 A이고 두 번째는 A,B,C 중 하나이며, 세 번째는 G이고, 마지막 네 번째는 M,N,O,P,Q,R 중 하나인 문자열 검색

문자나 문자범위를 제외한 문자열 검색하기
not가 아닌 ^를 사용
 select * from nasdaq_company where symbol like 'A[^A, ^B, ^C]'

해석: 첫글자는 A이고 두번째는 A, B, C를 제외한 모든 두 글자 문자열 검색 

select * from nasdaq_company where symbol like 'A[^A-C]'

해석: 위와 같음

 

 다양한 방법 응용
A로 시작하고 두번째는 C나 P를 포함하며 세번째는T를 제외하고 마지막에 W로 끝나는 문자열 검색
 select * from nasdaq_company where symbol like 'A[C,P][^T]%W'

A로 시작하고 두번째는 A,B,C 중 하나이며, 세 번째는 아무글자, 네 번째는 O를 포함하는 모든 문자열 검색

 select * from nasdaq_company where symbol like 'A[A-C]_O%'

 

null이 들어 있는 데이터 확인
select * from nasdaq_company where sector is null 
null이 없는 데이터 확인
select * from nasdaq_company where sector is not nul

 

 %가 들어있는 문자열을 찾고 싶을 떄 ESCAPE '#', '!', '&'
WITH CTE(col_1) AS(
SELECT 'A%BC' UNION ALL
SELECT 'A_BC' UNION ALL
SELECT 'ABC'
)
SELECT * FROM CTE WHERE col_1 LIKE '%#%%' ESCAPE '#'

 

참고: 테이블의 열 목록을 확인하는 쿼리
EXEC sp_columns @table_name =N'nasdaq_company', @table_owner = N'dbo'

퀴즈1. nasdaq_company 테이블에서 sector, industry 열만 검색하시오
select sector, industry from nasdaq_company

 

퀴즈2. nasdaq_company 테이블에서 symbol, close_price 열만 검색하시오
select symbol, close_price from nasdaq_company

 

요구사항: sector가 "Technology' 또는 'Customer Services'이면서 symbol이 'MSFT', 'AMD', 'AMZN' 검색
select * from nasdaq_company where (sector ='Technology' or sector = 'Consumer Services')
AND symbol in ('MSFT', 'AMD', 'AMZN')
=
select * from nasdaq_company where sector IN('Technology', 'Consumer Services')
AND symbol in ('MSFT', 'AMD', 'AMZN')

퀴즈3. nasdaq_company 테이블에서 ipo_year가 2021년이면서, sector가 FInance이면서

symbol이 AGAC, TIRX, VLATW인 목록을 출력하세요.
select * from nasdaq_company where ipo_year = 2021 and sector = 'Finance' 
and symbol in('AGAC', 'TIRX', 'VLATW')

 

 

'IT Story > SQL Story' 카테고리의 다른 글

조인(Join): 내부 조인  (0) 2022.11.28
SQL 시작하기: CREATE 문  (0) 2022.11.24
SQL 시작하기: GROUP BY 문과 HAVING 문  (0) 2022.11.24
SQL 시작하기: ORDER BY 문  (0) 2022.11.24
SQL  (0) 2022.11.24