Notice
Recent Posts
Recent Comments
Link
- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 1주차
- jupyter
- Jupyter Notebook
- data
- 파이썬
- 모두의연구소
- 데이터사이언티스트
- 빅쿼리
- sql
- 데이터베이스
- 개념정리
- 컴프리헨션
- 주피터노트북
- error
- 변수
- 데싸4기
- python
- 깃허브
- 2주차
- 환경세팅
- 비교연산자
- 논리연산자
- bigquery
- 데이터
- github
- 파이썬문법
- AI
- 함수
- 딕셔너리
- 함수활용
Archives
[SQL] 여러 개의 테이블 사용하기 (UNION, Subquery) 본문
반응형
학습 내용
- ✅ 기본키(PK), 외래키(FK)
- 기본키(PK : Primary Key)
- 외래키(FK : Foreign Key)
- ✅ 다중 테이블 사용하기(JOIN)
- JOIN
- JOIN의 종류
- ✅ 데이터 이어붙이기(UNION)
- ✅ 서브쿼리 원리와 방식(Subquery)
- Subquery
- WHERE절 서브쿼리
- 단일행 서브쿼리
- 다중행 서브쿼리
- FROM절 서브쿼리
🛠 UNION
- 데이터를 붙일 때 사용한다.
- 테이블을 아래로, 세로로 붙이며 새로운 행을 생성한다.
🔥주의할 점
- ✅ 2개의 테이블의 컬럼명이 달라도 적용할 수 있다.
- ❌ 컬럼수가 다르면 사용할 수 없다.
- ❌ 컬럼의 데이터 타입이 서로 다르면 사용할 수 없다.
👉 즉, 2개의 테이블의 컬럼수와 데이터 타입이 같으면 사용할 수 있다.🚀
종류
📌
UNION ALL: 중복 포함하여 쿼리문 2개를 합친다.
UNION: 중복 제거하여 쿼리문 2개를 합친다.
mysql("""
SELECT work_year, experience_level, job_title
FROM ds_2020
UNION
SELECT work_year, experience_level, job_title
FROM ds_2021
LIMIT 100
""")
🔥참고
다른 DBMS에서는 UNION DISTINCT 를 써도 중복 제거가 되지만, pandasql 에서는 에러가 나기 때문에 UNION 만 적으면 된다.
🛠 Subquery
- 하나의 쿼리문 안에 포함되는 또 다른 쿼리문이다. (=중첩 쿼리문 이라고도 불린다.)
- join 과 달리, 새로운 컬럼이 필요하지 않을 때 서브쿼리를 사용한다.
- 서브쿼리는 SELECT, FROM, WHERE, HAVING 등 다양한 절에 사용할 수 있다.
- FROM 절에서 사용될 경우, 서브쿼리의 결과는 임시 테이블처럼 활용된다.
Subquery 실행 순서
서브쿼리 -> 메인쿼리
들어갈 서브 쿼리를 항상 먼저 추출해보고 사용한다.
🔎그렇다면 서브쿼리는 어떻게 생겼을까❓
형태
select * from 테이블명 where 컬럼명 in (select 컬럼명 from 테이블명)
- ✅ 괄호를 묶어서 사용한다.
- ✅ 연산자의 오른쪽에 위치한다.
- ❌ 서브쿼리 내에서는 ORDER BY 가 지원되지 않는다.
종류
🛠 where절 서브쿼리
서브쿼리의 결과는 메인쿼리의 조건으로 사용된다.
🛠 단일행 서브쿼리
- 서브쿼리의 실행 결과가 항상 1건 이하인 서브쿼리
- 단일행 비교연산자 (=, !=, >, < 등)과 함께 사용한다.
mysql("""
SELECT *
FROM customers
WHERE creditLimit < (SELECT MIN(price)
FROM orders)
""")
🛠 다중행 서브쿼리
- 서브쿼리의 실행 결과가 여러 건인 서브 쿼리
- 다중행 비교연산자(IN, NOT IN 등)와 함께 사용한다.
mysql("""
SELECT orderId
FROM orders
WHERE customerId IN (SELECT customerId
FROM customers
WHERE country = 'USA')
""")
🛠 from절 서브쿼리
Inline View(=인라인 뷰)
뷰처럼 작동하여 인라인뷰라고 부른다.
🛠 뷰 View 란?
- SELECT문을 저장해 둔 가상의 테이블로 물리적으로 데이터를 저장하지 않고, 원본 테이블의 데이터를 바라보는 창(window) 역할을 한다.
- 실제 테이블처럼 SELECT, JOIN, WHERE 등에 사용할 수 있다.
✅ 실행 시점에 결과가 만들어져서
✅ 일시적으로 임시 테이블처럼 사용된다는 점이 핵심이다.
🔁 뷰(View) vs 인라인 뷰
구분 뷰 (View) 인라인 뷰 (Inline View)
생성 방법 | CREATE VIEW 구문 | FROM 절에 서브쿼리 작성 |
저장 여부 | ✅ 저장됨 (데이터는 X, 쿼리 구조는 O) | ❌ 저장되지 않음 |
사용 목적 | 재사용 가능한 쿼리 정의 | 쿼리 내부에서 임시 테이블처럼 활용 |
사용 위치 | 일반 쿼리에서 테이블처럼 | FROM 절 내부 |
쉽게 말하면: 인라인 뷰는 "잠깐 쓰고 버리는 뷰" 라고 생각하면 된다.😊
mysql("""
SELECT *
, CAST(julianday('now') - julianday(max_date) AS INT) AS date_diff
FROM (SELECT customerId
, MAX(orderDate) AS max_date
FROM orders
GROUP BY 1) AS main
""")
고객별 마지막 제품의 구매일자가 현재일을 기준으로 며칠 지났는지 확인
🔥[참고]
날짜 차이를 구할 때 MySQL 등과 같은 DBMS에서는 날짜와 관련된 함수, 예를 들면 DATEDIFF 등의 함수를 사용하지만 pandasql과 SQLite에서는 julianday 함수를 사용한다.
반응형
'데이터베이스 > SQL' 카테고리의 다른 글
[Big Query] BigQuery개념 정리, SQL 기초 체력 키우기(실습 5문제) (3) | 2025.04.08 |
---|---|
[Big Query] 빅쿼리 시작하기 (0) | 2025.04.07 |
[SQL] 여러 개의 테이블 사용하기(기본키, 외래키, JOIN) (0) | 2025.04.04 |
[SQL] 데이터 집계하기(COUNT, SUM, AS(별칭), AVG, MAX, MIN), GROUP BY, HAVING (0) | 2025.04.04 |
[SQL] 데이터 활용법(LIKE연산자, Wildcard, 정렬, 중복제거, If, CASE WHEN ~ THEN, CAST) (0) | 2025.04.03 |