
UNIONmysql> create table test1
-> (
-> no int
-> );
mysql> create table test2
-> (
-> no int
-> );
mysql> insert into test1 values (1);
mysql> insert into test1 values (2);
mysql> insert into test1 values (3);
mysql> insert into test2 values (5);
mysql> insert into test2 values (6);
mysql> insert into test2 values (3);
UNION여러 개의 SQL문을 합쳐서 하나의 SQL문으로 만들어주는 방법
❗️ 칼럼의 개수가 같아야 함
UNION : 중복된 값을 제거하여 알려준다.UNION ALL : 중복된 값도 모두 보여준다.SELECT column1, column2, ... FROM tableA
UNION | UNION ALL
SELECT column1, column2, ... FROM tableB;
mysql> select * from test1
-> union all
-> select * from test2;

mysql> select * from test1
-> union
-> select * from test2;

위에와 다르게 중복된 3은 하나만 출력됩니다.
mysql> select name,sex,agency from celeb where sex='f'
-> union all
-> select name,sex,agency from celeb where agency='YG엔터테인먼트';

mysql> select name,sex,agency from celeb where sex='f'
-> union
-> select name,sex,agency from celeb where agency='YG엔터테인먼트';

JOINmysql> insert into snl_show values(1,8,7,'2020-09-05','강동원');
Query OK, 1 row affected (0.00 sec)
mysql> insert into snl_show values(2,8,8,'2020-09-12','유재석');
Query OK, 1 row affected (0.01 sec)
mysql> insert into snl_show values(3,8,9,'2020-09-19','차승원');
Query OK, 1 row affected (0.00 sec)
mysql> insert into snl_show values(4,8,10,'2020-09-26','이수현');
Query OK, 1 row affected (0.01 sec)
mysql> insert into snl_show values(5,9,1,'2021-09-04','이병헌');
Query OK, 1 row affected (0.00 sec)
mysql> insert into snl_show values(6,9,2,'2021-09-11','하지원');
mysql> insert into snl_show values(7,9,3,'2021-09-18','제시');
mysql> insert into snl_show values(8,9,4,'2021-09-25','조정석');
mysql> insert into snl_show values(9,9,5,'2021-10-02','조여정');
mysql> insert into snl_show values(10,9,6,'2021-10-09','옥주현');
mysql> select * from snl)show;

JOIN
INNER JOIN두개의 테이블에서 공통된 요소들을 통해 결합하는 조인방식
SELECT column1, column2, ...
FROM tableA
INNER JOIN tableB
ON tableA.column = tableB.column
WHERE condition;
mysql> select celeb.id, celeb.name, snl_show.id, snl_show.host
-> from celeb
-> inner join snl_show
-> on celeb.name = snl_show.host;

LEFT JOIN두개의 테이블에서 공통영역을 포함해 왼쪽 테이블의 다른 데이터를 포함하는 조인방식
SELECT column1, column2, ...
FROM tableA
LEFT JOIN tableB
ON tableA.column = tableB.column
WHERE condition;
mysql> select celeb.id, celeb.name, snl_show.id, snl_show.host
-> from celeb
-> left join snl_show
-> on celeb.name = snl_show.host;

celeb 기준으로 합쳐졌기에, snl_show에는 존재 안하는 celeb 데이터들은 NULL로 표기된 것을 확인할 수 있습니다.
RIGHT JOIN두개의 테이블에서 공통영역을 포함해 오른쪽 테이블의 다른 데이터를 포함하는 조인방식
SELECT column1, column2, ...
FROM tableA
RIGHT JOIN tableB
ON tableA.column = tableB.column
WHERE condition;
mysql> select celeb.id, celeb.name, snl_show.id, snl_show.host
-> from celeb
-> right join snl_show
-> on celeb.name = snl_show.host;

snl_show에는 존재하지만 celeb에는 존재하지 않는 데이터들은 NULL로 표기된것을 확인할 수 있습니다.
FULL OUTER JOIN두개의 테이블에서 공통영역을 포함해 양쪽 테이블의 다른 데이터를 포함하는 조인방식
SELECT column1, column2, ...
FROM tableA
FULL OUTER JOIN tableB
ON tableA.column = tableB.column
WHERE condition;
❗️MySQL은 FULL JOIN을 지원하지 않아 오류가 뜰 수 있다.
SELF JOINSELECT column1, column2, ...
FROM tableA, tableB, ...
WHERE condition;
mysql> select celeb.id, celeb.name, snl_show.id, snl_show.host
-> from celeb, snl_show
-> where celeb.name = snl_show.host;

mysql> select celeb.name, celeb.job_title
-> from celeb, snl_show
-> where celeb.name = snl_show.host
-> and agency='안테나';

mysql> select name, age, job_title, agency, season, episode
-> from celeb, snl_show
-> where celeb.name = snl_show.host
-> and ((not job_title like '%영화배우%' and agency = 'YG엔터테인먼트')
-> or (age >=40 and agency != 'YG엔터테인먼트'));

mysql> select snl_show.ID, season,episode, celeb.name, celeb.job_title
-> from celeb, snl_show
-> where celeb.name = snl_show.host;

mysql> select name,season,episode,broadcast_date,agency
-> from celeb, snl_show
-> where name=host
-> and (episode in (7,9,10) or agency like 'YG______')
-> and broadcast_date>'2020-09-15';
