DB/[SQL 입문]
03-2 WHERE문으로 조건에 맞는 데이터 검색하기
Itchild
2024. 4. 11. 12:55
728x90
반응형
시스템의 부하를 줄이려면 필요한 데이터만 검색해야 한다. 실무에서 사용하는 데이터 베이스에는 엄청난 양의 데이터가 저장되므로 매번 전체 행을 가져오면 안 될 것이다. 원하는 조건에 맞는 행을 검색하는 방법을 알아보자
- WHERE문의 기본형식
SELECT [열] FROM [테이블] WHERE [열] = [조건값]
1 2 3
- [열] : 조건을 적용할 열을 입력한다.
- = : 조건을 적용할 연산자 종류를 입력한다.
- [조건값] : 사용자 조건값을 입력한다.
SQL 연산자 종류
|
연산자
|
설명
|
|
|
<
|
필터링 조건보다 작은 값을 검색한다.
|
|
|
<=
|
필터링 조건보다 같거나 작은값을 검색한다.
|
|
|
=
|
필터링 조건과 같은 값을 검색한다.
|
|
|
>
|
필터링 조건보다 큰 값을 검색한다.
|
|
|
>=
|
필터링 조건보다 같거나 큰 값을 검색한다.
|
|
|
<>, !=
|
필터링 조건과 같지 않은 값을 검색한다.
|
|
|
!<
|
필터링 조건보다 작지 않은 값을 검색한다.
|
|
|
!>
|
필터링 조건보다 크지 않은 값을 검색한다.
|
|
- 예시
숫자형 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 = '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
|
|
2010~2011 범위에 해당하는 값을 검색
SELECT * FROM nasdaq_company WHERE ipo_year BETWEEN 2010 AND 2011
2013년 3월 17일 ~ 2013년 3월 19 일을 포함한 날짜 검색
SELECT * FROM nasdaq_company WHERE last_crawel_date BETWEEN '2021-03-17' AND '2021-03-19'
날짜형에 정확한 값을 사용해서 검색
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' AND 'B'
Symbol 열의 A~B 범위값을 제외하고 검색
SELECT * FROM nasdaq_company WHERE Symbol NOT BETWEEN 'A' AND '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' 또는 'XXXX' 인 데이터 검색
SELECT * FROM nasdaq_company
WHERE symbol = 'MSFT' OR symbol = 'XXXX'
OR를 2개 이상 사용한 데이터 검색
SELECT * FROM nasdaq_company
WHERE symbol = 'MSFT' OR symbol = 'AND' OR symbol = 'AMZN'
IN을 사용해 OR 반복 사용을 대체한 데이터 검색
SELECT * FROM nasdaq_company
WHERE symbol IN ('MSFT', 'AMD', 'AMZN')
---> OR을 반복해 쓰는 것이 아니라 IN 을 써주면 된다 .
AND, OR, IN 을 조합한 데이터를 검색
요구사항 : sector 가 'Technology'또는 'Consumer Services' 이면서 symbol이 'MSFT','AMD','AMZN'인
데이터를 검색한다.
SELECT * FROM nasdaq_company
WHERE sector = 'Technology' OR sector = 'Consumer Services'
AND symbol IN ('MSFT', 'AMD', 'AMZN')
---> 쿼리 풀이 순서는 다음과 같다
풀이 순서 1
SELECT * FROM nasdaq_company
WHERE sector = 'Technology'
풀이 순서 2
SELECT * FROM nasdaq_company
WHERE sector = 'Consumer Services'
AND symbol IN ('MSFT', 'AMD', 'AMZN')
소괄호를 이용해 우선순위를 지정해 검색해줄 수도 있다
SELECT * FROM nasdaq_company
WHERE (sector = 'Technology' OR sector = 'Consumer Services')
AND symbol IN ('MSFT', 'AMD', 'AMZN')
IN과 AND 를 결합해 검색
SELECT * FROM nasdaq_company
WHERE sector IN ('Technology', 'Consumer Services')
AND symbol IN ('MSFT', 'AMD', 'AMZN')
NULL은 데이터가 없는 상태를 말한다. 더 풀어 설명하자면 공백 문자가 아니라 아예 정의 되지 않은 값을 말한다.
sector 데이터가 NULL인 데이터 검색
SELECT * FROM nasdaq_company
WHERE sector IS NULL
sector 데이터가 NULL이 아닌 데이터 검색
SELECT * FROM nasdaq_company
WHERE sector IS NOT NULL
728x90
반응형