[SQL] #3 SQL JOIN(INNER, LEFT, RIGHT, FULL, CROSS, SELF)

1 분 소요

[SQL] #3 SQL JOIN

📌 (INNER) JOIN

image

  • 교집합
  • Table 2에 일치하는 Table 1의 모든 행을 반환

  • 형식 :
    SELECT column_name(s)
    FROM table1
    INNER JOIN table2
    ON table1.column_name = table2.column_name;
    
  • 예시 :
    SELECT Orders.OrderID, Customers.CustomerName
    FROM Orders
    INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
    
  • JOIN Three Tables
    SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName
    FROM ((Orders
    INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID)
    INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID);
    

📌 LEFT (OUTER) JOIN

image

  • table 1의 모든 행을 반환하고, table 2에서 일치하는 모든 행을 반환
  • 형식
    SELECT column_name(s)
    FROM table1
    LEFT JOIN table2
    ON table1.column_name = table2.column_name;
    

📌 RIGHT (OUTER) JOIN

image

  • table 2의 모든 행을 반환하고, table 1에서 일치하는 모든 행을 반환
  • 형식
    SELECT column_name(s)
    FROM table1
    RIGHT JOIN table2
    ON table1.column_name = table2.column_name;
    

📌 FULL (OUTER) JOIN

image

  • 합칩합
  • Table 2와 일치하는 Table 1의 행을 결합해 두 테이블의 모든 행을 반환
  • 형식 :
    SELECT column_name(s)
    FROM table1
    FULL OUTER JOIN table2
    ON table1.column_name = table2.column_name
    WHERE condition; 
    

📌 Cross JOIN

  • 한 쪽 테이블의 모든 행과 다른 테이블의 모든 행을 조인
  • 조인한 테이블의 행의 개수 = 두 테이블의 행의 개수의 곱
    SELECT column_name(s)
    FROM table1
    CROSS JOIN table2
    
  • CROSS JOIN은 상호 모든 행에 대한 결합이므로, ON 구문은 사용할 수 없음
  • 두 테이블의 행의 개수에 따라 시스템이 다운되거나 디스크 용량이 꽉 차 버릴 수 있으니 주의 필요

📌 Self JOIN

  • 자기 자신과 자기 자신이 조인 image [Customer table]
  • 위의 table에서 spouse_id 은 배우자의 customer_id 를 담고 있다.
  • 테이블에서 배우자의 firstname, lastname을 바로 알고 싶다면?
    SELECT cust.customer_id, cust.firstname, cust.lastname,cust.birthdate,cust.spouse_id,spouse.firstname AS spouse_firstname,
    spouse.lastname AS spouse_lastname
    FROM customer AS cust
    INNER JOIN customer AS spouse
    ON cust.spouse_id = spouse.customer_id;
    

    image

  • spouse_first, spouse_lastname이 추가된 것을 볼 수 있다.
  • 주의) self join은 테이블의 이름을 꼭 지정해야 한다.(이유 : 똑같은 데이터가 총 2개의 테이블에 저장되어 있는 상태에서 SQL은 특정 데이터를 어느 테이블에서 가져와야 할지 모르기 때문 SQL자체에는 self join 개념이 없음)
  • 위의 예시는 INNER JOIN을 사용했으나 원하는 결과에 따라 LEFT, RIGHT, FULL CROSS 모두 상관 없음


참고
https://www.w3schools.com/sql/
SELF JOIN 설명

댓글남기기