SQL 27, 28

이재훈·2024년 2월 11일
1

Zerobase_DA3_SQL

목록 보기
16/16

Subquery

하나의 SQL문 안에 포함되어 있는 또 다른 SQL문을 말한다
메인쿼리가 서브쿼리를 포함하는 종속적인 관계이다

  • 서브쿼리는 메인쿼리의 칼럼 사용 가능
  • 메인쿼리는 서브쿼리의 칼럼 사용 불가
  • 서브쿼리는 괄호를 묶어서 사용
  • 단일 행 혹은 복수 행 비교 연산자와 함께 사용가능
  • 서브쿼리는 Order by 사용 불가
  • scalar subquery는 SELECT절에서 사용
  • Inline View는 From절에서 사용
  • 중첩 서브쿼리( Nested Subquery) WHERE절에 사용

Scalar Subquery 예제1 )
서울 은평경찰서의 강도 검거 건수와 서울시 경찰서 전체의 평균 강도 검거 건수를 조회

SELECT case_number,
(SELECT AVG(case_number) from crime_status
WHERE crime_stype LIKE "강도" AND status_type LIKE "검거") avg
FROM crime_status
WHERE police_station LIKE "은평" AND crime_stype LIKE "강도" AND status_type LIKE "검거";

인라인뷰 (Inline View)

FROM절에서 서브쿼리한 결과를 하나의 테이블처럼 사용하는 것

인라인뷰 예제1 ) 경찰서 별로 가장 많이 발생한 범죄 건수와 범죄 유형을 조회

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 subauery)

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

  • Single Row : 하나의 열을 검색하는 서브쿼리
    서브쿼리가 비교연산자랑 사용할 경우 반환되는 값은 하나여야함
SELECT column_name
FROM table_name
WHERE column_name = ( SELECT column_name
                      FROM table_name
                      WHERE condition)

Order by column_name;

- Single Row 쿼리할 때 괄호 빼면 에러남

- Multiple Row : 하나 이상의 열을 검색하는 서브쿼리

WHERE column_name IN ( SELECT column_name
FROM table_name
WHERE condition)

EXISTS 서브쿼리 결과에 값이 있으면 반환함
예제1) 범죄검거 혹은 발생 건수가 2000보다 큰 경찰서 조회
SELECT name FROM police_station p
WHERE EXISTS ( SELECT police_station FROM crime_status c
WHERE p.name = c.reference AND case_number > 2000) ;

ANY : 서브쿼리 결과중 최소한 하나라도 만족하면 결과 반환
예제1) SNL에 출연한 적이 있는 연예인 이름조회
SELECT name FROM celeb
WHERE name = ANY ( SELECT host FROM snl_show);

ALL : 서브쿼리 결과를 모두 만족하면 결과 반환

- Multiple column : 하나 이상의 행을 검색하는 서브쿼리

예제1) 강동원과 성별, 소속사가 같은 연예인의 이름, 성별, 소속사, 조회

SELECT name, age, sex FROM celeb
WHERE (sex, agency) IN (SELECT sex, agency from celeb where name = "강동원");

profile
💻 To be a Data analyst

0개의 댓글