퀴즈 봐야 하는데...강의가 한참 남았따..
실습 환경 설정
테이블 추가
CREATE TABLE snl_show
(
ID int NOT NULL AUTO_INCREMENT PRIMARY KEY,
# ID는 숫자형, null 값 허용하지 않음
# AUTO_INCREMENT : 입력하지 않는 경우에는 자동으로 증가되는 값을 넣겠다
# PRIMARY KEY : IDSMS NULL값을 가질수 없고, 중복도 허용되지 않는 조건
SEASON int NOT NULL,
EPISODE int NOT NULL,
BROADCAST_DATE date,
HOST varchar(32) NOT NULL
);
테이블 확인 (DESC snl_show;)
데이터 추가
데이터 확인
SELECT * FROM snl_show;
두개 이상의 테이블을 결합하는 것
💡 기본 문법
SELECT column1, column2, ...
FROM tableA
INNER JOIN tableB
# 기준 (같은 경우에 JOIN 하겠다)
ON tableA.column = tableB.column
WHERE condition;
예제 1.
SELECT celeb.id, celeb.name, snl_show.id, snl_show.host
FROM celeb
INNER JOIN snl_show
ON celeb.name = snl_show.host;
💡 기본 문법
SELECT column1, column2, ...
# LEFT TABLE
FROM tableA
# RIGHT TABLE
LEFT JOIN tableB
# 기준 (같은 컬럼이 있는 경우에)
ON tableA.column = tableB.column
WHERE condition;
SELECT celeb.id, celeb.name, snl_show.id, snl_show.host
FROM celeb
LEFT JOIN snl_show
ON celeb.name = snl_show.host;
💡 기본 문법
SELECT column1, column2, ...
# LEFT TABLE
FROM tableA
# RIGHT TABLE
RIGHT JOIN tableB
# 기준 (같은 컬럼이 있는 경우에)
ON tableA.column = tableB.column
WHERE condition;
SELECT celeb.id, celeb.name, snl_show.id, snl_show.host
FROM celeb
RIGHT JOIN snl_show
ON celeb.name = snl_show.host;
❗ MySQL에서 지원하지 않는 문법
💡 기본 문법
❗ MySQL에서 지원하지 않는 문법
SELECT column1, column2, ...
# LEFT TABLE
FROM tableA
# RIGHT TABLE
FULL OUTER JOIN JOIN tableB
# 기준 (같은 컬럼이 있는 경우에)
ON tableA.column = tableB.column
WHERE condition;
▼
▼
⭐ 비슷한 쿼리로 만들어줌
SELECT column1, column2, ...
FROM tableA
LEFT JOIN tableB ON tableA.column = tableB.column
UNION #중복 제거
SELECT column1, column2, ...
FROM tableA
RIGHT JOIN tableB ON tableA.column = tableB.column
WHERE condition;
예제 1.
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;
▼
▼
비슷한 쿼리로 출력
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;
⭐ INNER JOIN
과 결과값이 동일함
💡 기본 문법
SELECT column1, column2, ...
# table 이 여러개..!
FROM tableA, tableB
# 기준
WHERE condition;
예제 1.
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;
예제 2.
celeb 테이블의 연예인 중
snl_show에 host로 출연했고
소속사가 안테나인 사람의 이름과 직업 검색
# 이름과 직업 검색
SELECT celeb.name, celeb.job_title
# JOIN 할 테이블
FROM celeb, snl_show
# 조건 1 (host로 출연한 적이 있는 셀럽)
WHERE celeb.name = snl_show.host
# 조건 2 (안테나 소속)
AND celeb.agency = '안테나';
예제 3.
celeb 테이블의 연예인 중
snl_show 에 host로 출연했고
영화배우는 아니면서 YG엔터 소속이거나
40세 이상이면서 yg엔터 소속이 아닌
연예인의 이름, 나이, 직업, 소속사, 시즌, 에피소드 검색
SELECT * FROM celeb
WHERE NOT job_title LIKE '%영화배우%'
SELECT * FROM celeb
WHERE NOT job_title LIKE '%영화배우%'
AND agency = 'YG엔터'
SELECT * FROM celeb
WHERE age>=40 AND agency != 'YG엔터'
SELECT celeb.id, celeb.name, snl_show.host
FROM celeb, snl_show
WHERE celeb.name = snl_show.host
SELECT celeb.id, celeb.name, snl_show.host
FROM celeb, snl_show
WHERE celeb.name = snl_show.host
AND NOT job_title LIKE '%영화배우%'
AND agency = '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엔터')
);
예제 4.
snl_show에 출연한 연예인의 snl_show 아이디, 시즌, 에피소드, 이름, 직업 정보 검색
# 가져올 것듣
SELECT snl_show.host, snl_show.season, snl_show.episode, celeb.name, celeb.job__title
FROM celeb, snl_show
WHERE celeb.name = snl_show.host
컬럼명만 쓸 수 있는데,
id는 두 table에 중복되어 있기 때문에 [에러]발생
동일한 컬럼에 한해서 table을 써주면,
컬럼명만 으로 쿼리를 쓸 수 있음
예제 5.
SELECT name, seaeon, 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';
예제 6.
snl_show에 출연한 celeb 테이블의 연예인 중
영화배우 나 탈렌트가 아닌
연예인의 아이디, 이름, 직업, 시즌, 에피소드 검색
SELECT snl_show.id, name, job_title, season, episode
FROM celeb, snl_show
WHERE
NOT job_title='%영화배우%'
AND job_title='%탈렌트%';
▼ ❗정답❗SELECT celeb.id, name, job_title, season, episode
FROM celeb, snl_show
WHERE name = host
AND
NOT
(job_title LIKE ='%영화배우%'
OR job_title LIKE ='%탈렌트%');