MySQL

14. JOIN(두 개 이상의 테이블을 참조)

newness 2022. 5. 3. 17:50

관계가 있는 두 개 이상의 테이블을 연결하여 데이터를 조회하는 작업을 진행할 때 JOIN을 사용함

 

INNER JOIN(내부조인)

 - INNER JOIN 또는 JOIN

SELECT  TABLE1.userid, COUNT(*)
    FROM TABLE1
        INNER JOIN TABLE2 ON TABLE1.userid = TABLE2.userid
    WHERE ~ ;

 

 

참조

 - GROUP BY를 사용하거나, DISTINCT 를 이용하여 중복값을 제거할 수 있음

SELECT  DISTINCT TABLE1.userid
    FROM TABLE1  
        INNER JOIN TABLE2 ON TABLE1.userid = TABLE2.userid
    WHERE ~ ;

 

 

EXISTS

 - JOIN을 사용하지 않고 WEHRE 절에 EXISTS문을 사용하여 동일한 결과를 낼 수 있음

SELECT TABLE1.userid
    FROM TABLE1
    WHERE EXISTS (SELECT * FROM TABLE2 WHERE TABLE1.userid = TABLE2.userid ~ ) ;

 

 

OUTTER JOIN(외부 조인)

 - INNER JOIN과 다르게, JOIN 조건에 해당하지 않는 행까지 포함시켜 조회

 

  • LEFT (OUTER) JOIN
  • RIGHT (OUTER) JOIN
SELECT  TABLE1.userid, COUNT(*)
    FROM TABLE1
        LEFT OUTER JOIN TABLE2 ON TABLE1.userid = TABLE2.userid
    WHERE ~ ;
SELECT  TABLE1.userid, COUNT(*)
    FROM TABLE1
        RIGHT OUTER JOIN TABLE2 ON TABLE1.userid = TABLE2.userid
    WHERE ~ ;

 

 

CROSS JOIN(상호 조인)

 - 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인시키는 기능

 - 두 테이블의 행의 수를 곱한 만큼의 행이 출력됨

SELECT TABLE1.userid, TABLE2.itemname
    FROM TABLE2
        CROSS JOIN TABLE2

 

- 아래와 같이 FROM절에 테이블1, 테이블2 를 입력하여 동일한 결과를 출력할 수 있음

SELECT TABLE1.userid, TABLE2.itemname
    FROM TABLE1, TABLE2

 

 

UNION / UNION ALL

 - 두 쿼리의 결과를 합칠 때

SELECT id, name FROM TABLE1 ~
UNION
SELECT id, name FROM TABLE2 ~ ;

 - 두 쿼리의 결과를 합침

 - 단, 열의 수가 같아야 함

 - UNION ALL과 차이는 중복되는 행을 제거함

 - UNION ALL 보다 속도가 느림

 

SELECT id, name FROM TABLE1 WHERE ~
UNION ALL
SELECT id, name FROM TABLE1 WHERE ~ ;

 - 두 쿼리의 결과를 합침

 

 

IN / NOT IN

 - 조건절이나 제어문에서 사용하며 IN은 포함되는 값, NOT IN은 포함되지 않는 값을 정할 때 사용함

SELECT * FROM TABLE1 WHERE team IN ('레알마드리드', 'FC바르셀로나') ;
SELECT * FROM TABLE1 WHERE team NOT IN ('레알마드리드', 'FC바르셀로나') ;