배울 것
- 연산을 여러번 해야하는데, 쿼리문에 길게 쓰는 것 말고 다른 방법은 없을지
- 연산한 결과를 다른 연산이나 조건문에 사용하고 싶은데, 계속 반복해서 연산해야 하는지
- 필요한 데이터가 여러 테이블에 나누어져 있는데 한 번에 조회해서 사용할 수 있을지
서브쿼리
필요한 경우
- 여러 변의 연산을 수행해야 할 때
- 조건문에 연산 결과를 사용해야 할 때
- 조건에 쿼리 결과를 사용하고 싶을 때
기본 구조
- 괄호를 이용해 안에서 SELECT 문을 통해 조회를 하면 column1, column2가 나옴
- 여기서 나온 column1과 column2 결과를 이용해 메인 쿼리문에서 계산을 함
SELECT column1, special_column
FROM
{
SELECT column1, column2 special_clumn
FROM table1
} a
JOIN
필요한 경우
- 필요한 데이터가 서로 다른 테이블에 있을 때 조회
기본 원리
- 엑셀의 Vlookup과 유사
- 각각 주문 정보와 고객 정보 테이블이 있을 때 두 테이블의 공통되는 고객 ID 컬럼을 이용해 합치는 것
종류
- LEFT JOIN
- 공통 컬럼을 기준으로, 하나의 테이블에 값이 없더라도 모두 조회되는 경우를 의미
- INNER JOIN
- 공통 컬럼을 기준으로, 두 테이블 모두에 있는 값만 조회
기본 구조
# LEFT JOIN
select 조회 할 컬럼
from 테이블1 a left join 테이블2 b on a.공통컬럼명=b.공통컬럼명
# INNER JOIN
select 조회 할 컬럼
from 테이블1 a inner join 테이블2 b on a.공통컬럼명=b.공통컬럼명
- 중복을 제거하기 위해 c.name 앞에 DISTINCT 작성
- 값을 세는 것과 동일하게 중복을 제거하고 어떤 값이 있는지만 보여줌
- JOIN으로 두 테이블의 값 연산
- 수수료율이 있는 경우만 조회
- 할인: (나이 - 50) * 0.005
- 고객 정보가 없는 경우도 포함하여 조회, 할인 금액이 큰 순서대로 정렬
[과제: 식당별 평균 음식 주문 금액과 주문자의 평균 연령을 기반으로 Segmentation 하기]
- 평균 음식 주문 금액 기준 : 5,000 이하 / ~10,000 / ~30,000 / 30,000 초과
- 평균 연령 : ~ 20대 / 30대 / 40대 / 50대 이상
- 두 테이블 모두에 데이터가 있는 경우만 조회, 식당 이름 순으로 오름차순 정렬
'공부 > SQL' 카테고리의 다른 글
데이터베이스 문제 (3) | 2025.01.23 |
---|---|
엑셀보다 쉽고 빠른 SQL 5주차(Pivot table, Window Function, 포맷 함수) (0) | 2025.01.09 |
엑셀보다 쉽고 빠른 SQL 3주차(포맷 변경, 조건문) (1) | 2025.01.06 |
엑셀보다 쉽고 빠른 SQL 2주차(연산, WHERE, GROUP BY, ORDER BY) (0) | 2024.12.31 |
엑셀보다 쉽고 빠른 SQL 1주차(SELECT, FROM, WHERE 조건) (0) | 2024.12.30 |