본문 바로가기

Database/MySQL

[MySQL] JOIN (INNER JOIN, OUTER JOIN)

INNER JOIN

  • 교집합과 비슷한 개념
  • 양쪽 테이블에 있는 모두 다 있는 데이터만 출력
  • Join키로 사용되는 컬럼들 간에 이름이 다를 수 있음 > ERD 활용
-- 만들 수 있는 경우의 수를 다 만들어주는 Inner Join

-- Old Ver.
SELECT *
FROM Users, Orders
WHERE Users.Id = Orders.userId

-- New Ver.
SSELECT *
FROM Users
INNER JOIN Orders
On Users.Id = Orders.userId

예시

-- join을 여러번 할 수 있음
SELECT *
FROM Orders
  INNER JOIN Customers ON Orders.CustomerId = Customers.CustomerId
  INNER JOIN Shippers On Orders.ShipperId = Shippers.ShipperId

 

OUTER JOIN 

  • LEFT JOIN (LEFT OUTER JOIN) > 왼쪽 테이블에 데이터가 있고 오른쪽 테이블에 데이터가 없을 때 하는 join 방법
  • RIGHT JOIN (RIGHT OUTER JOIN) > 오른쪽 테이블에 데이터가 있고 왼쪽 테이블에 데이터가 없을 때 하는 join 방법
-- LEFT OUTER JOIN 예시

SELECT *
FROM Users
LEFT JOIN Orders ON Users.Id = Orders.userId

 

FULL OUTER JOIN (LEFT OUTER JOIN & RIGHT OUTER JOIN)

  • FULL OUTER JOIN 개념을 MySQL에서 사용하고 싶을 때 UNION을 사용해서 묶을 수 있음
SELECT *
FROM Customers
LEFT JOIN Orders On Customers.CustomerID = Orders.CustomerID

UNION 

SELECT *
FROM Customers
RIGHT JOIN Orders On Customers.CustomerID = Orders.CustomerID

 

관련 문제

  1. [Algorithm/MySQL] - [해커랭크(HackerRank)] African Cities (MySQL)
  2. [Algorithm/MySQL] - [해커랭크(HackerRank)] Population Census (MySQL)
  3. [Algorithm/MySQL] - [해커랭크(HackerRank)] Average Population of Each Continent (MySQL)
  4. [Algorithm/MySQL] - [LeetCode] 183. Customers Who Never Order (MySQL)
  5. [Algorithm/MySQL] - [LeetCode] 181. Employees Earning More Than Their Managers (MySQL)
  6. [Algorithm/MySQL] - [LeetCode] 197. Rising Temperature (MySQL)

출처

 

[백문이불여일타] 데이터 분석을 위한 중급 SQL - 인프런 | 강의

SQL 중급 이론을 배우고, 실습 문제를 함께 풀어봅니다., 강의소개 SQL 이론 강의는 많은데 문제 풀이와 병행하면서 진짜 실력을 키울 수 있는 강의는 왜 없을까요? 영어 문법 공부를 아무리해도

www.inflearn.com

 

반응형

'Database > MySQL' 카테고리의 다른 글

[MySQL] DML (Data Manipulation Language)  (0) 2021.07.08
[MySQL] UNION, UNION ALL  (0) 2021.07.05
[MySQL] 시간 더하기, 빼기 (DATE_ADD(), DATE_SUB())  (0) 2021.07.05
[MySQL] DATE_FORMAT()  (0) 2021.07.02
[MySQL] NOW() 함수  (0) 2021.03.30