서브쿼리는 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에서의 데이터 조작

왜 서브쿼리인가요?

  • 요약값과 그룹 비교
    • 해당 연도 EPL 평균 대비 리버풀 성과는?_
  • 데이터 재구조화
    • 분데스리가 월간 평균 득점의 최댓값은?_
  • 조인이 불가능한 데이터 결합
    • 경기 결과 테이블에 홈/원정 팀명을 모두 넣는 방법은?_
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...