충분히 쌓여가는
04 WHERE 문에서 논리 연산자 사용 본문
논리 연산자는 조건의 참, 거짓을 판단하며, 더 복잡한 조건문이 필요한 경우 비교 연산자와 조합해 많이 사용한다.
논리 연산자의 종류
BETWEEN을 이용한 데이터 검색
BETWEEN은 WHERE 문과 함께 사용하며 검색하는 값의 범위를 지정할 수 있다.
날짜형 데이터에 보통 사용하지만 문자열형이나 숫자형 데이터에도 사용할 수 있다.
ipo_year 열의 2010~2011 범위에 해당하는 값을 검색
SELECT * FROM nasdaq_company
WHERE ipo_year BETWEEN 2010 AND 2011;
last_crawel_date 열에서 2021년 3월 17일부터 2021년 3월 19일까지의 데이터 검색
SELECT * FROM nasdaq_company
WHERE last_crawel_date BETWEEN '2021-03-17' AND '2021-03-19';
날짜형 데이터를 검색할 때는 밀리초를 고려해야한다.
2021-03-17을 조건값으로 사용하면 2021-03-17 00:00:00.000이 조건문에 사용된다.
날짜형에 정확한 값을 사용하여 검색
SELECT * FROM nasdaq_company
WHERE last_crawel_date = '2021-03-17 00:00:00.000';
BETWEEN을 사용하여 symbol 열에서 A와 B를 포함한 값을 검색
SELECT * FROM nasdaq_company
WHERE symbol BETWEEN 'A' AND 'B';
BETWEEN을 사용하되 범위를 포함하지 않은 데이터 검색
SELECT * FROM nasdaq_company
WHERE symbol NOT BETWEEN 'A' AND 'B';
AND와 OR를 이용한 데이터 검색
실제로 데이터를 검색할 때 매우 다양한 조건을 적용해야 하는 경우가 많은데
논리 연산자인 AND와 OR를 사용해 여러 조건을 결합한다.
AND: 입력한 2개의 조건이 모두 만족하는 데이터만 검색
OR: 입력한 두 조건 중 하나라도 만족하는 데이터를 모두 검색
sector가 'Finance'이면서 industry가 'Major Banks'인 데이터를 검색
SELECT * FROM nasdaq_company
WHERE sector = 'Finance' AND industry = 'Major Banks';
symbol이 'MSFT' 또는 'XXXX'인 데이터를 검색
SELECT * FROM nasdaq_company
WHERE symbol = 'MSFT' OR symbol = 'XXXX';
만약 여러 데이터를 검색하고 OR을 여러 번 사용하면 계속해서 같은 연산자를 반복 작성해야 하므로 비효율적이다.
OR을 2개 이상 사용한 데이터 검색
SELECT * FROM nasdaq_company
WHERE symbol = 'MSFT' OR symbol = 'AMD' OR symbol = 'AMZN';
이런 경우 OR을 반복해 쓰는 것이 아니라 IN을 사용하면 된다.
IN은 OR과 같은 역할을 하지만 쉼표를 사용한다는 점에서 사용 방법만 다르다
IN을 사용해 OR 반복 사용을 대체한 데이터 검색
SELECT * FROM nasdaq_company
WHERE symbol IN('MSFT', 'AMD', 'AMZN');
AND, OR. IN을 조합해 데이터 검색
요구사항: sector이 'Technology' 또는 'Consumer Services' 이면서 symbol이 'MSFT', 'AMD', 'AMZN'인 데이터 검색
그냥 쿼리를 작성했다면 밑의 쿼리가 나올 것이다.
요구 사항대로라면 3개의 데이터가 나와야 하는데 그렇지 않다.
SELECT * FROM nasdaq_company
WHERE sector = 'Technology' OR sector = 'Consumer Services'
AND symbol IN ('MSFT', 'AMD', 'AMZN');
문제 발생 이유 : 논리 연산자의 우선순위
앞서 작성한 쿼리는 다음과 같은 순서로 풀이되었다
SELECT * FROM nasdaq_company
WHERE sector = 'Technology';
SELECT * FROM nasdaq_company
WHERE sector = 'Consumer Services'
AND symbol IN ('MSFT', 'AMD', 'AMZN');
sector이 'Technology'인 전체 데이터와, sector이 'Consumber Services'인 전체 데이터 중
symbol이 'MSFT', 'AMD', 'AMZN'인 데이터가 검색되었다.
요구사항이 원하는 쿼리를 도출하기 위해 소괄호()를 사용해야 한다.
SELECT * FROM nasdaq_company
WHERE (sector = 'technology' OR sector = 'Consumer Services')
AND symbol IN ('MSFT', 'AMD', 'AMZN');
해당 결과는 sector 조건을 IN으로 묶은 다음 AND로 결합해도 같은 결과를 얻을 수 있다.
SELECT * FROM nasdaq_company
WHERE sector IN('technology', 'Consumer Services')
AND symbol IN ('MSFT', 'AMD', 'AMZN');
경험
어떤 결과를 얻는 코드에는 정답이 없다.
좋은 쿼리란 가독성을 포함해 요구 사항을 정확히 반영하면서 성능도 효율적인 코드를 말한다.
'MSSQL > SQL 시작하기' 카테고리의 다른 글
06 ORDER BY 문으로 데이터 정렬하기 (1) | 2024.09.30 |
---|---|
05 NULL 데이터 검색 (0) | 2024.09.29 |
03 WHERE 문으로 조건에 맞는 데이터 검색 (4) | 2024.09.28 |
02 SSMS에서 테이블의 열 정보 확인하기 (1) | 2024.09.28 |
01 SELECT 문으로 데이터 검색하기 (5) | 2024.09.28 |