본문 바로가기
데이터베이스

[SQLD] SQL 비교연산자(관계, 논리), IN, OR, AND, NOT, Exists

by 데이널 2023. 11. 16.

이번 포스팅에서는 SQL의 연사자들에 대해 알아보도록 하겠습니다. SQL은 관계, 논리, IN, OR, AND, NOT, Exists 등 연산자를 사용할 수 있는데요. 아래 연산자를 통해 WHERE절에서 반환되는 데이터 행을 제한 한다고 생각하면 됩니다. 크게 관계 연산자와 논리 연산자로 구분할 수 있습니다. 

 

 

종류 예시
관계
연산자
= SELECT * FROM TB_PROD WHERE PROD_UNIT_AMT = 100000;
!=, ^=, <> SELECT * FROM TB_PROD WHERE PROD_UNIT_AMT != 100000;
>,< SELECT * FROM TB_PROD WHERE PROD_UNIT_AMT > 100000;
>=, <= SELECT * FROM TB_PROD WHERE PROD_UNIT_AMT <= 100000;
IN SELECT * FROM TB_PROD WHERE PROD_UNIT_AMT IN (100000,20000);
LIKE SELECT * FROM TB_PROD WHERE PROD_NM LIKE ‘회전%’;
BETWEEN SELECT * FROM TB_PROD WHERE PROD_UNIT_AMT BETWEEN 100000 AND 200000;
IS NULL SELECT * FROM TB_PROD WHERE DISCT_AMT IS NULL;
논리
연산자
AND SELECT * FROM TB_PROD WHERE PROD_NM LIKE ‘회전%’ AND PROD_LANC_YM = ‘201205’;
OR SELECT * FROM TB_PROD WHERE PROD_NM LIKE ‘회전%’ OR PROD_LANC_YM = ‘201205’;
NOT SELECT * FROM TB_PROD WHERE PROD_LANC_YM NOT ‘201205’;

 

LIKE 연산 

  • where  col1 like '_b%' : 첫번째 한글자는 어는 값이든 상관없고 두번째 글자가 b인 데이터 출력
  • col1 like '%#_%' escape '#' : escape '#'을 하면 #뒤에 글자를 그래도 인식하기 때문에 _를 포함한 데이터 선택
  • where  col1 like '_#_%' escape '#' : 두 번째 문자가 _인 데이터 선택

IS NULL

  • 널(NULL)값은 알 수 없는 값, 사용할 수 없는 값, 할당할 수 없는 값, 적용할 수 없는 값, 아직 정의 되지 않은 값
  • 널(NULL)은 0 또는 공백과 다름
  • 산술식 에서 컬럼의 값이 널이면 결과는 NULL

IN과 OR는 같을까?

SELECT *
FROM   TB_PROD
WHERE  PROD_UNIT_AMT IN (100000,20000);
SELECT *
FROM   TB_PROD
WHERE  PROD_UNIT_AMT = 100000
        OR  PROD_UNIT_AMT = 200000;

왼쪽에 IN을 사용하는 방식을 논리 연산자인 OR로 변경해도 같은 결과가 나옵니다. 

 

NOT 연산자

SELECT *
FROM   TB_PROD
WHERE  PROD_NM NOT IN ('아이패드','맥북');
SELECT *
FROM   TB_PROD
WHERE  PROD_NM !=  '아이패드
      AND  PROD_NM !=  '맥북';

 

위의 왼쪽, 오른쪽 SQL과 같이 NOT (A OR B) = NOT A  AND NOT B는 같습니다. 

 

EXISTS 연산자

1.in을 사용
select *
from   temp1 t1
where  t1.col1 in ( select col1
                    from   temp2 s1
                  )
;
2. exists를 사용
select *
from   temp1 t1
where  exists ( select 1
                from   temp2 s1
                where  s1.col1 = t1.col1
              )
;

 

위의 예시에서 볼 수 있듯이 temp1의 col1 데이터가 temp2에 col1 데이터로 존재하는 row를 선택하기 위해 서브쿼리를 이용하여 IN과 EXISTS를 이용하여 작성할 수 있습니다. EXISTS를 사용하는 이유는 주로 특정 테이블의 특정 값이 다른 테이블에 존재하는지를 확인하기 위해서 입니다.