대부분의 데이터베이스는 RDB(Relational Database) 관계형 데이터베이스이다.

즉, 데이터를 중복되는 값없이 효율적으로 저장하기 위해 여러개의 테이블로 나누어 저장한다.

그리고 이 데이터를 사용하기 위해서 테이블들을 다시 연결하여 사용한다.

이때, 사용하는 것이 INNER JOINOUTER JOIN이다.

 

 

INNER JOIN

 

INNER JOIN은 양쪽 테이블에 데이터가 모두 있는 경우에만 출력을 한다.

 

ex1)  Products 테이블의 CategoryID와 Categories 테이블의 CategoryID를 INNER JOIN으로 연결한다.

SELECT *
FROM products AS p
     INNER JOIN categories AS c ON p.categoryid = c.categoryid

 

ProductID, ProductName, SupplierID, CategoryID, Unit, Price   →   Products

    CategoryID, CategoryName, Description   →   Categories

 

ex2)  Products 테이블의 CategoryID와 Categories 테이블의 CategoryID

       Products 테이블의 SupplierID와 Suppliers 테이블의 SupplierID를 INNER JOIN으로 연결한다.

SELECT *
FROM products AS p
     INNER JOIN categories AS c ON p.categoryid = c.categoryid
     INNER JOIN suppliers AS s ON p.supplierid = s.supplierid

 ProductID, ProductName, SupplierID, CategoryID, Unit, Price   →   Products

    CategoryID, CategoryName, Description   →   Categories

    SupplierID, SupplierName, ContactName, Address, City, PostalCode, Country, Phone  →   Suppliers

 

 

 

 

OUTER JOIN

 

▶ LEFT JOIN

: 왼쪽 테이블을 기준으로 join한다.

  왼쪽 테이블에는 데이터가 있고, 오른쪽 테이블에는 데이터가 없는 경우에 출력한다.

 

ex) 한 번도 주문하지 않은 고객 명단 추출하기

SELECT *
FROM customers
     LEFT JOIN orders ON customers.customerid = orders.customerid
WHERE orderid IS NULL

 

▶ RIGHT JOIN

: 오른쪽 테이블을 기준으로 join한다.

  왼쪽 테이블에는 데이터가 없고, 오른쪽 테이블에는 데이터가 있는 경우에 출력한다.

 

※ RIGHT JOIN은 LEFT JOIN과 테이블의 순서만 바뀐 것이므로 자주 사용되지 않는다. 주로 LEFT JOIN을 사용한다.

 

 

 

 

SELF JOIN

 

하나의 테이블만 존재할 때, 테이블 자기 자신을 join할 수 있다.

SELF JOIN은 똑같은 테이블을 join하는 것이기 때문에 AS로 별칭 설정을 해줘야한다.

 

ex) LeetCode 문제 - 181Employees Earning More Than Their Managers

<employee>

id name salary managerID
1 Joe 70000 3
2 Henry 80000 4
3 Sam 60000 NULL
4 Max 90000 NULL

 

SELECT *
FROM employee
     INNER JOIN employee AS manager ON employee.managerid = manager.id

 

위의 코드를 실행하면 다음과 같이 출력된다.

id name salary managerID id name salary managerID
1 Joe 70000 3 3 Sam 60000 null
2 Henry 80000 4 4 Max 90000 null

 

 

 

 


 

 

↘↘↘

[백문이불여일타] 데이터 분석을 위한 중급 SQL

https://www.inflearn.com/course/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D-%EC%A4%91%EA%B8%89-sql

'📖 STUDY > SQL' 카테고리의 다른 글

[SQL] UNION, UNION ALL  (0) 2022.03.15
[SQL] DATE_ADD, DATE_SUB  (0) 2022.03.15
[SQL] CASE_테이블 피봇  (0) 2022.03.08
[SQL] CASE  (0) 2022.03.08
[SQL] GROUP BY, HAVING  (0) 2022.03.08

+ Recent posts