SQL(Subquery)

Lee JunBok·2023년 6월 8일

SQL

목록 보기
8/8

Subquery

하나의 SQL 문 안에 포함되어 있는 또 다른 SQL 문을 말한다.
메인쿼리가 서브쿼리를 포함하는 종속적인 관계이다.
• 서브쿼리는 메인쿼리의 칼럼 사용 가능
• 메인쿼리는 서브쿼리의 칼럼 사용 불가
• Subquery 는 괄호로 묶어서 사용
• 단일 행 혹은 복수 행 비교 연산자와 함께 사용 가능
• subquery 에서는 order by 를 사용X

Scalar Subquery

SELECT 절에서 사용하고 결과는 하나의 COLUMN 이어야 한다.

# 서울은평경찰서의 강도 검거 건수와, 서울시 경찰서 전체의 강도 검거 건수률 조회
SELECT case_number, 
(SELECT avg(case_number) FROM crime_status WHERE crime_type LIKE '강도' AND status_type LIKE '검거') avg
FROM crime_status
WHERE police_station LIKE '은평' AND crime_type LIKE '강도' AND status_type LIKE '검거';

Inline View

FROM 절에 사용하는 서브쿼리, 메인쿼리에서는 인라인 뷰에서 조회한 column만 사용이 가능하다. (테이블 형태로 나와야한다.)

# 경찰서 별로 가장 많이 발생한 범죄 건수와 범죄 유형을 조회
SELECT c.police_station, c.crime_type, c.case_number
FROM crime_status c,
(SELECT police_station, max(case_number) count FROM crime_status WHERE status_type LIKE '발생' GROUP BY police_station) m
WHERE c.police_station = m.police_station AND c.case_number = m.count;

Nested Subquery

WHERE 절에서 사용하는 서브쿼리

Single Row Subquery

하나의 행을 검색하는 서브쿼리
서브쿼리가 비교연산자( =, >, >=, <, <=, <>, !=)와 사용되는 경우,
서브쿼리의 검색 결과는 한 개의 결과값을 가져야 한다. (두개 이상인 경우 에러)

SELECT name
FROM celeb
WHERE name = (SELECT host FROM snl_show WHERE id=1);

Multiple Row Subquery

하나 이상의 행을 검색하는 서브쿼리
서브쿼리 결과 중에 포함 될때

# IN 두개 이상의 행
SELECT host
FROM snl_show
WHERE host IN (SELECT name FROM celeb WHERE job_title LIKE '%영화배우%');

# EXISTS
SELECT name
FROM police_station p
WHRER EXISTS (SELECT police_station FROM crime_status c WHERE p.name = c.reference AND case_number > 2000);

# ANY
SELECT name
FROM celeb
WHERE name = any (SELECT host FROM snl_show);

# ALL : 서브쿼리 결과를 모두 만족하면 비교연산자 사용
SELECT name
FROM celeb
WHERE name = all (SELECT host FROM snl_show WHERE id=1);

Multi Column Subquery

하나 이상의 열을 검색하는 서브쿼리
서브쿼리 내에 메인쿼리 컬럼이 같이 사용되는 경우.

SELECT name, sex, agency
FROM celeb
WHERE (sex, agency) in (SELECT sex, agency FROM celeb WHERE name='강동원');

이글은 제로베이스 데이터 취업스쿨의 강의자료 일부를 발췌하여 작성되었습니다.

profile
Learning Data Analyst

0개의 댓글