일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 통계
- Python
- WAU
- GTM
- INSERTINTO
- 표본
- categorical
- engagement
- 그로스마케터
- pvalue
- 데이터분석가
- warehouser
- ABTest
- dataanalyst
- data
- 특정컬럼
- sql로데이터
- 리텐션
- 전처리
- 이전행
- 데이터가공
- 그룹
- DAU
- onehot
- 데이터
- 데이터분석
- SQL
- dataanalysis
- row추가
- 코테
- Today
- Total
Meiren
[SQL 문법]JOIN() 총정리! 쉽게 한번에 끝내자. (INNER JOIN, OUTER JOIN, LEFT JOIN, RIGHT JOIN, CROSS JOIN, SELF JOIN) 본문
[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
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
https://pyoungt.tistory.com/23
'SQL' 카테고리의 다른 글
[SQL 문법] INSERT INTO 데이터 삽입 (0) | 2023.01.15 |
---|---|
[SQL 문법] LAG()과 LEAD()의 차이 및 활용 방법(예제 코드) (0) | 2023.01.15 |
[SQL 문법] PARTITION BY(파티션 분할)과 ROW_NUMBER() OVER() 정리 (1) | 2023.01.15 |
[SQL 문법]WITH 문법 및 가상테이블 만들기/mysql (0) | 2023.01.14 |
[5일 벼락치기] 1day, SQL Level 1~ 3.zip (0) | 2023.01.03 |