[쿼리 A] UNION [쿼리B]
또는 [쿼리 A] UNION ALL [쿼리B]
형식으로 사용
-> UNION은 동일한 값은 제외하고 보여주고, UNION ALL은 동일한 값도 표현 해서 보여줌
-> 두 쿼리의 결과값의 개수가 같아야함 (다르면 에러 발생)
ORDER BY는 쿼리 가장 마지막에 작성 가능하고, 앞에 쿼리에서 가져온 칼럼으로만 가능
MYSQL 에는 이 두 표현이 존재하지 않아 JOIN을 사용해 표현 함
교집합을 확인하고 싶은 컬럼은 모두 다 기준으로 두고 합춰줘야 한다
-> 단순 INNER JOIN과의 차이
차집합을 확인하고 싶은 칼럼은 모두 다 기준으로 두고 합쳐야 함
DROP DATABASE IF EXISTS pokemon;
CREATE DATABASE pokemon;
USE pokemon;
CREATE TABLE mypokemon (
number int,
name varchar(20),
type varchar(10),
attack int,
defense int
);
CREATE TABLE friendpokemon (
number int,
name varchar(20),
type varchar(10),
attack int,
defense int
);
INSERT INTO mypokemon (number, name, type, attack, defense)
VALUES (10, 'caterpie', 'bug', 30, 35),
(25, 'pikachu', 'electric', 55, 40),
(26, 'raichu', 'electric', 90, 55),
(133, 'eevee', 'normal', 55, 50),
(152, 'chikoirita', 'grass', 49, 65);
INSERT INTO friendpokemon (number, name, type, attack, defense)
VALUES (26, 'raichu', 'electric', 80, 60),
(125, 'electabuzz', 'electric', 83, 57),
(137, 'porygon', 'normal', 60, 70),
(153, 'bayleef', 'grass', 62, 80),
(172, 'pichu', 'electric', 40, 15),
(470, 'leafeon', 'grass', 110, 130);
SELECT type
from mypokemon
UNION
SELECT type
from friendpokemon;
SELECT number, name
FROM mypokemon
WHERE type = 'grass'
UNION ALL
SELECT number, name
FROM friendpokemon
WHERE type = 'grass';
SELECT t1.name
FROM mypokemon as t1
INNER JOIN friendpokemon as t2
ON t1.name = t2.name;
SELECT t1.name
FROM mypokemon as t1
LEFT JOIN friendpokemon as t2
ON t1.name = t2.name
WHERE t2.name IS NULL;