[SQL] SQL 공부 : SQL문 정리하기 - 기본 난이도(3)
- -
[SQL] SQL 공부 : SQL문 정리하기 - 기본 난이도(3)
∇ 공부 겸 정리 목표
(1)에서 정리한 내용들.
- SELECT , FROM, LIMIT
- WHERE
- ORDER BY
- 중복 제거[DISTINCT / GROUP BY/ 서브쿼리
- 집계 함수 [ SUM, COUNT, AVG 등 ]
- GROUP BY [ 데이터 그룹화 ]
(2) 글에서 정리한 내용들,
- 소수점 처리 [ ROUND / TRUNCATE / CAST, CONVERT ]
- SQL 숫자 연산
- HAVING
- 조건문[ CASE, IF() ]
- UNION, UNION ALL
# 이번 글에서 정리 내용들,
- INNER JOIN
- LEFT JOIN, RIGHT JOIN
-셀프 조인
++ AARRR/ RFM
8.JOIN.
- JOIN은 쉽게 이야기하면, '집합'의 개념과 매우 유사합니다.
테이블 간의 관련 열을 기반으로, 두 개 이상의 테이블에서 행을 결합하는 데 사용됩니다.
- JOIN의 종류에는
[ INNER JOIN, LEFT JOIN(LEFT OUTER JOIN), RIGHT JOIN(RIGHT OUTER JOIN), FULL OUTER JOIN ]
∂ JOIN 절을 사용하기 위한 기본 구문. !
- 테이블 두개를 JOIN으로 연결해주는게 기본적인 형태.
- 테이블 1과 테이블 2는 데이터 구조도 동일하게 하는 것을 권장합니다.
- Bigquery에서는 데이터 구조가 다르면 join시 Error가 발생.
- SELECT column_list : 결과에 포함할 열들을 지정.
- 여러 테이블의 열을 선택 가능
- 테이블 이름이나 별칭을 사용하여 명확히 할 수 있음. (AS 별칭)
- FROM table1 : 첫 번째(기준점) 테이블을 지정.
- [ JOIN TYPE ] : 사용할 JOIN의 유형을 지정
- ex) INNER , LEFT, RIGHT ,FULL OUTER 등....
- JOIN table2 : JOIN할 두번째 테이블을 지정.
- ON join_condition : 두 테이블을 연결한 조건을 지정/
- 보통, 두 테이블의 관련된 열(공통된 열)을 비교하는 조건을 사용.
ex)
- Employees와 Departments는 JOIN된 두 테이블.
- e,d를 별칭으로 사용.
- On e.DepartmentID = d. DepartmentID 는 JOIN 조건.
∇ JOIN 구문을 작성할 때 주의할 점.
1. 테이블 별칭 사용 : 긴 테이블 이름을 짧게 만들어서 쿼리의 가독성을 높일 것!
2. 적절한 JOIN 유형 선택 : 데이터 요구사항에 맞게 적절한 JOIN 유형 선택.
3. JOIN 조건 최적화 :
- 올바른 열을 사용하여 JOIN 조건을 설정.
- 필요한 경우 인덱스를 사용하여 쿼리 성능을 향상시킬 수 있음.
4. 다중 테이블 JOIN : 필요한 경우 두개 이상의 테이블 JOIN 가능.
±실습용 더미 테이블
-- 직원 테이블
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
Name VARCHAR(50),
DepartmentID INT
);
-- 부서 테이블
CREATE TABLE Departments (
DepartmentID INT PRIMARY KEY,
DepartmentName VARCHAR(50)
);
-- 데이터 삽입
INSERT INTO Employees VALUES (1, '김철수', 1), (2, '이영희', 2), (3, '박지성', 1), (4, '최민지', NULL);
INSERT INTO Departments VALUES (1, '영업부'), (2, '개발부'), (3, '인사부');
8-1. INNER JOIN : 두 테이블에서 일치하는 값을 가진 행을 반환합니다.
- 교집합에 해당하는 개념.
- Employees => e // Department => d 로 별칭 지정하고 JOIN
- e의 DepartmentID와 d의 DepartmentID가 동일한 행을 반환.
∇ OUTER JOIN
8-2. LEFT (OUTER) JOIN :
: 기본적으로 왼쪽 테이블의 모든 행과 오른쪽 테이블의 일치하는 행을 반환하는데,
일치하는 항목이 없으면 오른족 테이블의 열에 대해 NULL값이 반환합니다!
* FROM "Tabel"에 초점을 맞춘 JOIN입니다.
+ 왼쪽(첫 번째) 테이블[FROM테이블]의 모든 레코드를 반환하고,
JOIN을 걸은 오른쪽(두번째) 테이블에서 일치하는 레코드가 있으면 그 정보도 함께 반환!!
[ 자식 테이블의 데이터를 모두 보존하면서, 부모 테이블의 데이터를 조회 ]
- 왼쪽 테이블[table1]의 모든 행이 결과 집합에 포함.
- 오른쪽 테이블[table2]에서 일치하는 행이 없는 경우, 결과출력에서 오른쪽 테이블의 열은 NULL값으로 채워집니다.
+ 사용 케이스 예시.
- 주 테이블을 기준으로 관계가 없는 데이터를 포함하여 모든 데이터를 조회할 때 유용.
ex) 모든 직원 정보[Employees]와 해당 부서 정보[Departments]를 부서아이디를 기준으로 조회하되,
부서가 없는 직원도 포함해서 출력해서 같이 보고 싶을 때.
- 최민지는 부서가 없지만, LEFT JOIN으로 걸었기 때문에,
NULL값으로 포함된 것을 확인 할 수 있습니다.
- LEFT JOIN은 왼쪽 테이블의 모든 행을 포함하게 되므로,
대용량 데이터셋에서는 조회 성능에 영향을 줄 수 있어서 주의 요망.
# INNER JOIN과의 차이 : INNER JOIN은 양쪽 테이블이 일치하는 값만 출력하는 반면,
LEFT (OUTER) JOIN은 기준(왼쪽) 테이블의 모든 행을 반환.
8-3. RIGHT (OUTER) JOIN :
- RIGHT JOIN(RIGHT OUTER JOIN)은 LEFT JOIN과 유사하지만 방향이 반대.
[ 부모테이블의 값을 모두 보존하면서 자식 데이터를 조회 ]
- RIGHT JOIN은 오른쪽(두번째)테이블의 모든 레코드를 반환하고,
왼쪽(첫 번째) 테이블에서 일치하는 레코드가 있으면 그 정보도 함께 반환!
# LEFT와 반대로, table2가 중점, table2의 모든 값을 불러옴.
- 오른족 테이블의 모든 행이 결과에 포함.
- FROM으로 연결한 왼쪽 테이블에서 일치하는 행이 없는 경우,
결과에서 왼쪽 테이블의 열은 NULL값으로 채워집니다.
- LEFT와 RIGHT JOIN의 결과와 거의 동일한데,
그 방향성이 FROM으로 연결한 테이블에 있는지
JOIN으로 연결한 테이블에 있는지의 차이!!
8-4 FULL (OUTER) JOIN :
: 모든 데이터 조회를 위한 합집합 개념 .
- LEFT JOIN과 RIGHT JOIN을 결합한 것과 같은 효과!
[합치면서, 양쪽 각 테이블에 서로 존재하지 않는 것들은 NULL값으로 표기]
- 양쪽 테이블의 모든 레코드를 반환, 일치하는 코드가 있으면 연결하고
없으면 NULL 값으로 채워서 반환합니다.
- 연결한 두 개의 테이블의 모든 행이 결과에 포함됩니다.
- 일치하는 행이 없는 경우, 해당 테이블의 열은 NULL값으로 채워짐.
- '최민지'는 부서가 없지만(Employees 테이블에 있음) 결과에 포함.
- '인사부'는 소속 직원이 없지만(Departments 테이블에 있음) 결과에 포함/
++ 두 테이블 간의 모든 관계와 불일치를 한번에 볼 때 유용!!
++ MY SQL이나 ORACLE에서는 지원됨.
- 지원되지 않는 곳에서는 LEFT JOIN과 RIGHT JOIN을 UNION ALL으로 결합하는 방식으로!
∇ CROSS JOIN(교차 결합)
: CROSS JOIN은 간략하게 설명하면, 테이블A와 테이블B를
조건 없이 모두 매칭한 결과를 만들어앱니다. [ 모든 가능한 조합을 만들어냅니다 ]
- 테이블 A의 각 행에 테이블B의 모든 행이 조합되는 것!
∇ FULL OUTER JOIN과 CROSS JOIN의 차이점 집고 넘어가기!
1. FULL OUTER JOIN
- 양쪽 테이블의 모든 행을 결과에 포함.
- 일치하는 행이 있으면 연결하고, 없으면 NULL로 채우기.
- 조인 조건(ON절)을 사용.
- 결과 행의 수는 두 테이블의 고유한 행의 합계를 초과하지 않습니다.
2. CROSS JOIN.
- 두 테이블의 모든 가능한 조합을 생성 ( 카다시안 곱 )
- 조인 조건을 사용하지 않음
- 결과로 나온 행의 수는 두 이플의 행수를 곱한 것과 같음(교차)
√ FULL OUTER JOIN은 일치하는 행과 일치하지 않는 행을 모두 포함하며,
조인과 조건에 따라 결과를 생성.
√ 반면, CROSS JOIN은 모든 가능한 조합을 만들어냄.
∇ SELF JOIN
8-5. SELF(자체) JOIN : 자신이 자신을 조인하다는 의미로, 1개의 테이블만을 사용합니다.
[ 자기 자신에게 테이블을 조인하는 법 ]
- 주로 같은 테이블 내의 레코드 간 관계의 표혈할 때 사용.
>기본 개념.
- 동일한 테이블을 두번 참조하여 조인.
- 테이블에 별칭을 사용하여 인스턴스 구분.
> 주요 사용 사례
- 계층 구조 표현 (EX: 직원-관리자 관계)
- 순차적 관계 표현(이전, 다음 항목)
- SELF JOIN의 특징:
- 같은 테이블을 두 번 이상 참조할 수 있습니다.
- 다양한 JOIN 유형(INNER, LEFT, RIGHT 등)을 사용할 수 있습니다.
- 복잡한 계층 구조나 관계를 표현할 수 있습니다.
- 주의사항:
- 별칭 사용이 필수적입니다. 그렇지 않으면 열 이름 충돌이 발생합니다.
- 복잡한 SELF JOIN은 성능에 영향을 줄 수 있으므로 주의가 필요합니다.
- 순환 참조나 무한 루프에 주의해야 합니다.
'데이터 및 C언어 > SQL 공부' 카테고리의 다른 글
[SQL] SQL : 데이터 정의어(DDL) (0) | 2024.06.28 |
---|---|
[SQL] SQL 공부하기 : RDBMS(관계형 데이터베이스) (0) | 2024.06.27 |
[SQL] SQL 공부 : SQL문 정리하기 - 기본 난이도(2) (0) | 2024.06.24 |
[SQL] SQL 공부 : SQL문 정리하기 - 기본 난이도. (0) | 2024.06.23 |
[SQL] 데이터리안 : SQL 코딩 테스트 노하우 (0) | 2024.06.21 |
소중한 공감 감사합니다