728x90
03 - 2 WHERE 문으로 조건에 맞는 데이터 검색하기
시스템의 부하를 줄이려면 필요한 데이터만 검색해야 합니다. 실무에서 사용하는 데이터베이스에는 엄청난 양의 데이터가 저장되므로 매번 전체 행을 가져오면 안 될 것입니다. 그러므로 원하는 조건에 맞는 행을 검색해야 합니다.
-- WHERE 문의 기본 형식
SELECT [열] FROM [테이블] WHERE [열] = [조건값]
-- 1 2 3
- [열] : 조건을 적용할 열을 입력한다.
- = : 조건을 적용할 연산자 종류를 입력한다.
- [조건값] : 사용자 조건값을 입력한다.
WHERE 문으로 특정 값 검색하기
연산자 | 설명 |
< | 필터링 조건보다 작은 값을 검색한다. |
<= | 필터링 조건보다 같거나 작은 값을 검색한다. |
= | 필터링 조건과 같은 값을 검색한다. |
> | 필터링 조건보다 큰 값을 검색한다. |
>= | 필터링 조건보다 같거나 큰 값을 검색한다. |
<>, != | 필터링 조건과 같지 않은 값을 검색한다. |
!< | 필터링 조건보다 작지 않은 값을 검색한다. |
!> | 필터링 조건보다 크지 않은 값을 검색한다. |
SQL Server가 제공하는 연산자 종류
WHERE 문에서 = 연산자로 특정 값 검색
-- symbol 열의 값이 'MSFT'인 데이터 검색하기
SELECT * FROM nasdaq_company WHERE symbol = 'MSFT'
WHERE 문에서 비교 연산자 사용하기
-- 숫자형 ipo_year가 2021년인 행을 검색
SELECT * FROM nasdaq_company
WHERE ipo_year = 2021
-- 숫자형 ipo_year가 2021년 미만인 행을 검색
SELECT * FROM nasdaq_company
WHERE ipo_year < 2021
-- 문자열형 symbol이 MSFT인 행을 검색
SELECT * FROM nasdaq_company
WHERE symbol = 'MSFT'
-- 문자열형 symbol이 MSFT 미만인 행을 검색
SELECT * FROM nasdaq_company
WHERE symbol < 'MSFT'
-- 날짜형 last_crawel_date가 2021년 10월 14일인 행을 검색
SELECT * FROM nasdaq_company
WHERE last_crawel_date = '2021-10-14'
-- 날짜형 last_crawel_date가 2021년 10월 14일 미만인 행을 검색
SELECT * FROM nasdaq_company
WHERE last_crawel_date < '2021-10-14'
WHERE 문에서 논리 연산자 사용하기
연산자 | 설명 |
ALL | 모든 비교 집합이 TRUE(참)이면 TRUE |
AND | 두 부울 표현식이 모두 TRUE이면 TRUE |
ANY | 비교 집합 중 하나라도 TRUE이면 TRUE |
BETWEEN | 피연산자가 범위 내에 있으면 TRUE |
EXISTS | 하위 쿼리에 행이 포함되면 TRUE |
IN | 피연산자가 리스트 중 하나라도 포함되면 TRUE |
LIKE | 피연산자가 패턴과 일치하면 TRUE |
NOT | 부울 연산자를 반대로 실행 |
OR | 하나의 부울식이 TRUE이면 TRUE |
SOME | 비교 집합 중 일부가 TRUE이면 TRUE |
논리 연산자의 종류
-- ipo_year가 2010~2011 범위에 해당하는 값을 검색
SELECT * FROM nasdaq_company
WHERE ipo_year BETWEEN 2010 AND 2011
-- last_crawel_date가 2013년 3월 17일~2013년 3월 19일을 포함한 날짜 검색
SELECT * FROM nasdaq_company
WHERE last_crawel_date BETWEEN '2021-03-17' AND '2021-03-19'
-- last_crawel_date에 정확한 값을 사용해서 검색
SELECT * FROM nasdaq_company
WHERE last_crawel_date = '2021-03-17 00:00:00.000'
-- symbol 열의 A~B 범윗값을 검색
SELECT * FROM nasdaq_company
WHERE symbol BETWEEN 'A' AMD 'B'
-- symbol 열의 A~B 범윗값을 제외하고 검색
SELECT * FROM nasdaq_company
WHERE symbol NOT BETWEEN 'A' AMD 'B'
-- sector가 'Finance'이면서 industry가 'Major Banks'인 데이터를 검색
SELECT * FROM nasdaq_company
WHERE sector = 'Finance' AND industry = 'Major Banks'
-- 2013년 3월 17일~2013년 3월 19일을 포함한 날짜 검색
SELECT * FROM nasdaq_company
WHERE last_crawel_date >= '2021-03-17' AND last_crawel_date <= '2021-03-19'
-- symbol이 'MSFT' 또는 'AMD' 또는 'AMZN' 인 데이터 검색
SELECT * FROM nasdaq_company
WHERE symbol = 'MSFT' OR symbol = 'AND' OR symbol = 'AMZN'
-- OR 반복 사용을 대체한 IN 데이터 검색
SELECT * FROM nasdaq_company
WHERE symbol IN ('MSFT', 'AMD', 'AMZN')
-- sector가 'Technology' 또는 'Consumer Services'이면서 symbol이 'MSFT', 'AMD', 'AMZN' 인 데이터 검색
-- 1
SELECT * FROM nasdaq_company
WHERE (sector = 'Technology' OR sector = 'Consumer Services')
AND symbol IN ('MSFT', 'AMD', 'AMZN')
-- 2
SELECT * FROM nasdaq_company
WHERE sector IN ('Technology', 'Consumer Services')
AND symbol IN ('MSFT', 'AMD', 'AMZN')
-- sector 데이터가 NULL인 데이터 검색
SELECT * FROM nasdaq_company
WHERE sector IS NULL
-- sector 데이터가 NULL이 아닌 데이터 검색
SELECT * FROM nasdaq_company
WHERE sector IS NOT NULL
실전 SQL
퀴즈 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')
728x90