MSSQL 논리 연산자 BETWEEN, EXISTS, IN, LIKE, NOT 등 (WHERE 절)
MS SQL에서는 WHERE 절에서 쿼리 결과 행 제약조건으로 논리 연산자를 기본적으로 지원합니다. 저 같은 경우에도 거의 모든 쿼리문 WHERE 절에서 논리 연산자를 사용하고 있는데 그중에서 BETWEEN, EXISTS, IN, LIKE, NOT 논리 연산자를 가장 많이 사용하고 있습니다.
그럼 간단한 예제를 통해서 논리 연산자에 대해서 알아보죠.
포스트 기준
– Microsoft SQL Server 2019
– SSMS 18.10
논리 연산자 종류
▶ 논리 연산자 종류
연산자 | 설명 |
---|---|
ALL | 모든 비교 집합이 TRUE인 경우 TRUE입니다. |
AND | 두 개의 부울 식이 모두 TRUE인 경우 TRUE입니다. |
ANY | 비교 집합 중 하나가 TRUE인 경우 TRUE입니다. |
BETWEEN | 피연산자가 범위 안에 있는 경우 TRUE입니다. |
EXISTS | 하위 쿼리에 행이 포함된 경우 TRUE입니다. |
IN | 피연산자가 식 목록 중 하나와 같은 경우 TRUE입니다. |
LIKE | 피연산자가 패턴과 일치하는 경우 TRUE입니다. |
NOT | 다른 모든 부울 연산자의 값을 반대로 합니다. |
OR | 하나의 부울 식이 TRUE인 경우 TRUE입니다. |
SOME | 비교 집합 중 일부가 TRUE인 경우 TRUE입니다. |
사용 예제
1. 테스트 데이터
-- 과목 (국어, 영어, 수학)
SELECT *
FROM BS_SUBJECT
-- 점수 총 10건
SELECT *
FROM BS_DEMO_7
![테스트 데이터](https://bluesharehub.com/wp-content/uploads/2022/03/img_1-1.png)
![테스트 데이터](https://bluesharehub.com/wp-content/uploads/2022/03/img_1-1.png)
2. 논리 연산자 예제 1) AND, OR, LIKE
-- 1) 국어 점수가 80점 이상인 건
SELECT *
FROM BS_DEMO_7
WHERE SUBJECT = '국어' -- 과목
AND SCORE >= 80 -- 점수
-- 2) 과목 중에서 국어 또는 영어 인 건
SELECT *
FROM BS_DEMO_7
WHERE SUBJECT = '국어' -- 과목
OR SUBJECT = '영어' -- 영어
-- 3) 이름 마지막 글자가 '1'인 건
SELECT *
FROM BS_DEMO_7
WHERE NAME LIKE '%1'
![논리 연산자 예제 1) AND, OR, LIKE](https://bluesharehub.com/wp-content/uploads/2022/03/img_2-1.png)
![논리 연산자 예제 1) AND, OR, LIKE](https://bluesharehub.com/wp-content/uploads/2022/03/img_2-1.png)
3. 논리 연산자 예제 2) BETWEEN, NOT
-- 1) 점수가 80점 이상 90점 이하 인 건
SELECT *
FROM BS_DEMO_7
WHERE SCORE BETWEEN 80 AND 90 -- 점수
-- 2) 점수가 80점 이상 90점 이하 아닌 건
SELECT *
FROM BS_DEMO_7
WHERE NOT(SCORE BETWEEN 80 AND 90) -- 점수
![논리 연산자 예제 2) BETWEEN, NOT](https://bluesharehub.com/wp-content/uploads/2022/03/img_3-1.png)
![논리 연산자 예제 2) BETWEEN, NOT](https://bluesharehub.com/wp-content/uploads/2022/03/img_3-1.png)
4. 논리 연산자 예제 3) IN
/* 과목 중에서 국어 또는 영어 인 건
SELECT *
FROM BS_DEMO_7
WHERE SUBJECT = '국어' -- 과목
OR SUBJECT = '영어' -- 영어 */
-- 과목 중에서 국어 또는 영어 인 건 (OR 연산자를 IN 연산자로 변경)
SELECT *
FROM BS_DEMO_7
WHERE SUBJECT IN ('국어', '영어') -- 과목
-- 과목 중에서 BS_SUBJECT(테이블)에 존재하는 과목만
SELECT *
FROM BS_DEMO_7
WHERE SUBJECT IN (SELECT SUBJECT FROM BS_SUBJECT) -- 아무개5 '과학' 과목은 제외
![논리 연산자 예제 3) IN](https://bluesharehub.com/wp-content/uploads/2022/03/img_4.png)
![논리 연산자 예제 3) IN](https://bluesharehub.com/wp-content/uploads/2022/03/img_4.png)
5. 논리 연산자 예제 4) EXISTS
/* 과목 중에서 BS_SUBJECT(테이블)에 존재하는 과목만
SELECT *
FROM BS_DEMO_7
WHERE SUBJECT IN (SELECT SUBJECT FROM BS_SUBJECT) -- 아무개5 '과학' 과목은 제외 */
-- 과목 중에서 BS_SUBJECT(테이블)에 존재하는 과목만 (IN 연산자를 EXISTS 연산자로 변경)
SELECT *
FROM BS_DEMO_7 AS A
WHERE EXISTS
(SELECT SUBJECT
FROM BS_SUBJECT
WHERE SUBJECT = A.SUBJECT)
-- 과목 중에서 BS_SUBJECT(테이블)에 존재하지 않는 과목
SELECT *
FROM BS_DEMO_7 AS A
WHERE NOT EXISTS
(SELECT SUBJECT
FROM BS_SUBJECT
WHERE SUBJECT = A.SUBJECT)
![논리 연산자 예제 4) EXISTS](https://bluesharehub.com/wp-content/uploads/2022/03/img_5.png)
![논리 연산자 예제 4) EXISTS](https://bluesharehub.com/wp-content/uploads/2022/03/img_5.png)
이 글이 도움이 되셨다면 공유를 부탁드립니다. 다음 글에서 뵙겠습니다!