IT 이야기/DB

[MSSQL] EXISTS문 사용법 및 예제

하늘봉 2022. 8. 31. 12:00
반응형

안녕하세요. 마술공입니다.

MS-SQL에서 EXISTS문을 사용하는 스크립트를 소개해드리겠습니다.

스크립트를 직접 보면 직관적으로 의미를 파악할 수 있으니 작업에 참고하시기 바랍니다.

 

EXISTS 문은 서브 쿼리를 입력받아 하나의 행이라도 반환하면 TRUE를 그렇지 않으면 FALSE를 반환합니다.

그렇다면 어떤 경우에 EXISTS 문을 활용할 수 있을까요?

 

우선 테스트에 사용할 테이블을 만들겠습니다.

예제 스크립트 (테이블 생성)

CREATE TABLE dbo.ORDER_TABLE (  
        orderid varchar(10)  
,       orderdate datetime 
,       empid varchar(10) 
,       custid varchar(10) 
)  
INSERT INTO ORDER_TABLE(orderid, orderdate, empid, custid) 
VALUES ('1101', '20210506', 'sh100',  'C2455');  
INSERT INTO ORDER_TABLE(orderid, orderdate, empid, custid) 
VALUES ('1102', '20210506', 'sj233',  'C1575');  
INSERT INTO ORDER_TABLE(orderid, orderdate, empid, custid) 
VALUES ('1103', '20210506', 'cho657', 'C2474'); 
INSERT INTO ORDER_TABLE(orderid, orderdate, empid, custid) 
VALUES ('1104', '20210507', 'sh100',  'C2455');  
INSERT INTO ORDER_TABLE(orderid, orderdate, empid, custid) 
VALUES ('1105', '20210507', 'sj233',  'C2455');  
INSERT INTO ORDER_TABLE(orderid, orderdate, empid, custid) 
VALUES ('1106', '20210508', 'cho657', 'C2474');  
INSERT INTO ORDER_TABLE(orderid, orderdate, empid, custid) 
VALUES ('1107', '20210508', 'cho657', 'C2474');

CREATE TABLE dbo.CUST_TABLE (  
        custid varchar(10)  
,       custname varchar(20) 
,       country varchar(20) 
)  
INSERT INTO CUST_TABLE(custid, custname, country) 
VALUES ('C2455', 'junsu', 'korea');  
INSERT INTO CUST_TABLE(custid, custname, country) 
VALUES ('C1575', 'mina', 'korea');  
INSERT INTO CUST_TABLE(custid, custname, country) 
VALUES ('C2474', 'hara', 'singapore'); 
INSERT INTO CUST_TABLE(custid, custname, country) 
VALUES ('C2479', 'leo', 'singapore');

 

예제 스크립트 (EXISTS문)

SELECT c.custid
      , c.custname
      , c.country 
FROM CUST_TABLE c 
WHERE EXISTS (SELECT * FROM ORDER_TABLE o WHERE o.custid = c.custid)

위의 쿼리문을 해석하면 이런 의미입니다.

CUST_TABLE을 조회하되, ODER_TABLE에 존재하는 고객아이디에 대해서만 조회하라

 

CUST_TABLE이 총 4건이 었는데, 조회 결과 3건만 조회되었습니다.

ORDER_TABLE을 확인해보면 custid가 C2479인 데이터가 한 건도 없는 것을 확인할 수 있습니다.

 

이렇듯 EXISTS문은 존재여부에 대해서 활용할 수 있는 구문으로 그 활용 범위가 굉장히 넓으니 잘 숙지하시어 사용하시길 바랍니다.

 

EXISTS문에 입력되는 서브 쿼리에는 아스타(*)를 사용하는데,

이 때 사용되는 서브 쿼리의 SELECT 목록에 어떠한 칼럼과 상관없이 매칭되는 행에 대해서만 고려하기 때문입니다.

 

그래서 SELECT 1 (상수) 로 사용하는 사람들도 있지만,

실무에서는 쿼리의 직관성을 위해서 아스타(*)로 사용하는 것을 권장하는 편입니다.

 

 

반응형