[SQL] 서브쿼리 - TODO

2023. 5. 21. 23:22· DB/SQL

- 서브쿼리는 메인쿼리(외부쿼리)의 칼럼을 모두 사용할 수 있음

- 메인쿼리(외부쿼리)는 서브쿼리의 칼럼을 사용할 수 없음

- 서브쿼리는 소괄호로 감싸서 사용

서브쿼리에서는 ORDER BY 절을 사용하지 못하고, 메인쿼리 마지막 문장에 사용 가능

 

스칼라 서브쿼리(Scalar Sub Query): 하나의 컬럼처럼 사용 (표현 용도)
FROM (SELECT ...)         -- 인라인 뷰(Inline View): 하나의 테이블처럼 사용 (테이블 대체 용도)
WHERE col = (SELECT ...)  -- 일반 서브쿼리: 하나의 변수(상수)처럼 사용 (서브쿼리의 결과에 따라 달라지는 조건절)Copy

 

 

 

1. 중첩 서브쿼리( Nested Subquery ) (일반 서브쿼리)

where문에서 사용하는 서브쿼리.

예제1)

SELECT mem_name, height FROM member
WHERE heigth > (SELECT height FROM member WHERE mem_name = '에이핑크');
-- 에이핑크의 height보다 큰 height인 데이터를 조회

 

예제2) 프로그래머스 - 식품분류별 가장 비싼 식품의 정보 조회하기

select CATEGORY,PRICE,PRODUCT_NAME // 4. 이후 뽑아야 하는 컬럼명만 출력
from FOOD_PRODUCT   
where (CATEGORY,PRICE) in  // 2. 가상의 테이블과 상품 데이터를 비교하면서 가격과 카테고리각 맞는 데이터만 추린다.

 // 1. 카테고리가 ~인 테이터를 가지고 가상의 동적 테이블을 만드는데, 이때 카테고리별 최대 값 컬럼을 넣어준다.
(select CATEGORY, max(PRICE) as maxPrice  
 from FOOD_PRODUCT 
 where CATEGORY in ('과자','국','김치','식용유') group by CATEGORY )
order by PRICE desc  // 3.정렬해주고

서브쿼리 실행 결과

 

코드 실행 결과

 

 

 

2. 스칼라 서브쿼리( Scalar Subquery )

select에서 사용하는 서브쿼리.  
하나의 열 처럼 사용된다. 다른 테이블의 어떤 값을 가져올 때 쓰임. 

결과는 반드시 하나의 행, 하나의 컬럼 이어야 됨. (결과로 여러행, 여러 컬럼이 나오면 안됨)

select절 서브쿼리는 데이터가 많아지면 실행속도가 느려지기 때문에 잘 사용x

 

 

[예제] ANIMAL_OUTS 테이블의 ANIMAL_ID, NAME 컬럼과 ANIMAL_INS 테이블의 ANIMAL_TYPE 수

SELECT ANIMAL_ID, NAME , 
(SELECT COUNT(ANIMAL_TYPE) FROM ANIMAL_INS ) AS '견종'
FROM ANIMAL_OUTS 

 

3. 인라인 뷰

from에서 사용하는 서브쿼리. 

가상의 테이블을 만든다고 생각하면 됨.

무조건 컬럼명과 테이블명을 별칭해 주어야 한다. (새로운 테이블 이기 떄문에, 컬럼명을 새로 지정해줘야 해서)

인라인 뷰에서는 ORDER BY절을 사용할 수 있다

from (select ~ as별칭 from ~  ) 별칭

 

 


참고자료

https://suy379.tistory.com/106#3._WHERE%EC%A0%88_%EC%84%9C%EB%B8%8C%EC%BF%BC%EB%A6%AC

https://inpa.tistory.com/entry/MYSQL-%F0%9F%93%9A-%EC%84%9C%EB%B8%8C%EC%BF%BC%EB%A6%AC-%EC%A0%95%EB%A6%AC#

https://eehoeskrap.tistory.com/77

'DB > SQL' 카테고리의 다른 글

[SQL] 행 입력, 수정, 삭제 CRUD  (0) 2023.05.30
[SQL]프로그래머스 - 즐겨찾기가 가장 많은 식당 정보 출력  (0) 2023.05.30
[SQL] join, on  (0) 2023.05.25
[SQL]Group by, Having, 집계함수  (0) 2023.05.23
DB 기초개념  (0) 2023.05.17
'DB/SQL' 카테고리의 다른 글
  • [SQL]프로그래머스 - 즐겨찾기가 가장 많은 식당 정보 출력
  • [SQL] join, on
  • [SQL]Group by, Having, 집계함수
  • DB 기초개념
journey-dev
journey-dev
journey-devjourney-dev 님의 블로그입니다.
journey-dev
journey-dev
journey-dev
전체
오늘
어제
  • 분류 전체보기 (63)
    • 프론트엔드 (17)
      • JS (8)
      • React (8)
      • vue (9)
      • Typescript (2)
    • 개발서적 (1)
      • 코어 자바스크립트 (0)
      • 프론트엔드 성능 최적화 가이드 (1)
    • CS (4)
      • Docker (0)
      • 자료구조&알고리즘 (2)
      • 네트워크 (2)
    • DB (11)
      • SQL (11)
    • GIT (0)
    • GIS (3)
    • 개발일기 (0)
    • ing (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 일단 시작해라. 나중에 완벽해지면 된다.

인기 글

태그

  • 리액트 복기하기!

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
journey-dev
[SQL] 서브쿼리 - TODO
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.