DB/[SQL 입문]

03-2 WHERE문으로 조건에 맞는 데이터 검색하기

Itchild 2024. 4. 11. 12:55
728x90
반응형

 

시스템의 부하를 줄이려면 필요한 데이터만 검색해야 한다. 실무에서 사용하는 데이터 베이스에는 엄청난 양의 데이터가 저장되므로 매번 전체 행을 가져오면 안 될 것이다. 원하는 조건에 맞는 행을 검색하는 방법을 알아보자

 

  • WHERE문의 기본형식
SELECT [열] FROM [테이블] WHERE [열] = [조건값]
                                1   2   3
 
  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
반응형