• 티스토리 홈
  • 프로필사진
    Song hyun
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
Song hyun
  • 프로필사진
    Song hyun
    • 분류 전체보기 (780)
      • 영어 (2)
        • Diary (0)
        • Toast Masters (2)
      • 메모 (13)
      • 설치 메뉴얼 (30)
      • Java (178)
      • MySQL (60)
      • JSP (67)
      • Springboot (46)
      • HTML,CSS, JS (71)
        • HTML (8)
        • CSS (12)
        • JavaScript (37)
        • HTML&CSS 스터디 (13)
      • C++ (7)
      • Linux (7)
      • JPA (34)
      • Kotlin (2)
      • Flutter (42)
      • Error Note (39)
      • 디자인 패턴 (12)
      • 디지털논리회로 (4)
      • 데이터베이스 시스템 (8)
      • 알고리즘 (7)
      • 운영체제 (3)
      • 이산수학 (3)
      • 인공지능 (1)
      • 자료 구조 (14)
        • 기본 개념 (14)
        • 자료구조 스터디 (0)
      • 💡My project (76)
        • 팩맨 : Java Swing 게임 제작 프로젝트 (6)
        • 네이트톡 : Java 소켓 통신 프로젝트 (4)
        • 포켓옥션 : HikariCP&JDBC CRUD 프.. (3)
        • 이지 부산 : BDIA-Devton 2024 프로.. (20)
        • 그린 유니버시티 : JSP를 사용한 학사관리 프로.. (1)
        • 애드 포커 : 웹 소켓과 Spring을 사용한 카.. (1)
        • 셸위 : 게임 친구 매칭 사이트 (21)
        • 다모아 : 개발자 중개 플랫폼 (20)
      • 📗스터디 (13)
        • CNN : 웹개발 스터디 (10)
        • Node&React로 유튜브 사이트 만들기 (3)
      • 📙독서 및 강연 기록 (36)
        • 강연 (14)
        • 독서 (22)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • [MySQL] 45. 서브 쿼리 (2)
        2024년 06월 13일
        • Song hyun
        • 작성자
        • 2024.06.13.:51
        728x90
        반응형

        [MySQL] 45. 서브 쿼리 (2)

        1. 서브 쿼리

        2. 서브 쿼리의 형태

        3. 서브 쿼리를 사용하는 이유?

        4. 서브 쿼리의 종류

        5. 코드 예제: 중첩 서브 쿼리를 사용해 조회해보자.

        6. 코드 예제: 인라인 뷰를 사용해 조회해보자.


        1. 서브 쿼리

        (1) 서브 쿼리(Subquery): 서브 쿼리는 SQL 문장 내에서 다른 SQL 쿼리를 내포하는 구문이다.

        (2) 서브 쿼리의 개념: 서브 쿼리는 보통 소괄호() 안에 작성되며, 메인쿼리/외부 쿼리(main query/outer query)라고 하는 더 큰 SQL 쿼리의 일부로 존재한다. 서브 쿼리는 메인 쿼리에 의해 반환된 데이터를 기반으로 추가적인 조건을 적용하거나, 메인 쿼리의 조건을 정의하는 데 사용한다.


        2. 서브 쿼리의 형태

        select * 
        from reservation
        where name in( select name from customer where address ='서울' );

        3. 서브 쿼리를 사용하는 이유?

        (1) 복잡성 감소: 복잡한 쿼리를 더 작고 관리하기 쉬운 부분으로 나누어 처리할 수 있다.

        (2) 재사용성: 같은 서브쿼리를 여러 쿼리에서 재사용할 수 있어, 코드의 중복을 줄이고 윶 보수를 용이하게 한다.

        (3) 명확성: 데이터의 특정 부분에 대해 명확한 조건을 설정할 수 있고, 읽기 쉽고 이해하기 쉬운 쿼리를 작성할 수 있다.


        4. 서브 쿼리의 종류

         서브 쿼리는 위치에 따라 크게 세 가지 종류로 나뉜다. 

         

        (1) 중첩 서브 쿼리(Nested Subquery): WHERE 절에 사용하는 서브 쿼리

        (2) 인라인 뷰(Inline view): FROM 절에 사용하는 서브 쿼리

        (3) 스칼라 서브 쿼리(Scalar Subquery): SELECT 절에 사용하는 서브 쿼리

         


        5. 코드 예제: 중첩 서브 쿼리를 사용해 조회해보자.

         

        *문제: 서브 쿼리를 활용해, 현재 매니저로 재직 중인 사원들의 명단을 출력해보자.

        -employees(사원 명단), dept_manager(매니저 명단) 사용

         

        (1) 현재 재직 중인 매니저를 dept_manager 테이블에서 조회하는 쿼리를 작성한다.

         

        (2) employee 테이블 내에서 emp_no(사원번호)가 (1) 과 동일한 사원을 출력하는 쿼리를 작성한다.

        (3) where 조건문에 (1)을 서브쿼리로 삽입한다.

        (4) 여러 매니저들을 출력해야 하기 때문에, =이 아닌 in을 사용한다. 

         

         


        6. 코드 예제: 인라인 뷰를 사용해 조회해보자.

         

        *문제: 현재 다니고 있는 매니저들의 평균 연봉 구하기. (인라인 뷰 사용하기)

        -Salaries(연봉) 테이블 사용

         

        (1) 전체 직원들의 평균 연봉(avg(salary))을 구하는 쿼리를 만든다.

         

        (2) 사원번호를 group by로 묶는 쿼리문을 작성한 뒤,

        (3) 해당 쿼리문의 from 절에 (1)을 삽입한다. 

        (4) 사원번호가 10001인 사원만을 출력해야 하므로 where emp_no='10001'을 작성한다.

         

        그러면 아래와 같이 성공적으로 출력된 것을 확인할 수 있다.

         

        *코드의 진행 순서

        (1) from - from 내부의 인라인 뷰를 읽어들임

        (2) where 절을 통해 조건 탐색

        (3) select로 쿼리 출력

         

         

         

         인라인 뷰와 중첩 서브 쿼리를 동시에 쓸 수도 있다.

        인라인 뷰와 중첩 서브 쿼리를 동시에 사용한 쿼리문

        -- 인라인 뷰, 중첩 서브쿼리를 동시에 사용
        select emp_no, 평균연봉
        from (select emp_no, avg(salary) as 평균연봉
        		from salaries as s
        		group by emp_no) as avg_salary
        where emp_no in (select emp_no
        				from dept_manager
                        where to_date='9999-01-01');

         

         경우에 따라, 중첩 서브 쿼리는 일반 쿼리보다 쿼리 코스트가 더 많이 들기도 한다.

        위의 코드는 JOIN을 사용해 우측 하단처럼 코드를 작성할 수도 있으며,

        이 경우에는 JOIN을 사용하는 것이 더욱 효율적인 선택이다.

        (1) 서브 쿼리를 사용했을 때의 쿼리 코스트 / (2) JOIN을 사용했을 때의 쿼리 코스트 / (3) JOIN으로 똑같은 쿼리 출력해보기

        -- 위와 같은 결과 집합을 INNER JOIN을 활용해 만들어 보자.
        select dm.emp_no, avg(salary)
        from dept_manager as dm
        join salaries as s
        on dm.emp_no=s.emp_no
        where dm.to_date='9999-01-01'
        group by s.emp_no;

         


        * 전체 코드

        -- FROM 절에 사용하는 인라인 뷰
        -- 현재 다니고 있는 매니저들의 평균 연봉 구하기.
        
        select*from dept_manager where to_date='9999-01-01';
        select*from salaries where emp_no=10001;
        
        -- 전체 직원의 평균 연봉 = avg(emp_no 그룹 by 처리)
        select emp_no, avg(salary) as 평균연봉
        from salaries as s
        group by emp_no;
        
        -- 인라인 뷰, 중첩 서브쿼리를 동시에 사용
        select emp_no, 평균연봉
        from (select emp_no, avg(salary) as 평균연봉
        		from salaries as s
        		group by emp_no) as avg_salary
        where emp_no in (select emp_no
        				from dept_manager
                        where to_date='9999-01-01');
                        
                        
        -- 위와 같은 결과 집합을 INNER JOIN을 활용해 만들어 보자.
        select dm.emp_no, avg(salary)
        from dept_manager as dm
        join salaries as s
        on dm.emp_no=s.emp_no
        where dm.to_date='9999-01-01'
        group by s.emp_no;
        728x90
        반응형

        'MySQL' 카테고리의 다른 글

        [MySQL] 47. 정규화(2) -제 1 정규화(1NF)  (0) 2024.06.13
        [MySQL] 46. 서브 쿼리(3)  (0) 2024.06.13
        [MySQL] 44. 연습문제 풀이  (0) 2024.06.13
        [MySQL] 1일 1쿼리 (6) : 서브 쿼리 및 기본 개념 활용  (0) 2024.06.12
        [MySQL] 43. 연습 문제: 서브 쿼리 및 기본 개념 다지기  (0) 2024.06.12
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바