2021-12-13 17:34 작성
My SQL basic 메모
Table of contents
주의: MySQL은
MINUS
연산자를 지원하지 않는다. 이번 튜토리얼은 MySQL에서JOIN
을 이용해MINUS
를 모방하는 방법에 대해 학습한다.\
SQL MINUS 연산자 도입
MINUS
연산자는 SQL standard의 세 가지 set 연산자 중 하나다. (UNION
, INTERSECT
그리고 MINUS
)
MINUS
는 두 쿼리의 results를 비교하고 두 번째 쿼리의 result set에서 나타나지 않는 첫 번째 쿼리의 result set에서 distinct rows만을 반환한다.
다음은 MINUS
연산자의 기본 문법이다:
SELECT select_list1
FROM table_name1
MINUS
SELECT select_list2
FROM table_name2;
MINUS
연산자를 사용하는 쿼리에서 기본 규칙은 다음과 같다:
select_list1
과select_list2
의 columns의 순서와 수는 같아야 한다.- 두 쿼리의 상응하는 data types는 호환해야 한다.
다음의 structure와 데이터를 가진 t1
과 t2
tables를 가지고 있다고 가정하자:
CREATE TABLE t1 (
id INT PRIMARY KEY
);
CREATE TABLE t2 (
id INT PRIMARY KEY
);
INSERT INTO t1 VALUES (1), (2), (3);
INSERT INTO t2 VALUES (2), (3), (4);
다음의 쿼리는 t2
table 쿼리에서 발견되지 않는 t1
의 distinct values를 반환한다.
SELECT id FROM t1
MINUS
SELECT id FROM t2;
다음의 벤 다이어그램은 MINUS
를 시각적으로 보여준다:
Microsoft SQL Server와 PostgreSQL 같은 데이터베이스 시스템에서는 MINUS
대신 EXCEPT
를 사용한다는 점을 명심하라.
MySQL MINUS 연산자 모방
MySQL은 MINUS
연산자를 지원하지 않는다. 그러나 JOIN
을 이용해 모방할 수 있다.
두 쿼리에서 MINUS
를 모방하기 위해 다음의 문법을 따른다:
SELECT
select_list
FROM
table1
LEFT JOIN table2
ON join_predicate
WHERE
table2.column_name IS NULL;
예를 들어, 다음의 쿼리는 LEFT JOIN
을 사용하여 MINUS
연산자와 동일한 결과값을 반환한다.
SELECT
id
FROM
t1
LEFT JOIN
t2 USING (id)
WHERE
t2.id IS NULL;