-
[MySQL] 서브쿼리Subquery 활용해 데이터 조회하기직접 해보기/SQL 2024. 8. 10. 21:21728x90반응형
0️⃣ 서브쿼리 Subquery
- 서브쿼리란, 말그대로 쿼리 안에 다시 쿼리를 사용하는 SQL문을 말합니다.
- 메인쿼리의 특정 절 안에서 괄호를 치고, 그 괄호 안에서 SELECT~ FROM~ .. 쿼리가 들어가는 형태입니다.
- 이 때 어떤 절 안에 들어가느냐에 따라, 아래처럼 다르게 칭합니다.
인라인 뷰 (Inline view) 스칼라 서브쿼리 (Scala Subquery) 서브쿼리 - FROM절 안에 들어가는 서브쿼리
- 가상의 테이블을 하나 만드는 효과- SELECT절 안에 들어가는 서브쿼리
- 연산속도가 비교적 느려 잘 사용하지 않음- WHERE절 안에 들어가는 서브쿼리
1️⃣ FROM 절 내 서브쿼리 :: 인라인 뷰
- FROM절은 원래 데이터를 조회할 테이블을 선택하는 부분이니,
FROM절 안에서 사용하는 서브쿼리는 가상의 테이블을 하나 만들어내는 효과를 발휘합니다.
따라서, 아래 예시의 AS A 부분처럼 테이블 이름을 지정해줘야 합니다. - 아래는 sales 테이블에서 회원별로 그룹핑해서 주문횟수를 조회하고, 그 횟수가 3번 이상인 데이터만 출력한 결과입니다.
2️⃣ SELECT 절 내 서브쿼리 :: 스칼라 서브쿼리
- 스칼라란 1개의 값만 보유하는 원자량을 의미합니다.
마찬가지로 스칼라 서브쿼리는, 1개 행 1개 열만 반환해야 합니다. 즉 1개 값만 반환해야 합니다. - 아래 예시에서는 "평균구매개수" 라는 1개 값을 반환해서 하나의 열로 붙여주었습니다.
- 스칼라 서브쿼리를 조인(Join)처럼 사용할 수도 있습니다.
- 아래 예시에서는 sales 테이블을 전부 조회하고,
회원번호(member_no) 기준으로 customer 테이블의 성별(gender)를 가져와서 맨 끝에 붙였습니다. - 이렇게 사용할 수는 있지만, 조인보다 처리속도가 느리기 때문에 일반적으로는 잘 사용하지 않습니다.
3️⃣ WHERE 절 내 서브쿼리
- WHERE절은 테이블에서 특정 조건에 맞는 행만 필터링하는 부분입니다.
그러니 WHERE절 내 서브쿼리로 한번 걸러낸 데이터 리스트를 들고와서, 메인쿼리 WHERE절에서 또 필터링하는 것입니다.
따라서 WHERE절 내 서브쿼리는 "중첩 서브쿼리" 라고도 부릅니다. - 아래는 customer 테이블에서 가입연도가 2019년인 회원번호만 들고와서 (서브쿼리)
sales 테이블에서 해당 회원들의 총 주문횟수를 구하는 쿼리문입니다. (메인쿼리)
참고1: boostcourse 강좌 (기초 데이터 분석을 위한 핵심 SQL)
728x90반응형'직접 해보기 > SQL' 카테고리의 다른 글
- 서브쿼리란, 말그대로 쿼리 안에 다시 쿼리를 사용하는 SQL문을 말합니다.