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_list1select_list2의 columns의 순서와 수는 같아야 한다.
  • 두 쿼리의 상응하는 data types는 호환해야 한다.

다음의 structure와 데이터를 가진 t1t2 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;