두 테이블을 JOIN하면 두 테이블을 연결하여 값을 가져올 수 있다.
JOIN을 하는 이유는 data의 중복을 막기 위해 우리가 테이블을 나누어 놨기 때문이다.
SELECT * FROM Categories C
JOIN Products P
ON C.CategoryID = P.CategoryID
# Categories 테이블과 Products 테이블을 JOIN한다
# CategoryID를 키값으로 가진다.
ambiguous Error
양쪽 테이블에 같은 이름의 Column이 있는 경우에는
어떤 테이블의 data를 가져올 것인지 명시 해줘야 한다.
SELECT C.CategoryID, C.CategoryName, P.ProductName
FROM Categories C
JOIN Products P
ON C.CategoryID = P.CategoryID;
# Categories 테이블과 Products 테이블을 JOIN한다
# Categories에서 CategoryID, CategoryName을 가져오고
# Products에서 ProductName을 가져온다.
SELECT
C.CategoryID, C.CategoryName,
P.ProductName,
O.OrderDate,
D.Quantity
FROM Categories C
JOIN Products P
ON C.CategoryID = P.CategoryID
JOIN OrderDetails D
ON P.ProductID = D.ProductID
JOIN Orders O
ON O.OrderID = D.OrderID;
# Categories테이블에 Products, OrderDetails, Orders 테이블을 Join하였다.
SELECT
C.CategoryName,
MIN(O.OrderDate) AS FirstOrder,
MAX(O.OrderDate) AS LastOrder,
SUM(D.Quantity) AS TotalQuantity
FROM Categories C
JOIN Products P
ON C.CategoryID = P.CategoryID
JOIN OrderDetails D
ON P.ProductID = D.ProductID
JOIN Orders O
ON O.OrderID = D.OrderID
GROUP BY C.CategoryID;
SELECT
E1.EmployeeID, CONCAT_WS(' ', E1.FirstName, E1.LastName) AS Employee,
E2.EmployeeID, CONCAT_WS(' ', E2.FirstName, E2.LastName) AS NextEmployee
FROM Employees E1 JOIN Employees E2
ON E1.EmployeeID + 1 = E2.EmployeeID;
# 하나의 테이블인 Employees 테이블을 E1과 E2로 나누어 JOIN하였다.
# 해당 sql 구분을 통해서 다음에 올 값이 무엇인지 조회할 수 있다.
SELECT
E1.EmployeeID, CONCAT_WS(' ', E1.FirstName, E1.LastName) AS Employee,
E2.EmployeeID, CONCAT_WS(' ', E2.FirstName, E2.LastName) AS NextEmployee
FROM Employees E1
LEFT JOIN Employees E2
ON E1.EmployeeID + 1 = E2.EmployeeID
ORDER BY E1.EmployeeID;
SELECT
E1.LastName, E2.FirstName
FROM Employees E1
CROSS JOIN Employees E2
ORDER BY E1.EmployeeID;
E1의 LastName과 E2의 FirstName의 모든 경우의 수가 조합된 data가 출력됨.