서브쿼리는 WHERE에 있나요?

SQL 데이터 조작

Mona Khalil

Data Scientist, Greenhouse Software

서브쿼리란?

  • 다른 쿼리 안에 중첩된 쿼리
SELECT column
FROM (SELECT column
      FROM table) AS subquery;
  • 중간 변환에 유용
SQL 데이터 조작

서브쿼리는 어떻게 사용하나요?

  • 쿼리의 _어느_ 부분에나 있을 수 있음

    • SELECT, FROM, WHERE, GROUP BY
  • 다양한 정보를 반환 가능

    • 스칼라 값 (3.14159, -2, 0.001)
    • 목록 (id = (12, 25, 392, 401, 939))
    • 테이블
SQL 데이터 조작

왜 서브 쿼리인가?

  • 요약된 값과 그룹 비교
    • 그 해 리버풀은 잉글랜드 프리미어리그 평균 성적과 비교해 어땠나요?
  • 데이터 재구성
    • 분데스리가에서 월평균 득점의 최댓값은 얼마인가요?
  • 조인할 수 없는 데이터를 결합
    • 홈팀과 원정팀 이름을 경기 결과 테이블에 모두 어떻게 넣나요?
SQL 데이터 조작

- 단순 서브쿼리

  • 외부 쿼리와 독립적으로 평가할 수 있음
SELECT home_goal
FROM match
WHERE home_goal > (
    SELECT AVG(home_goal) 
    FROM match);

SELECT AVG(home_goal) FROM match;
1.56091291478423
SQL 데이터 조작

- 단순 서브쿼리

  • 전체 문장에서 한 번만 처리됨
SELECT home_goal
FROM match
WHERE home_goal > (
    SELECT AVG(home_goal) 
    FROM match);
SQL 데이터 조작

WHERE 절의 서브쿼리

  • 2012/2013 시즌에서 홈 득점이 전체 평균보다 높은 경기는 무엇인가요?
SELECT AVG(home_goal) FROM match;
1.56091291478423
SELECT date, hometeam_id, awayteam_id, home_goal, away_goal
FROM match
WHERE season = '2012/2013'
      AND home_goal > 1.56091291478423;
SQL 데이터 조작

WHERE 절의 서브쿼리

  • 2012/2013 시즌에서 홈 득점이 전체 평균보다 높은 경기는 무엇인가요?
SELECT date, hometeam_id, awayteam_id, home_goal, away_goal
FROM match
WHERE season = '2012/2013'
      AND home_goal > (SELECT AVG(home_goal)
                     FROM match);
| date       | hometeam_id | awayteam_id | home_goal | away_goal |
|------------|-------------|-------------|-----------|-----------|
| 2012-07-28 | 9998        | 1773        | 5         | 2         |
| 2012-07-29 | 9987        | 9984        | 3         | 3         |
| 2012-10-05 | 9993        | 9991        | 2         | 2         |
SQL 데이터 조작

서브쿼리 필터링 목록과 IN

  • 폴란드 리그에 속한 팀은 어디인가요?
SELECT
  team_long_name,
  team_short_name AS abbr
FROM team
WHERE 
  team_api_id IN 
  (SELECT hometeam_id
   FROM match
   WHERE country_id = 15722);
| team_long_name | abbr |
|----------------|------|
| Ruch Chorzów   | CHO  |
| Jagiellonia    | BIA  |
| Lech Poznań    | POZ  |
| P. Warszawa    | PWA  |
| Cracovia       | CKR  |
| Górnik Łęczna  | LEC  |
| Polonia Bytom  | GOR  |
| Zagłębie Lubin | ZAG  |
| Pogoń Szczecin | POG  |
| Widzew Łódź    | WID  |
| Śląsk Wrocław  | SLA  |
SQL 데이터 조작

연습해 봅시다!

SQL 데이터 조작

Preparing Video For Download...