시스템의 부하를 줄이려면 필요한 데이터만 검색해야 한다. SELECT 문으로 필요한 열만 검색하는 방법은 알아냈지만, 행 전체가 다 검색되므로 아직 필요한 데이터만 검색했다고 볼 수 없다. WHERE 문을 이용해 원하는 조건에 맞는 행을 검색하는 방법을 알아보자. 다음은 WHERE 문의 기본 형식이다.
SELECT [열] FROM [테이블] WHERE [열] = [조건값]
비교 연산자 사용하기
-- 숫자형 비교연산자
SELECT * FROM userTBL WHERE ipo_year = 2024
SELECT * FROM userTBL WHERE ipo_year < 2024
SELECT * FROM userTBL WHERE ipo_year >= 2024
-- 문자열형 비교연산자
SELECT * FROM userTBL WHERE symbol = '문자열'
SELECT * FROM userTBL WHERE symbol < '문자열'
SELECT * FROM userTBL WHERE symbol >= '문자열'
-- 날짜형 비교연산자
SELECT * FROM userTBL WHERE last_crawel_date = '2024-01-01'
SELECT * FROM userTBL WHERE last_crawel_date < '2024-01-01'
SELECT * FROM userTBL WHERE last_crawel_date >= '2024-01-01'
비교 연산자 종류
| 연산자 | 설명 |
| < | 필터링 조건보다 작은 값 |
| <= | 필터링 조건보다 같거나 작은 값 |
| = | 필터링 조건과 같은 값 |
| > | 필터링 조건보다 큰 값 |
| >= | 필터링 조건보다 같거나 큰 값 |
| <>, != | 필터링 조건과 같지 않은 값 |
| !< | 필터링 조건보다 작지 않은 값 |
| !> | 필터링 조건보다 크지 않은 값 |
논리 연산자 사용하기
논리 연산자 종류
| 연산자 | 설명 |
| ALL | 모든 비교 집합이 참이면 참 |
| AND | 두 부울 표현식이 참이면 참 |
| ANY | 비교 집합 중 하나라도 참이면 참 |
| BETWEEN | 피연산자가 범위 내에 있으면 참 |
| EXISTS | 하위 쿼리에 행이 포함되면 참 |
| IN | 피연산자가 리스트 중 하나라도 포함되면 참 |
| LIKE | 피연산자가 패턴과 일치하면 참 |
| NOT | 부울 연산자를 반대로 실행(보수) |
| OR | 하나의 부울식이 참이면 참 |
| SOME | 비교 집합 중 일부가 참이면 참 |
AND/OR
-- sector가 'Finance'이면서 industry가 'Major Banks'인 데이터 검색
SELECT * FROM userTBL WHERE sector = 'Finance' AND industry = 'Major Banks'
-- 2013년3월17일~2013년3월19일을 포함한 날짜 검색
SELECT * FROM userTBL
WHERE last_crawel_date >= '2021-03-17'
AND last_crawel_date <= '2021-03-19'
-- Symbol이 'A' 또는 'B'인 데이터 검색
SELECT * FROM userTBL WHERE symbol = 'A' OR symbol = 'B'
IN/LIKE
-- IN을 사용해 OR 반복 사용을 대체한 데이터 검색
SELECT * FROM userTBL WHERE symbol IN ('A', 'B', 'C')
-- LIKE를 사용해 김으로 시작하는 문자열의 내용을 검색
SELECT * FROM userTBL WHERE name LIKE '김%';
-- 한글자와 매치하기 위해서 '_'를 사용
SELECT * FROM userTBL WHERE name LIKE '_종신';
BETWEEN
-- 2010~2011 범위에 해당하는 값을 검색
SELECT * FROM userTBL WHERE ipo_year BETWEEN 2010 AND 2011
-- 2013년3월17일~2013년3월19일을 포함한 날짜 검색
SELECT * FROM userTBL WHERE last_crawel_date BETWEEN '2013-03-17' AND '2013-03-19'
-- 날짜형에 정확한 값을 사용해서 검색
SELECT * FROM userTBL WHERE last_crawel_date = '2013-03-17 00:00:00.000'
-- Symbol 열의 A~B 범윗값을 검색
SELECT * FROM userTBL WHERE symbol BETWEEN 'A' AND 'B'
-- Symbol 열의 A~B 범윗값을 제외하고 검색
SELECT * FROM userTBL WHERE symbol NOT BETWEEN 'A' AND 'B'
ANY/ALL/SOME/서브쿼리(하위쿼리)
ANY는 서브쿼리의 여러 개의 결과 중 하나만 만족해도 되며, ALL은 서브쿼리의 여러 개의 결과를 모두 만족시켜야 한다. 참고로 SOME과 ANY는 동일한 의미로 사용.
-- 김경호보다 키가 크거나 같은 사람의 이름과 키를 출력
SELECT name, height FROM userTBL
WHERE height >= [ANY] (SELECT height FROM userTBL WHERE name = '김경호')
-- 지역이 '경남'인 사람보다 키가 크거나 같은 사람의 이름과 키를 출력
SELECT name, height FROM userTBL
WHERE height >= [ANY] (SELECT height FROM userTBL WHERE region = '경남')
SELECT name, height FROM userTBL
WHERE height IN (SELECT height FROM userTBL WHERE region = '경남')
-- '100', '200', '300' 중 하나라도 일치하는 id의 모든 행을 출력
SELECT * FROM userTBL
WHERE id = ANY ('100', '200', '300')
-- '100', '200', '300' 중 모두를 가지는 id의 모든 행을 출력
SELECT * FROM userTBL
WHERE id = ALL ('100', '200', '300')
NULL이 들어있는 데이터 확인
-- sector가 NULL인 데이터 검색
SELECT * FROM userTBL WHERE sector IS NULL
-- NULL이 아닌 데이터 검색
SELECT * FROM userTBL WHERE sector IS NOT NULL'Database > MySQL' 카테고리의 다른 글
| [MySQL] 테이블 생성과 데이터 조작 (0) | 2024.09.10 |
|---|---|
| [MySQL] 데이터 그룹화 (0) | 2024.09.09 |
| [MySQL] 와일드카드 (3) | 2024.09.09 |
| [MySQL] ORDER BY 문 (0) | 2024.09.09 |
| [MySQL] SELECT 문 (0) | 2024.09.09 |