1. INNER JOIN
두 테이블의 교집합을 구한다.
ON절의 조건이 일치하는 결과만 출력된다.
SELECT *
FROM TableA A
INNER JOIN TableB B ON A.key = B.key
> INNER JOIN 뒤에는 어떤 테이블과 JOIN할 것인지 작성한다.
> ON 뒤에는 연결되는 테이블의 컬럼을 작성한다.
구문 | 설명 |
ON A.key = B.key | A의 key(컬럼명)와 B의 key(컬럼명)로 연결한다. |
>SELECT 뒤에는 어떤 테이블의 컬럼을 출력할지 적어야 한다.
구문 | 설명 |
SELECT * | A와 B 두 테이블의 전체 컬럼이 출력 |
SELECT A.* | A의 전체 컬럼이 출력 |
SELECT B.* | B의 전체 컬럼이 출력 |
[직접 해보기]
Orderdetails
OrderDetailID | OrderID | ProductID | Quantity |
1 | 10248 | 11 | 12 |
2 | 10248 | 42 | 10 |
3 | 10248 | 72 | 5 |
4 | 10249 | 14 | 9 |
5 | 10249 | 51 | 40 |
6 | 10250 | 41 | 10 |
7 | 10250 | 51 | 35 |
8 | 10250 | 65 | 15 |
: : |
: : |
: : |
: : |
Orders
OrderID | CustomerID | EmployeeID | OrderDate | ShipperID |
10248 | 90 | 5 | 1996-07-04 | 3 |
10249 | 81 | 6 | 1996-07-05 | 1 |
10250 | 34 | 4 | 1996-07-08 | 2 |
10251 | 84 | 3 | 1996-07-08 | 1 |
10252 | 76 | 4 | 1996-07-09 | 2 |
10253 | 34 | 3 | 1996-07-10 | 2 |
: : |
: : |
: : |
: : |
: : |
[ Orderdetails 테이블과 Orders 테이블의 INNER JOIN ]
어떤 고객이 어떤 물건을 샀는지 구하기
1) 전체 컬럼을 SELECT
SELECT *
FROM orderdetails
INNER JOIN orders ON orders.orderID = orderdetails.orderID
출력결과
OrderDetailID | OrderID | ProductID | Quantity | CustomerID | EmployeeID | OrderDate | ShipperID |
1 | 10248 | 11 | 12 | 90 | 5 | 1996-07-04 | 3 |
2 | 10248 | 42 | 10 | 90 | 5 | 1996-07-04 | 3 |
3 | 10248 | 72 | 5 | 90 | 5 | 1996-07-04 | 3 |
4 | 10249 | 14 | 9 | 81 | 6 | 1996-07-05 | 1 |
5 | 10249 | 51 | 40 | 81 | 6 | 1996-07-05 | 1 |
6 | 10250 | 41 | 10 | 34 | 4 | 1996-07-08 | 2 |
: : |
: : |
: : |
: : |
: : |
: : |
: : |
: : |
> OrderID로 두 테이블을 INNER JOIN하였다.
> 왼쪽에는 Orderdetails테이블의 컬럼이,
오른쪽에는 Orders테이블의 컬럼이 출력된다.
(INNER JOIN 뒤에 작성한 테이블이 오른쪽에 위치한다.)
2) CustomerID, OrderID, ProductID 컬럼을 SELECT
SELECT A.CustomerID, B.OrderID, B.ProductID
FROM orderdetails B
INNER JOIN orders A ON A.orderID = B.orderID
출력결과
CustomerID | OrderID | ProductID |
90 | 10248 | 11 |
90 | 10248 | 42 |
90 | 10248 | 72 |
81 | 10249 | 14 |
: : |
: : |
: : |
> SELECT절에 orders 테이블의 컬럼을 먼저 작성하였기 때문에
orders 테이블의 컬럼이 왼쪽에 위치한다.
참고) INNER JOIN 관련 문제
2023.05.19 - [Test/SQL] - Symmetric Pairs (INNER JOIN, GROUP BY, HAVING, ORDER BY)
2023.05.16 - [Test/SQL] - Average Population of Each Continent (INNER JOIN, GROUP BY, AVG, FLOOR)
2023.05.16 - [Test/SQL] - African Cities (INNER JOIN, WHERE)
2. SELF JOIN
자신의 테이블과 JOIN한다.
AS를 사용하여 테이블을 구분하여 작성한다.
SELECT *
FROM TableC AS A
INNER JOIN TableC AS B ON A.key = B.key
> SELF JOIN과 관련된 문제를 만들기가 어려워 해커랭크에서 풀었던 문제의 링크를 넣었다.
참고) SELF JOIN 관련 문제
2023.05.16 - [Test/SQL] - Rising Temperature (DATE_ADD, SELF JOIN, WHERE)
'MYSQL' 카테고리의 다른 글
OUTER JOIN (LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN) (0) | 2023.05.23 |
---|---|
UNION, UNION ALL (0) | 2023.05.23 |
MAX, MIN, SUM, AVG, COUNT 사용하기 (GROUP BY, HAVING) (0) | 2023.05.19 |
그룹화하기 (GROUP BY, COUNT(*)) (0) | 2023.05.19 |
반올림, 올림, 버림 (ROUND, CEILING, FLOOR, TRUNCATE) (0) | 2023.05.17 |