Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- bottleneck
- 정규화
- resnet
- 인접리스트
- outer join
- 데이터모델링
- BFS
- mobilenet
- dfs
- 엔터티
- SQLD 후기
- SQL
- dp
- 백준
- Inductive Bias
- pytorch
- skip connection
- 인접행렬
- 1x1 Convolution
- get_dummies()
- SQLD
- 그래프
- CROSS JOIN
- 식별자
- 연산량 감소
- feature map
- Depthwise Separable Convolution
- Two Pointer
- numpy
- depthwise convolution
Archives
- Today
- Total
SJ_Koding
SQLD 대비 (9) - JOIN 본문
SELECT *
FROM Employees
CROSS JOIN Departments;
SELECT *
FROM Employees, Departments;
시험이 코앞으로 다가왔다. 노랭이책 2-1까지 2회독을 진행했다. 이 블로그에 정리해둔 개념은 전반적인 틀을 잡기 위함이며 절대 이 내용으로만 합격할 수 없음을 깨달았다. 노랭이책이 짱이다.
이전 글과 이어지는 글입니다. 해당 정리글은 아래의 유튜브 영상을 참고하여 만들었습니다. 문제 시 삭제하겠습니다.
빨간색 형광펜은 강의에서 강조한 부분, 노란색 형광펜은 추가 서치로 내용을 '직접' 보강한 부분입니다.
Join이란?
- 두 개 이상의 테이블을 결합하여 데이터를 출력하는 명령어
- 관계형 데이터베이스의 핵심적인 기능
- PF와 FK의 값을 기반으로 join이 성립됨
- 조인은 여러 테이블을 하나의 테이블로 만드는 과정
INNER JOIN | 동일한 데이터의 값을 기준으로 실행되는 JOIN |
NATURAL JOIN | 양 테이블 간 동일한 컬럼명을 가지고 자동으로 매칭되는 INNER JOIN |
CROSS JOIN | JOIN하는 테이블간 조인 조건이 없을 때 실행되는 JOIN |
OUTER JOIN | INNER JOIN과 같은 상태에서 기준이 되는 테이블은 다른 쪽에 같은 값이 없어도 실행되어 출력되는 JOIN |
CROSS JOIN
- 두 개의 테이블 간의 매칭되는 모든 데이터 조합을 출력
- 카티션곱 (CARTESIAN PRODUCT)과 동의어
- JOIN 조건을 따로 정의하지 않는다.
SELECT *
FROM major, professional
SELECT *
FROM major CROSS JOIN professor
INNER JOIN
- 두 개의 테이블 간에 매칭되는 모든 데이터 조합 중 특정 컬럼끼리 값이 같은 것만 출력.
- 가장 보편적인 JOIN 방법
- INNER는 생략 가능
SELECT *
FROM major m INNER JOIN professor p
ON m.major_id = p.bl_major_id
NATURAL JOIN
- 두 테이블 간에 동일한 이름을 갖는 모든 컬럼들에 대해 자동으로 EQUI JOIN을 실행한다.
- WHERE 절에서 JOIN 조건을 사용하거나, ON절 또는 USING절을 사용할 수 없다.
SELECT *
FROM major m NATURAL JOIN professor p
OUTER JOIN
- INNER JOIN과 다르게 기준이 되는 한쪽은 매칭되는 값이 없어도 출력 된다.
- 동일한 값이 없다면 한쪽은 NULL이 출력 된다.
CREATE TABLE major_outer AS SELECT * FROM major WHERE MAJOR_PRFS_CNT > 6
SELECT *
FROM professor p LEFT OUTER JOIN major_outer m
ON m.major_id = p.bl_major_id
SELECT *
FROM professor p, major_outer m
WHERE m.major_id = p.bl_major_id
GPT 예시
Employees 테이블 예시:
EmployeeID | Name | DepartmentID |
---|---|---|
1 | Alice | 101 |
2 | Bob | 102 |
3 | Charlie | 103 |
Departments 테이블 예시:
DepartmentID | DepartmentName |
---|---|
101 | Human Resources |
102 | Finance |
104 | IT |
이제 각 조인 타입에 따른 결과를 살펴보겠습니다.
INNER JOIN
SELECT Employees.Name, Departments.DepartmentName
FROM Employees
INNER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;
NAME | DepartmentName |
Alice | Human Resources |
Bob | Finance |
CROSS JOIN
SELECT *
FROM Employees
CROSS JOIN Departments;
SELECT *
FROM Employees, Departments;
- 결과:
Employee ID Name DepartmentID DepartmentName 1 Alice 101 Human Resources 1 Alice 101 Finance 1 Alice 101 IT 2 Bob 102 Human Resources 2 Bob 102 Finance 2 Bob 102 IT 3 Charlie 103 Human Resources 3 Charlie 103 Finance 3 Charlie 103 IT
NATURAL JOIN
SELECT *
FROM Employees
NATURAL JOIN Departments;
결과:
Department ID | Name | Department Name |
101 | Alice | Human Resources |
102 | Bob | Finance |
OUTER JOIN
LEFT OUTER JOIN
SELECT Employees.Name, Departments.DepartmentName
FROM Employees
LEFT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;
-- ORACLE LEFT OUTER JOIN
SELECT *
FROM Employees, Departments
WHERE Employees.DepartmentID = Departments.DepartmentID(+);
Name | Department Name |
Alice | Human Resources |
Bob | Finance |
Charlie | NULL |
RIGHT OUTER JOIN
SELECT Employees.Name, Departments.DepartmentName
FROM Employees
RIGHT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;
-- ORACLE RIGHT OUTER JOIN
SELECT *
FROM Employees, Departments
WHERE Employees.DepartmentID(+) = Departments.DepartmentID;
Name | Department Name |
Alice | Human Resources |
Bob | Finance |
NULL | IT |
FULL OUTER JOIN 예시 결과:
SELECT Employees.Name, Departments.DepartmentName
FROM Employees
FULL OUTER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;
Name | Department Name |
Alice | Human Resources |
Bob | Finance |
Charlie | NULL |
NULL | IT |
ON절
- ON절은 동일하지 않은 이름을 가진 컬럼끼리도 JOIN조건에 사용가능하도록 한다.
- 물론, 동일한 이름도 가능하다.
- WHERE절과 혼용하여 사용도 가능하다.
-- 예시
SELECT Employees.Name, Departments.DepartmentName
FROM Employees
JOIN Departments ON Employees.EmpDeptID = Departments.DeptID;
USING절
- USING절에 두 테이블에 존재하는 공통된 컬럼명을 사용
- 데이터 유형도 동일해야한다.
데이터 증가
- 조인을 잘못하면 데이터가 많아진다.
- 중복된 데이터가 있을 때 JOIN은 신중하게 해야 한다.
SELECT Employees.Name, Departments.DepartmentName
FROM Employees
JOIN Departments USING (DepartmentID);
'SQL > SQLD' 카테고리의 다른 글
SQLD 대비 (11) - 계층형 SQL, 집계함수 (1) | 2023.11.17 |
---|---|
SQLD 대비 (10) - 서브쿼리(Sub Query), 비등가 조인, 집합연산자 (0) | 2023.11.16 |
SQLD 대비 (8) - SQL 문법 및 라이브러리_3 (0) | 2023.11.14 |
SQLD 대비 (7) - SQL 문법 및 라이브러리_2 (0) | 2023.11.13 |
SQLD 대비 (6) - SQL 문법 및 라이브러리_1 (1) | 2023.11.13 |