반응형
안녕하세요. 마술공입니다.
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 (상수) 로 사용하는 사람들도 있지만,
실무에서는 쿼리의 직관성을 위해서 아스타(*)로 사용하는 것을 권장하는 편입니다.
반응형
'IT 이야기 > DB' 카테고리의 다른 글
SQLP 자격증의 가치와 공부하는 이유 (3) | 2022.09.02 |
---|---|
[MSSQL] 로컬서버 접속 후 DB와 사용자 생성 방법 (0) | 2022.09.01 |
데이터베이스 관리자(DBA) 직무, 기술면접 질문 정리 (0) | 2022.08.30 |
[MSSQL] CASE문 표현식 (case when) (0) | 2022.08.29 |
[MSSQL] 테이블 컬럼 추가,변경,삭제 (Alter table) (0) | 2022.08.27 |