[SQL] UNION / JOIN

jane05·2023년 11월 4일
0
post-thumbnail

1️⃣ UNION

  • 여러 개의 SQL문을 합쳐서 하나의 SQL문으로 만들어주늕 방법 (주의. 컬럼의 개수가 같아야 함)
  • UNION: 중복된 값을 제거하여 알려준다.
  • UNION ALL: 중복된 값도 모두 보여준다.

1. 성별이 여자인 데이터를 검색하는 쿼리와 소속사가 YG엔터테이먼트인 데이터를 검색하는 쿼리를 UNION ALL 로 실행

select name, sex, agency from celeb where sex='F'
union all
select name, sex, agency from celeb where agency='YG엔터테이먼트';

2. 성별이 여자인 데이터를 검색하는 쿼리와 소속사가 YG엔터테이먼트인 데이터를 검색하는 쿼리를 UNION 으로 실행

select name, sex, agency from celeb where sex='F'
union
select name, sex, agency from celeb where agency='YG엔터테이먼트';

2️⃣ JOIN

  • 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) 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 에서는 FULL 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

5) SELF JOIN

  • 예제 1) celeb 테이블의 연예인 중, snl_show 에 host 로 출연했고 소속사가 안테나인 사람의 이름과 직업을 검색

    select celeb.name, celeb.job_title
    from celeb, snl_show
    where celeb.name = snl_show.host AND celeb.agency= '안테나';
  • 예제 2)
    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 agnecy != 'YG엔터테이먼트'));

  • 예제 3)
    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개의 댓글