Meiren

[SQL 문법]JOIN() 총정리! 쉽게 한번에 끝내자. (INNER JOIN, OUTER JOIN, LEFT JOIN, RIGHT JOIN, CROSS JOIN, SELF JOIN) 본문

SQL

[SQL 문법]JOIN() 총정리! 쉽게 한번에 끝내자. (INNER JOIN, OUTER JOIN, LEFT JOIN, RIGHT JOIN, CROSS JOIN, SELF JOIN)

meiren 2023. 1. 15. 05:10
목차
1. SUMMARY
2. INNER JOIN
3. OUTER JOIN
     3-1. LEFT JOIN
     3-2. RIGHT JOIN
     3-3. FULL OUTER JOIN
     3-4. upgrade OUTER JOIN
4. SELF JOIN
5. CROSS JOIN

 

1. SUMMARY

join? 두 개의 테이블을 서로 붂어 하나의 결과를 만들어 내는 것

  • INNER JOIN (내부조인) : 두 테이블을 조인할 때, 두 테이블에 모두 지정한 열의 데이터가 있어야 함
  • OUTER JOIN (외부 조인) : 두 테이블을 조인할 때, 1개의 테이블에만 데이터가 있어도 결과가 나옴
  • SELF JOIN (자체 조인) : 자신이 자신과 조인함, 1개의 테이블 사용
  • CROSS JOIN (상호 조인) : 한쪽 테이블의 모든 행과 다른 쪽의 모든 행을 조인

* join 조건이 여러개인 경우, on절에 AND로 추가해주면 됨

ON( a.aa = b.aa AND b.cc IN (10, 20, 30))

 

 

2. INNER JOIN

기준 테이블과 조인 테이블 모두 데이터가 존재해야 조회됨

가장 일반적인 조인, 보통 조인이라 하면 '내부 조인'을 말함

 

- 코드에서 inner join > join 만 써도 됨

SELECT <열 목록>
FROM <첫 번쨰 테이블>
	INENR JOIN <두 번째 테이블>
    ON <조인될 조건>
[WHERE 검색 조건]

예제, 2개의 테이블 조인

SELECT O.orderID, c.customerName
FROM Orders as o
	INNER JOIN Customers as c
		on o.customerID = c.customerID

 

 

 

3. OUTER JOIN

기준 테이블에만 데이터가 존재하면 조회됨 (데이터가 없는 경우 null 표시됨)

3-1. LEFT JOIN

오른쪽 테이블에 일치하는 항목이 없더라도, 왼쪽 테이블의 모든 레코드 반환

반대로 오른쪽 테이블 데이터 중, 왼쪽 테이블에 없는 경우는 삭제/미포함됨

 

left (outer) join syntac

SELECT coulumn_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name

 

예제, 고객 테이블과 주문 테이블을 활용해 모든 고객그들이 가질 수 있는 모든 주문번호

SELECT c.customerName, o.orderID
FROM Customes as c
LEFT JOIN Orders as o
	ON c.customerID = o.customerID
ORDER BY c.customerName

 

 

3-2. RIGHT JOIN

https://www.w3schools.com/sql/sql_join_right.asp

 

RIGHT OUTER JOIN syntax

SELECT coulumn_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name

 

 

예제, 모든 직원과 직원이 발주한 모든 주문

- from o right join e

- table2(right) == e

SELECT o.orderID, e.lastName, e.fitstName
FROM Orders as o
RIGHT JOIN Employees as e ON o.employeeID = e.employeeID
ORDER BY o.orderID

 

 

3-3. FULL OUTER JOIN

 

FULL JOIN == FULL OUTER JOIN

SELECT coulumn_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name = table2.column_name
WHERE condition

예제, 모든 고객과 모든 주문

SELECT c.customerName, o.orderID
FROM Customers as c
FULL OUER JOINOrders as o ON c.customerID = o.customerID
ORDER BY c.customerName

 

 

3-4. upgrade OUTER JOIN

[LEFT] A - B == A ∩ B의 여집합

SELECT *
FROM A a
	LEFT JOIN B b
    ON a.KEY = b.KEY
WHERE b.KEY IS NULL

[RIGHT] B - A == B ∩ A의 여집합

SELECT *
FROM B b
	RIGHT JOIN A a
    ON a.KEY = b.KEY
WHERE a.KEY IS NULL

[OUTER] (A ∪ B) - (A ∩ B)

SELECT *
FROM A a
	FULL OUTER JOIN B b
    ON a.KEY = b.KEY
WHERE a.KEY IS NULL
	OR b.KEY IS NULL

 

 

 

 

4. SELF JOIN

의미

- 하나의 테이블과 동일한 테이블을 조인함. 자기자신과 조인함

 

syntax

- T1, T2는 하나의 동일한 테이블에 대한 2개의 이름(별칭)

SELECT column_name(s)
FROM table1 T1, table1 T2
WHERE condition

같은 도시에 있는 고객 (근데 언제 왜 필요한건지 잘 모르겠음)

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

 

 

 

5. CROSS JOIN

 

기준 테이블의 행을 조인 테이블 행만큼 증가시킨다.

즉, 두 테이블의 행 개수를 곱한 개수??

두 테이블간 일치 여부와 무관하게 행이 나열됨

 

모든 행에 대한 결합이 발생하여 ON 구문을 쓸 수 없다.

현재 CUBE / GROUPPING으로 대체되어 잘 스이지 않음

 

 

syntax

SELECT column_name(s)
FROM table1
CROSS JOIN table2

where절을 통해, cross join을 inner join과 동일하게 바꿀 수 있다

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
CROSS JOIN Orders
WHERE Customers.CustomerID=Orders.CustomerID;

 

 

 

 


https://www.w3schools.com/sql/sql_join_self.asp

 

SQL Self Join

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

https://gent.tistory.com/376

 

[MSSQL] 조인 방법 쉽게 정리 (INNER JOIN, OUTER JOIN)

SQL Server에서는 조인을 할 때에는 안시 조인(ANSI JOIN) 사용을 권장한다. 아래에는 조인(INNER JOIN), 아우터 조인(LEFT OUTER JOIN, RIGHT OUTER JOIN), 크로스 조인(CORSS JOIN) 사용법을 정리하였다. INNER JOIN과 LEFT

gent.tistory.com

https://hongong.hanbit.co.kr/sql-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-joininner-outer-cross-self-join/

 

SQL 기본 문법: JOIN(INNER, OUTER, CROSS, SELF JOIN)

조인은 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것을 말한다. INNER JOIN(내부 조인)은 두 테이블을 조인할 때, 두 테이블에 모두 지정한 열의 데이터가 있어야 한다.OUTER JOIN(외부

hongong.hanbit.co.kr

https://pyoungt.tistory.com/23

 

MSSQL JOIN 정리 : INNER JOIN, OUTER JOIN, CROSS JOIN

일반적으로 관계형 데이터베이스란 키(Key)와 값(Value)들의 관계를 테이블화 시킨 간단한 원칙의 데이터베이스를 말한다. 이때 A 테이블과 B 테이블에 있는 정보들을 함께 출력하고 싶다면 어떻게

pyoungt.tistory.com