▷ 오늘 학습 계획: SQL 강의(기초10~11)
여러 개의 SQL문을 합쳐서 하나의 SQL문으로 만들어주는 방법(수직 결합)
(컬럼 개수가 같아야 한다)
UNION: 중복 값을 제거하여 알려준다.
UNION ALL: 중복된 값도 모두 보여준다.가수가 직업인 연예인의 이름, 직업을 검색하는 쿼리와 1980년대에 태어난 연예인의 이름, 나이를 검색하는 쿼리를 UNION으로 실행하기
SELECT name, job_title from celeb WHERE job_title LIKE '%가수%' UNION SELECT name, age from celeb WHERE birthday BETWEEN '1980-01-01' AND '1989-12-31';
직업이 '가수'를 포함하는 데이터를 검색하는 쿼리와 직업이 '탤런트'를 포함하는 데이터를 검색하는 쿼리를 중복을 제거하여 합쳐서 실행하기
SELECT * FROM celeb WHERE job_title LIKE '%가수%' UNION SELECT * FROM celeb WHERE job_title LIKE '%탤런트%';
성이 이씨인 데이터를 검색하는 쿼리와 1970년대생을 검색하는 쿼리를 중복을 포함하여 합쳐서 실행하기
SELECT name, birthday FROM celeb WHERE name LIKE '이%' UNION ALL SELECT name, birthday FROM celeb WHERE birthday BETWEEN '1970-01-01' AND '1979-12-31';
두 개 이상의 테이블을 결합하는 것(수평 결합)
두 개의 테이블에서 공통된 요소들을 통해 결합하는 조인방식(교집합)
SELECT column1, column2 FROM tableA INNER JOIN tableB ON tableA.column = tableB.column WHERE condition;
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;
두 개의 테이블에서 공통영역을 포함해 왼쪽 테이블의 다른 데이터를 포함하는 조인방식
SELECT column1, column2 FROM tableA LEFT JOIN tableB ON tableA.column = tableB.column WHERE condition;
snl_show 에 호스트로 출연한 celeb 을 기준으로
celeb 테이블과 snl_show 테이블을 LEFT JOINSELECT 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 FROM tableA RIGHT JOIN tableB ON tableA.column = tableB.column WHERE condition;
snl_show 에 호스트로 출연한 celeb 을 기준으로
celeb 테이블과 snl_show 테이블을 RIGHT JOINSELECT celeb.id, celeb.name, snl_show.id, snl_show.host FROM celeb RIGHT JOIN snl_show ON celeb.name = snl_show.host;
두개의 테이블에서 공통영역을 포함하여 양쪽 테이블의 다른영역을 모두 포함하는 조인방식(합집합)
SELECT column1, column2 FROM tableA FULL OUTER JOIN tableB ON tableA.column = tableB.column WHERE condition;
mySQL에서는 FULL JOIN을 지원하지 않고 있다.
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
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
SELECT column1, column2 FROM tableA, tableB WHERE condition;
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 = '엔터테이먼트') 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';
snl_show 에 출연한 celeb 테이블의 연예인 중, 영화배우나 텔런트가 아닌 연예인의 아이디, 이름, 직업, 시즌, 에피소드 정보를 검색
SELECT celeb.id, name, job_title, season, episode FROM celeb, snl_show WHERE name=host AND NOT(job_title LIKE '%영화배우%' OR job_title LIKE'%탤런트%');
snl_show 에 출연한 celeb 중, 2020년 9월 15일 이후에 출연했거나
소속사 이름이 ‘엔터테이먼트’ 로 끝나지 않으면서 영화배우나 개그맨이 아닌 연예인의 celeb 아이디, 이름, 직업, 소속사를 검색SELECT celeb.id, name, job_title, agency FROM snl_show,celeb WHERE name=host AND (broadcast_date>'2020-09-15' OR NOT agency LIKE '%엔터테이먼트') AND NOT (job_title LIKE '%영화배우%' OR job_title LIke '%개그맨%');
▷ 내일 학습 계획: SQL 강의(기초12~14)