create table celeb(
-> ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> NAME VARCHAR(32) NOT NULL DEFAULT '',
-> BIRTHDAY DATE,
-> AGE INT,
-> SEX CHAR(1),
-> JOB_TITLE VARCHAR(32),
-> AGENCY VARCHAR(32)
-> );
desc celeb;
확인까지.
celeb 테이블 data 추가.
insert into celeb values (1, '아이유', '1993-05-16', 29, 'F', '가수, 텔런트', 'EDAM엔터테이먼트');
insert into celeb values (2, '이미주', '1994-09-23', 28, 'F', '가수', '울림엔터테이먼트');
insert into celeb values (3, '송강', '1994-04-23', 28, 'M', '텔런트', '나무엑터스');
insert into celeb values (4, '강동원', '1981-01-18', 41, 'M', '영화배우, 텔런트', 'YG엔터테이먼트');
insert into celeb values (5, '유재석', '1972-08-14', 50, 'M', 'MC, 개그맨', '안테나');
insert into celeb values (6, '차승원', '1970-06-07', 48, 'M', '영화배우, 모델', 'YG엔터테이먼트');
insert into celeb values (7, '이수현', '1999-05-04', 23, 'F', '가수', 'YG엔터테이먼트');
snl_show 테이블 만들기
CREATE TABLE snl_show (
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
SEASON INT NOT NULL,
EPISODE INT NOT NULL,
BROADCAST_DATE date,
HOST VARCHAR(32) NOT NULL
);
습관 desc snl_show;
celeb 테이블 data 추가.
insert into snl_show VALUES (1, 8, 7, '2020-09-05', '강동원');
insert into snl_show VALUES (2, 8, 8, '2020-09-12', '유재석');
insert into snl_show VALUES (3, 8, 9, '2020-09-19', '차승원');
insert into snl_show VALUES (4, 8, 10, '2020-09-26', '이수현');
insert into snl_show VALUES (5, 9, 1, '2021-09-04', '이병헌');
insert into snl_show VALUES (6, 9, 2, '2021-09-11', '하지원');
insert into snl_show VALUES (7, 9, 3, '2021-09-18', '제시');
insert into snl_show VALUES (8, 9, 4, '2021-09-25', '조정석');
insert into snl_show VALUES (9, 9, 5, '2021-10-02', '조여정');
insert into snl_show VALUES (10, 9, 6, '2021-10-09', '옥주현');
select from snl_show;
select from celeb;
1. INNER JOIN
select celeb.id, celeb.name, snl_show.host
-> from celeb
-> INNER JOIN snl_show
-> ON celeb.name = snl_show.host;
2. 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;
3. 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;
4. 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에서는 지원하지 않는다.
그래서 이렇게 편법?!으로 합친다.
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;
5. SELF JOIN
Q. celeb 테이블의 연예인 중, snl_show에 host로 출연했고 소속사가 안테나인 사람의 이름과 직업을 검색
select celeb.id, celeb.name, celeb.job_title
-> from celeb, snl_show
-> where celeb.name = snl_show.host AND agency = '안테나';
나는 이렇게 복잡하게 했는데
더 쉽게는
select name, job_title FROM celeb WHERE agency = '안테나';
=> 한줄로 되네...
show tables;
select from celeb;
select from snl_show;
select concat('이름:', name) from celeb;
파이썬에서 문자열 포맷팅하는 기능과 비슷한 형태다.
Alias는 컬럼에 주는 방법과 테이블에 주는 방법 2가지가 있다.
① Alias 문법 - Conlumn
Select column as alias
From tablename
② Alias 문법 - Table
Select *
From tablename as alias
select name as '이름'
from celeb;
select name as '이름', agency as '소속사'
-> from celeb;
select concat(name, ' : ', job_title) as profile from celeb;
실습
select CONCAT(s.season, '-', s.episode, '(', s.broadcast_date, ')') AS '
방송정보',
-> CONCAT(c.name, '(', c.job_title,')') AS '출연자정보'
-> from celeb AS c, snl_show AS s
-> where c.name = s.host;

Select Distinct column1..., column2...
From tablename;
Select column1, column2
From tablename
Where condition
LIMIT number;
실습
select c.name, age,
from celeb as c, snl_show as s
where c.name = s.host;
select concat('SNL 시즌', s.season, '에피소드', s.episode, '호스트', ' ', name) AS 'SNL 방송정보', age
from celeb as c, snl_show as s
where c.name = s.host order by c.age DESC, s.broadcast_date DESC LIMIT 2;

감을 잡았다!