1. JOIN
- 조인은 두 개 이상의 테이블에서 데이터를 결합하여 원하는 정보를 추출하는 SQL 작업
- 테이블들이 각각 분리된 정보를 갖고 있을 때, 공통 컬럼을 통해 데이터를 결합할 수 있습니다.
- 엑셀 VLOOKUP과 비슷한 기능
테이블들이 각각 분리된 정보를 갖고 있을 때, 공통 컬럼을 통해 데이터를 결합하여 전체적인 통찰을 제공합니다.
1.1 JOIN의 종류
(1) INNER JOIN: 두 테이블의 공통된 데이터만 조회
(2) LEFT JOIN: 왼쪽 테이블의 모든 행을 반환하며, 오른쪽에 없는 데이터는 NULL로 표시
1.2 기타 JOIN
- RIGHT JOIN: LEFT JOIN의 정반대로, 오른쪽 테이블을 기준으로 반환→ 실무에서는 거의 사용 X
- 엑셀의 VLOOKUP처럼 왼쪽을 중심으로 필요한 정보를 오른쪽으로부터 가져오는 left join이 주로 사용됨
- CROSS JOIN: 모든 가능한 조합(데카르트 곱)을 생성→ 테스트 데이터 생성이나 조건 확인 시 유용하나, 실무 활용도는 낮음
- SELF JOIN: 동일 테이블 내에서 데이터를 비교하거나 그룹화할 때 유용 → 특정 조건(예: 같은 연령대의 고객)을 만족하는 매칭 찾기
1.3 Key의 종류
- 기본 키(Primary Key): 행을 유일하게 식별하는 컬럼으로, NULL 값과 중복 허용 불가함
- 외래 키(Foreign Key): 다른 테이블의 기본키를 참조해 테이블 간 관계를 설정하는 컬럼
- 대체 키(Candidate Key): 기본 키로 선택 가능한 후보 컬럼
- 복합 키(Composite Key): 두 개 이상의 컬럼을 결합하여 만든 기본 키
2. UNION
- 여러 SELECT 문의 결과를 수직으로 결합하면서 중복된 행은 제거 - 중복된 데이터가 제거되므로 성능은 다소 떨어질 수 있음
※ SELECT문의 열 수와 데이터 형식이 동일해야 함.
2.1 UNION ALL
- 여러 SELECT 문의 결과를 수직으로 결합하며, 중복된 행도 포함
UNION과 동일하게 SELECT문의 열 수와 데이터 형식이 동일해야 함
3. SUBQUERY
- SQL쿼리 내부에서 실행되는 중첩된 쿼리. 복잡한 데이터를 단순하게 만들어주고, 중간 결과를 생성해 외부 쿼리에서 활용하는 데 사용.
1.1 특징
- 위치: SELECT, FROM, WHERE, HAVING, JOIN 등
- 독립성: 서브쿼리는 외부 쿼리와 상관없이 독립적으로 실행될 수도 있고, 외부 데이터를 참조하여 실행될 수도 있음(비상관 vs 상관 서브쿼리)
- 실행 순서: 서브쿼리는 외부 쿼리보다 먼저 실행되며, 반환된 결과는 외부 쿼리에서 사용됨
1.2 반환 타입에 따른 분류
서브쿼리는 반환값의 형태에 따라 세 가지로 나뉩니다. → 스칼라, 다중행(한 컬럼), 다중열(테이블)
(1) 스칼라 서브쿼리
- 서브쿼리가 스칼라 값(숫자, 문자열 등)을 반환
- 주로 SELECT, WHERE, HAVING 절에서 사용
(2) 다중 행 서브쿼리
- 서브쿼리가 1개의 컬럼에 여러 행을 반환 -> 마치 배열(리스트)처럼 동작
- IN, ANY, ALL
(3) 다중 열 서브쿼리
- 서브쿼리가 여러 열과 여러 행으로 구성된 결과를 반환 -> 가상 테이블처럼 동작
- FROM, JOIN
1.3 위치에 따른 분류
(1) SELECT절에서 사용
SELECT절의 서브쿼리는 단일값만을 반환하며, 외부 쿼리의 결과에 새로운 파생변수 생성
(2) FROM절에서 사용"인라인 뷰"
- 서브쿼리가 외부 쿼리와 독립적으로 1번만 실행됨
- 내부 쿼리 결과가 외부 쿼리에서 사용됨
(3) WHERE절에서 사용
- 비교 연산자 혹은 논리 연산자와 함께 특정 조건을 필터링
> 비교 연산자: 부등호를 활용하여 조건을 비교
> 논리 연산자:
- ANY: 서브쿼리 결과 중 하나라도 조건을 만족하면 참
- ALL: 서브쿼리 결과의 모든 값에 대해 조건을 만족해야 참
- IN : 서브쿼리 결과 값 중 하나와 일치하면 참
- EXISTS :서브쿼리의 결과가 존재하면 참(한 행이라도 존재하면 OK)
1.4 의존성에 따른 분류
(1) 비상관 서브쿼리
- 서브쿼리가 외부 쿼리와 독립적으로 1번만 실행됨
- 내부 쿼리 결과가 외부 쿼리에서 사용됨
(2) 상관 서브쿼리
상관 서브쿼리는 내부 쿼리(Subquery)가 외부 쿼리(Outer Query)의 데이터를 참조하며, 외부 쿼리의 각 행에 대해 반복적으로 실행됩니다.
→ 각 행별로 동적으로 조건을 비교가능!
- 외부 데이터를 참조: 내부 쿼리가 외부 쿼리의 데이터를 사용
- 반복 실행: 외부 쿼리가 실행될 때마다 내부 쿼리도 반복 실행
- 성능 고려 필요: 반복 실행으로 인해 성능 저하. 성능 이슈를 완화하기 위해 상관 서브쿼리를 -> JOIN 혹은 원도우 함수로 변환
(3) 비상관 VS 상관
구분 | 비상관 서브쿼리 | 상관 서브쿼리 |
의존성 | 외부 쿼리와 독립적으로 한 번만 실행 | 내부쿼리가 외부 쿼리의 데이터를 참조 |
실행 횟수 | 1번 실행 | 외부 쿼리의 각 행마다 반복 실행 |
성능 | 더 빠르고 효율적 | 반복 실행으로 성능 저하 가능: 상관서브쿼리가 꼭 필요할 때만 쓸것! → 예: 동적으로 사용자별 특정 조건을 비교해야 하는 상황(사용자별 최종 구매일 이후의 이벤트 참여 기록 찾기) |
⭐(4) 윈도우 함수 ⭐
집계 함수와 유사한 작업을 쿼리의 행 집합에 대해 수행함. 집계함수가 쿼리 행을 하나의 결과 행으로 그룹화하는 것과 달리, 윈도우 함수는 쿼리의 각 행에 대해 결과를 생성함.
- 함수가 평가되는 대상 행을 현재 행(Current row)라고 부름
- 현재 행과 연관된 쿼리 행들로 구성된 집합을 현재 행의 윈도우(window)라고 부름. 이 윈도우 범위 내에서 함수가 실행됨.
'데이터분석캠프 TIL' 카테고리의 다른 글
241209 TIL 데이터 분석 (SQL 프로그래머스 오답노트 - 조건에 맞는 사용자와 총 거래금액 조회하기, 가격대 별 상품 개수 구하기, 식품분류별 가장 비싼 식품의 정보 조회하기) (1) | 2024.12.09 |
---|---|
241209 TIL 파이썬 (리스트, 튜플, 딕셔너리) (1) | 2024.12.09 |
241129 (TIL_데이터 분석 과정_ WIL) (0) | 2024.11.29 |
241128 TIL_데이터 분석 과정(SQL - 집계함수, GROUP BY, HAVING, LAND, ORDER BY) (1) | 2024.11.28 |
241127 TIL_ 데이터 분석 과정(SQL 강의 2주차 WHERE, NULL, ORDER BY, GROUP BY, DISTINCT, LIMIT) (2) | 2024.11.27 |