[Database/MySQL] subquery 활용 연습 (1) where 조건에 중첩

2024. 11. 6. 16:40·[ Computer Science ]/Database_sql

0. 문제 공통 조건

해당 테이블을 이용해서 소속 부서의 평균보다 급여가 높은 직원들을 출력하는 쿼리를 작성할 것

 

 

1. where을 활용하는 상호 연관 중첩 서브쿼리 (correlated nested subquery)

SELECT 사번, 월급, 부서명 
FROM 직원 E1
WHERE E1.월급 > (SELECT AVG(월급) 
                 FROM 직원
                 WHERE 부서명 = E1.부서명);

 

쿼리는 두 가지로 구성되어 있다

 

메인 쿼리는 직원 테이블에서

각 행이 월급에 대한 조건을 만족하는 경우

각 행의 사번과 월급, 부서명이 출력하도록 한다

 

where문의 부등호 뒤에 있는 select문이 서브쿼리이다

이 서브 쿼리는 부서의 평균 월급을 계산한다

 

메인 쿼리의 각 행과 연관되어서 동작하니 주의

 

메인쿼리에서 첫 번째 행에 방문했을 때 

첫 번째 행의 부서명은 홍보

 

서브쿼리에서 직원 테이블 모든 행을 확인하며

메인 쿼리의 부서명인 홍보와 같은 행을 고르고

그 행들에 대한 월급의 평균을 구한다

 

서브 쿼리에서 출력된 홍보부의 평균 월급을 

메인 쿼리에서 부서명 속성의 값이 홍보인 행들의 월급과 비교한다

 

메인 쿼리의 월급이 더 큰 경우 

해당 행의 사번과 월급, 부서명을 출력한다

 

메인 쿼리는 해당 행에 대한 작업이 완료되면

다음 행으로 이동해서 같은 과정을 반복한다

 

예시 테이블에 의하면

모바일 부서에 대한 평균 월급을 구하고 

김민수 과장과 강민호 차장의 월급을 부서 평균 월급과 비교해서 

김민수 과장의 사번, 월급, 부서명을 출력하게 되는 것이다

 

이렇게 메인 쿼리의 각 행마다 서브 쿼리가 독립적으로 실행되는 것을 상호연관 서브 쿼리라고 하고

이 때문에 각 행의 부서명에 따라 평균 월급이 독립적으로 계산되고 

각 행마다 비교하는 조건 값이 달라지게 된다

 

결론적으로 메인 테이블의 모든 행에 대해 메인 쿼리 작업이 종료되면

소속 부서의 평균 월급보다 높은 직원의 사번, 월급, 부서명이 출력된 것이다

 

728x90

'[ Computer Science ] > Database_sql' 카테고리의 다른 글

[Database/MySQL] subquery 활용 연습 (2) from 조건에 중첩  (0) 2024.11.07
[Database/MySQL] 기초 쿼리문 연습  (2) 2024.10.22
[Database/midterm] SQL 문법 기초  (12) 2024.10.19
[Database/midterm] 데이터베이스 설계 (개념적, 논리적)  (3) 2024.10.19
[Database/MySQL] 실습을 위한 초기 데이터 생성  (6) 2024.10.17
[프로그래머스/MySQL] Lv. 1 평균 일일 대여 요금 구하기 (SELECT)  (8) 2024.10.17
[프로그래머스/MySQL] Lv. 1 역순 정렬하기 (SELECT)  (1) 2024.10.17
'[ Computer Science ]/Database_sql' 카테고리의 다른 글
  • [Database/MySQL] subquery 활용 연습 (2) from 조건에 중첩
  • [Database/MySQL] 기초 쿼리문 연습
  • [Database/midterm] SQL 문법 기초
  • [Database/midterm] 데이터베이스 설계 (개념적, 논리적)
dev charlotte
dev charlotte
주 - 컴퓨터공학 / 복수 - 산업 보안
    250x250
  • dev charlotte
    int main() {
    dev charlotte
  • 전체
    오늘
    어제
    • 분류 전체보기
      • [ Laboratory ]
        • Paper review
        • Advanced Operating System
        • System Software & Storage
        • Lab etc
      • [ Computer Science ]
        • Algorithm_C++
        • Operating System
        • Information Retrieval
        • Database_sql
        • SW Engineering
        • Computer Network
        • JavaScript
        • Python
        • Data Structure
        • CS study
        • Distributed systems
      • [ Computer Security ]
        • Convergence Security
        • Web Security
        • PIMS
        • Network Security
        • Digital Finance
      • [ Artificial Intelligence ]
        • Trend
        • Seminar
      • [ 미래, 같이, LG ]
      • [ Development ]
        • [ Front-end ]
        • [ Back-end ] Spring 기본
        • [ Back-end ] Node.js
      • etc
        • 현대오토에버 스마트 모빌리티 공학 체험 교육
      • It's me
  • 블로그 메뉴

    • 링크

      • GitHub
    • 공지사항

    • 인기 글

    • 태그

      백준
      싸피
      비전공자 코딩
      SSAFY
      SQL 쿼리
      프로그래머스 코테
      프로그래머스
      소프트웨어 공학
      프로그래머스 입문
      현대오토에버
      대학생 대외활동
      공대생 대외활동
      티스토리챌린지
      프로그래머스 c++
      spdk
      코드잇
      hotstorage
      싸피 13기
      스마트모빌리티공학체험교육
      자바스크립트
      SQL
      오블완
      코딩 인강
      코딩 교육
      ssafy 13기
      데이터베이스
      MySQL
      프로그래밍 언어론
      현대오토에버 스마트모빌리티
      현대오토에버 스마트 모빌리티
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.4
    dev charlotte
    [Database/MySQL] subquery 활용 연습 (1) where 조건에 중첩
    상단으로

    티스토리툴바