[SQL] Join

MJ·2024년 2월 6일

SQL

목록 보기
8/23

JOIN

기본 문법에서 JOIN의 종류만 달라짐
select 절에서 컬럼 앞에 테이블 명을 명시해줘야 함

SELECT table1.col1, table2.col2
FROM table1
INNER JOIN table2
ON table1.column = table2.column
WHERE condition;
  • INNER JOIN : 두 개의 테이블에서 공통된 요소들을 통해 결합하는 조인방식

  • LEFT JOIN : 두 개의 테이블에서 공통영역을 포함해 왼쪽 테이블의 다른 데이터를 포함하는 조인방식

  • RIGHT JOIN : 두 개의 테이블에서 공통영역을 포함해 오른쪽 테이블의 다른 데이터를 포함하는 조인방식

  • OUTER JOIN : 두 개의 테이블에서 공통영역을 포함해 양쪽 테이블의 다른 데이터를 모두 포함하는 조인방식
    FULL OUTER JOIN 은 MYSQL에서는 사용불가함 -> LEFT JOIN과 RIGHT JOIN을 한 후 UNION을 사용

    EX) celeb의 이름과 snl_show 호스트의 이름이 같은 경우를 기준으로 아우터조인을 할 때 full outer join 대신 left join, right join, union을 쓴 결과

    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;

  • SELF JOIN
    INNER JOIN과 결과가 같음
    WHERE절에서 join에 대한 조건 명시

    SELECT table1.col1, table2.col2
    FROM table1, table2 
    WHERE table1.col1 = table2.col2;

    snl_show에 출연한 celeb 중, 에피소드 7,9,10 중에 출연했거나 소속사가 YG로 시작하고 뒤에 6글자로 끝나는 사람 중 작년 9월 15일 이후에 출연한 사람을 검색

    select celeb.name, snl_show.season, snl_show.episode, snl_show.broadcast_date, celeb.agency
    from celeb, snl_show
    where celeb.name = snl_show.host 
    and (episode IN (7,9,10) or celeb.agency like 'YG______')
    and snl_show.broadcast_date > '2020-09-15';

0개의 댓글