✔ snl_show에 호스트로 출연한 celeb테이블의 셀럽들 찾아보기, celeb 테이블과 snl_show 테이블을 INNER JOIN
SELECT celeb.id, celeb.name, snl_show.id, snl_show.host
FROM celeb
INNER JOIN snl_show
ON celeb.name = snl_show.host;
✔ snl_show에 호스트로 출연한 celeb을 기준으로 celeb테이블과 snl_show테이블을 LEFT JOIN
SELECT celeb.id, celeb.name, snl_show.id, snl_show.host
FROM celeb
LEFT JOIN snl_show
ON celeb.name = snl_show.host;
-> JOIN하는 방향의 테이블(celeb)의 데이터는 그대로 남는다.
✔ snl_show에 호스트로 출연한 celeb을 기준으로 celeb테이블과 snl_show테이블을 RIGHT JOIN
SELECT celeb.id, celeb.name, snl_show.id, snl_show.host
FROM celeb
RIGHT JOIN snl_show
ON celeb.name = snl_show.host;
-> JOIN하는 방향의 테이블(snl_show)의 데이터는 그대로 남는다.
✔ snl_show에 호스트로 출연한 celeb을 기준으로 celeb테이블과 snl_show테이블을 FULL OUTER JOIN
SELECT celeb.id, celeb.name, snl_show.id, snl_show.host
FROM celeb
FULL OUTER JOIN snl_show
ON celeb.name = snl_show.host;
하지만, MySQL에서는 FULL JOIN을 지원하지 않는다!
따라서 다음과 같은 방법으로 FULL OUTER JOIN과 같은 결과값을 나타낼 수 있다.
SELECT celeb.id, celeb.name, snl_show.id, snl_show.host
FROM celeb
LEFT JOIN snl_show
ON celeb.name = snl_show.host
UNION
SELECT celeb.id, celeb.name, snl_show.id, snl_show.host
FROM celeb
RIGHT JOIN snl_show
ON celeb.name = snl_show.host;
-> LEFT JOIN 과 RIGHT JOIN을 동시에 사용함
JOIN 명령어를 따로 쓰지않고 조인시키는 방법
나 자신과의 join이다.
FROM절에 같은 테이블이 2번 이상 등장하기 때문에 ALIAS가 반드시 필요하다.
서로 다른 테이블끼리도 가능하다. (join할 테이블을 'FROM table1, table2' 로 쓰면 됨)
WHERE절에 조인할 조건을 넣으면 됨
✔ 자기자신과 조인
SELECT a.category_type, a.category_name,
b.category_type, b.category_name
FROM category a, category b
WHERE a.category_name = b.parent_category
AND a.category_type = '대' ;
✔ 자기자신과 조인
SELECT a.category_type, a.category_name,
b.category_type, b.category_name,
c.category_type, c.category_name
FROM category a, category b, category c
WHERE a.category_name = b.parent_category
AND b.category_name = c.parent.category ;
✔ snl_show에 호스트로 출연한 celeb을 기준으로 celeb테이블과 snl_show테이블을 SELF JOIN
SELECT celeb.id, celeb.name, snl_show.id, snl_show.host
FROM celeb, snl_show
WHERE celeb.name = snl_show.host;
✔ celeb테이블의 연예인중, snl_show에 host로 출연했고 소속사가 안테나인 사람의 이름과 직업을 검색
SELECT celeb.name, celeb.job_title
FROM celeb, snl_show
WHERE celeb.name = snl_show.host AND celeb.agency='안테나';
✔ celeb 테이블의 연예인중, snl_show에 host로 출연했고, 영화배우는 아니면서 YG엔터에이먼트 소속이거나 40세 이상이면서 YG엔터테이먼트 소속이 아닌 연예인의 이름과 나이, 직업, 소속사정보, 시즌, 에피소드를 검색
SELECT celeb.name, celeb.age, celeb.job_title, celeb.agency,
snl_show.season, snl_show.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엔터테이먼트));
-> 괄호 위치 중요!
✔ snl_show에 출연한 celeb중, 에피소드7,9,10 중에 출연했거나 소속사가 YG로 시작하고 뒤에 6글자로 끝나는 사람 중 2020년 9월 15일 이후에 출연했던 사람의 이름, 시즌, 에피소드, 방송날짜, 소속사 검색
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';
-> 동일한 컬럼명이 존재하는 경우에 그 칼럼명 앞에 테이블명을 명시 해야한다
조건 컬럼없이 두 테이블 간 가능한 모든 연결을 결합하는 조인 방식이다.
별도의 JOIN조건이 없는 경우 두 테이블은 Cartesian Product(카티션 곱)가 된다.
✔ JOIN이 아예 없을 때
SELECT A.col1, B.col3
FROM sample1 A, sample2 B
WHERE B.col3 % 5 = 0;