본문 바로가기

SQL

MySQL Join 문법정리

https://www.w3schools.com/MySQL/mysql_join.asp

1. INNER JOIN : 두 테이블 모두에만 존재하는 값을 리턴

2. LEFT JOIN : 좌측 테이블의 모든 값과 우측 테이블과 일치하는 값을 리턴

3. RIGHT JOIN : 우측 테이블의 모든 값과 좌측 테이블과 일치하는 값을 리턴

4. CROSSJOIN : 두 테이블의 값을 모두 리턴

 

  • Example : 

(1) INNER JOIN 

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;

3단계 join도 가능하다. INNER JOIN문 2개로 작성

 

(2) LEFT JOIN

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders ON Customers.CustomerName = Orders.CustomerID;

→ Right Table(Orders)와 match가 없어도 Left Table(Customers)의 모든 기록을 보여줌. 

 

(3) RIGHT JOIN

SELECT Orders.OrderID, Orders.OrderDate, Employees.FirstName
FROM Orders # table1
RIGHT JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID # table2
ORDER BY Orders.OrderID;

→ 여기선 주가 되는게 table2, RIGHT JOIN 뒤에 나오는 table! 

→ Left Table(Orders)에 match 되는 값이 없어도 Right Table(Employee)의 모든 값을 리턴함.

 

(4) CROSS JOIN

SELECT Orders.OrderID, Orders.OrderDate, Employees.FirstName
FROM Orders # table1
RIGHT JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID # table2
ORDER BY Orders.OrderID;

만약 Customers와 Orders 기준 열 값이 일치하지 않는 관측치가 있어도 모두 리턴될 것. 

 

(5) SELF JOIN : 자기자신과 join

SELECT A.CustomerName AS CustomerName1, B.CustomerName As CustomerName2, A.City
FROM Customers AS A, Customers AS B
WHERE A.CustomerID <> B.CustomerID
AND A.City = B.City;

→ 같은 도시에서 온 고객들을 매칭시키는 코드 (동일인이 아닌 조건문 포함됨)