[SQL] #3 SQL JOIN(INNER, LEFT, RIGHT, FULL, CROSS, SELF)
[SQL] #3 SQL JOIN
📌 (INNER) JOIN
- 교집합
-
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
- table 1의 모든 행을 반환하고, table 2에서 일치하는 모든 행을 반환
- 형식
SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name;
📌 RIGHT (OUTER) JOIN
- table 2의 모든 행을 반환하고, table 1에서 일치하는 모든 행을 반환
- 형식
SELECT column_name(s) FROM table1 RIGHT JOIN table2 ON table1.column_name = table2.column_name;
📌 FULL (OUTER) JOIN
- 합칩합
- 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
- 자기 자신과 자기 자신이 조인
[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;
- spouse_first, spouse_lastname이 추가된 것을 볼 수 있다.
- 주의) self join은 테이블의 이름을 꼭 지정해야 한다.(이유 : 똑같은 데이터가 총 2개의 테이블에 저장되어 있는 상태에서 SQL은 특정 데이터를 어느 테이블에서 가져와야 할지 모르기 때문
SQL자체에는 self join 개념이 없음) - 위의 예시는 INNER JOIN을 사용했으나 원하는 결과에 따라 LEFT, RIGHT, FULL CROSS 모두 상관 없음
댓글남기기