- 서브쿼리는 메인쿼리(외부쿼리)의 칼럼을 모두 사용할 수 있음
- 메인쿼리(외부쿼리)는 서브쿼리의 칼럼을 사용할 수 없음
- 서브쿼리는 소괄호로 감싸서 사용
서브쿼리에서는 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://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 |