EXISTS 사용 방법
EXISTS는 먼저 쿼리를 조회해서 하나의 레코드를 가지고 오고 나서 서브쿼리를 실행하여 서브쿼리에 대한 결과가 존재하는지를 확인해서 있다면 레코드를 출력해줍니다.
여기서 가장 중요한 것은 서브쿼리에 대한 결과가 NULL이여도 결과가 존재한 것이기 때문에 결과가 True가 되어 레코드를 출력하게 됩니다.
TEST
테스트 해볼 사이트: https://sqltest.net/
SQL Script
CREATE TABLE mysql_test_a (
id VARCHAR(30),
name VARCHAR(30) NOT NULL
);
INSERT INTO `mysql_test_a` (`id`, `name`)
VALUES ('1', 'abab');
INSERT INTO `mysql_test_a` (`id`, `name`)
VALUES ('2', 'John');
INSERT INTO `mysql_test_a` (`id`, `name`)
VALUES ('3', 'dd');
INSERT INTO `mysql_test_a` (`id`, `name`)
VALUES ('4', 'bb');
INSERT INTO `mysql_test_a` (`id`, `name`)
VALUES ('5', 'aa');
INSERT INTO `mysql_test_a` (`id`, `name`)
VALUES ('2', 'omokoe');
INSERT INTO `mysql_test_a` (`id`, `name`)
VALUES ('6', 'John');
SQL Query
SELECT * FROM mysql_test_a a
where exists (
select 1 from mysql_test_a b
where a.id = b.id
and b.name = 'John'
);
결과
'2', 'John'
'2', 'omokoe'
'6', 'John'
왜 '2', 'omokoe' 가 결과 값에 포함되어 있을까?
앞서 말했드이 먼저 쿼리를 조회하고 나서 서브쿼리를 조회 하는데, 서브쿼리 b 전체 행을 조회합니다. b 테이블에 id 값이 2인데 name에 값이 John인 레코드가 있으면 return True가 되고 레코드에 출력되는 것입니다. 그래서 '6', 'John'도 출력되는 것입니다.
'DB > MySQL' 카테고리의 다른 글
MySQL 계정에 DB 권한 부여 (0) | 2024.09.05 |
---|---|
MySQL Query 최대 용량 (1) | 2024.09.05 |
Join 속도 개선 (0) | 2023.05.17 |