zero-base 취업스쿨/스터디노트/6주차/ SQL #18

Sea Yoon·2023년 10월 16일

SQL

목록 보기
3/7
post-thumbnail

1. UNION

  • 여러 개의 SQL문을 합쳐서 하나의 SQL문으로 만들어주는 방법
    (주의, 칼럼의 개수는 같아야함)

  • test1 = [1, 2, 3]
    test2 = [5, 6, 3]

  • UNION: 중복된 값을 제거하여 보여줌

select * from test1
union 
select * from test2

  • UNION ALL: 중복된 값도 모두 보여줌
select * from test1
union all
select * from test2

2. JOIN

  • 새로운 테이블 추가(환경설정)
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
);
  • JOIN 을 다루기위해 테이블은 아래 snl_show 테이블과 celeb 테이블을 이용하겠다.

  • snl_show 테이블

  • celeb 테이블

2-1. INNER JOIN

  • 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;

2-2. LEFT JOIN

  • 두개의 테이블에서 공통영역을 포함해 왼족 테이블의 다른 데이터를 포함하는 조인방식
  • 아래의 예제의 경ㅇ left table(celeb)의 정보와 inner join의 결과를 함께 가져온다.
select celeb.id, celeb.name, snl_show.id, snl_show.host
from celeb
left join snl_show
on celeb.name = snl_show.host;

2-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;

2-4. FULL OUTER JOIN

  • 두개의 테이블에서 공통영역을 포함해 양쪽 테이블의 다른 영역을 모두 포함하는 조인방식

  • 현재 MySQL에서는 이 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

2-5. SELF JOIN

  • join 기법 중 가장 많이 쓰임

  • 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에 호스트로 출연했고 소속사가 안테나인 사람의 이름과 직업을 검색
select celeb.id, celeb.name, snl_show.id, snl_show.host
from celeb, snl_show
where celeb.name = snl_show.host;

  • snl_show에 출연한 celeb 중, 에피소드 7,9,10 중에 출연했거나 소속사가 YG로 시작하고 뒤에 6글자로 끝나는 사람 중 작년 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';

profile
우직한 거북이

0개의 댓글