• 티스토리 홈
  • 프로필사진
    Song hyun
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
Song hyun
  • 프로필사진
    Song hyun
    • 분류 전체보기 (780)
      • 백준 (0)
      • 영어 (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] 1일 1쿼리 (6) : 서브 쿼리 및 기본 개념 활용
        2024년 06월 12일
        • Song hyun
        • 작성자
        • 2024.06.12.오후04:13
        728x90
        반응형

        [MySQL] 1일 1쿼리 (6) : 서브 쿼리 및 기본 개념 활용

        1. 문제

        2. 문제 풀이(답안)


        1. 문제

        순서 문제
        1 남성 셔츠 여성 면바지 남성 슬랙스의 각자의 가격을 구하시오
        2 여성복 중 색상이 '샤인'이 아니며, 가격이 10만원 이상인 여성복들을 출력해라.
        -- 출력해야 할 것: 상품명, 카테고리ID, 가격, 색상
        3 재직중이고 1995년 이후 입사한 Senior Engineer 직원이 가장 많은 부서 3개를 출력하세요
        4 현재 근무 중인 직원들 중에 38년 이상 근무했으나 직급이 Staff이고 salary_standard가 Low인 직원만 출력해주세요.
        (salary가 70000 이상이면 'High', 50000 이상이면 'Medium', 50000 미만이면 'Low'라고 표시하되 표기명은 salary_standard입니다.) --(단, 같은 직원일 경우 가장 높은 급여만 'max_salary'라는 표기로 출력해야 합니다.)
        5 db sakila 에서 -- 각 언어 마다 몇개의 영화가 있는지 조회하라 (데이터상 모든 영화가 영어지만, 다른 언어가 0개 임을 표현해야함)
        6 가장 인원이 많은 부서의 매니저 이름을 출력하세요. db = employees -- (정답 = first_name : Leon , last_name : DasSarma) -- (퇴사한 매니저는 제외 && 퇴사 직원 제외) -- (서브쿼리를 사용 안해도 가능)
        7 데이터베이스 db_denco_market 에서 '김범수' 고객의 최종합계금액을 조회하세요.
        8 문제 : demo3에서 남성슬랙스, 여성면바지의 상품이름, 가격, 사이즈, 색상을 출력하시오 단, 서브쿼리를 쓰시오.
        9 제일 비싼 상품을 가지고 있는 카테고리를 출력(카테고리 이름 + 상품 이름 + 가격 ) mydb3 의 tb_products, tb_categories 사용
        10 현재 어느 부서의 매니저도 아닌 직원 중, 재직중이며 연봉이 100000이 넘는 직원을 조회하세요. (사원번호,first_name,last_name,연봉)
        11 직원번호 10033 직원의 최고 연봉액과 근무일수를 구하시오
        12 부서 번호가 d009인 부서에서 재직중이며 매니저가 있는 직원을 조회하여라.(직원 번호, 이름, 부서명) -- 단, 서브쿼리를 사용하여 departments 테이블의 dept_name에 담아서 출력하여라.
        13 demo3 데이터베이스를 사용하여 색깔이 '퍼플' 인 남성복 셔츠의 정보를 조회하시오.
        -- ( 서브쿼리 사용 )

         


        2. 문제 풀이(답안)

        -- 문제 1. 남성 셔츠  여성 면바지 남성 슬랙스의 각자의 가격을 구하시오
        select p.product_name , p.price , p.size
        from TB_PRODUCTS as p
        join tb_categories as c 
        on p.category_id = c.category_id
        where (c.category_name ='면바지' and c.parent_id=5) 
        or (c.category_name ='슬랙스' and c.parent_id=3) 
        or (c.category_name ='셔츠' and c.parent_id=1);
        
        -- 문제 2. 여성복 중 색상이 '샤인'이 아니며, 가격이 5만원 이상인 여성복들을 출력해라. 
        -- 출력해야 할 것: 상품명, 카테고리ID, 가격, 색상
        select p.product_name,p.category_ID,p.price,p.color
        from tb_products as p
        left join tb_categories as c
        on p.category_ID=c.category_ID
        where (p.color!='샤인') and (p.price>=100000) and p.product_name like '여성%';
        
        -- 문제 3. 재직중이고 1995년 이후 입사한 Senior Engineer 직원이 가장 많은 부서 3개를 출력하세요
        select d.dept_name as 부서, count(*) as 직원수
        from employees e
        left join dept_emp de
        on e.emp_no = de.emp_no
        left join departments d
        on d.dept_no = de.dept_no
        left join titles t
        on e.emp_no = t.emp_no
        where year(e.hire_date) >= 1995 and t.title = 'Senior Engineer'
        and de.to_date ='9999-01-01' and t.to_date = '9999-01-01'
        group by d.dept_name
        order by 직원수 desc
        limit 3;
        
        -- 문제 4
        -- 현재 근무 중인 직원들 중에 38년 이상 근무했으나 직급이 Staff이고 salary_standard가 Low인 직원만 출력해주세요.
        -- (salary가 70000 이상이면 'High', 50000 이상이면 'Medium', 50000 미만이면 'Low'라고 표시하되 표기명은 salary_standard입니다.)
        -- (단, 같은 직원일 경우 가장 높은 급여만 'max_salary'라는 표기로 출력해야 합니다.)
        select e.emp_no,e.first_name,e.last_name,t.title, MAX(s.salary) as max_salary, 
        case
        when MAX(s.salary) >= 70000
        then 'High'
        when MAX(s.salary) >= 50000
        then 'Medium'
        else 'Low'
        end as 'salary_standard'
        from salaries as s
        join employees as e
        on s.emp_no = e.emp_no
        join titles t
        on e.emp_no = t.emp_no 
        where t.to_date = '9999-01-01'
        and year(current_date) - year(hire_date) >= 38
        and t.title = 'Staff'
        group by s.emp_no
        having salary_standard = 'Low';
        
        -- 문제 5. db sakila 에서
        -- 각 언어 마다 몇개의 영화가 있는지 조회하라 (데이터상 모든 영화가 영어지만, 다른 언어가 0개 임을 표현해야함)
        select l.name, count(f.language_id) as count
        from language as l
        left join film as f on l.language_id = f.language_id
        group by l.language_id;
        
        -- 문제 6. 가장 인원이 많은 부서의 매니저 이름을 출력하세요. db = employees
        -- (정답 = first_name : Leon , last_name : DasSarma)
        -- (퇴사한 매니저는 제외 && 퇴사 직원 제외)
        -- (서브쿼리를 사용 안해도 가능)
        select emp.first_name, emp.last_name
        from employees as emp
        join dept_manager as dema
        on emp.emp_no = dema.emp_no
        join( select dept_no, count() as a
                from dept_emp
                where to_date = '9999-01-01'
                group by dept_no
                order by a desc
                limit 1
                ) as count_max_dept
        on dema.dept_no = count_max_dept.dept_no
        where dema.to_date = '9999-01-01';
        
        -- 문제 7. 데이터베이스 db_denco_market 에서 '김범수' 고객의 최종합계금액을 조회하세요.
        select u.userName, sum(price amount) as '최종금액(만)'
        from usertbl u
        join buytbl b on u.userName = b.userName
        where u.userName = '김범수'
        group by userName;
        
        -- 문제 8 : demo3에서 남성슬랙스, 여성면바지의 상품이름, 가격, 사이즈, 색상을 출력하시오 단, 서브쿼리를 쓰시오.
        use demo3; 
        SELECT 
            p.product_name, p.price, p.size, p.color
        FROM
            tb_products AS p
                JOIN
            tb_categories AS c ON p.category_id = c.category_id
        WHERE
            c.category_name = '슬랙스'
                AND c.parent_id = (SELECT 
                    category_id
                FROM
                    tb_categories
                WHERE
                    category_name = '팬츠'
                        AND parent_id = 1)
                OR category_name = '면바지'
                AND c.parent_id = (SELECT 
                    category_id
                FROM
                    tb_categories
                WHERE
                    category_name = '팬츠'
                        AND parent_id = 2);
        
        -- 문제 9
        -- 제일 비싼 상품을 가지고 있는 카테고리를 출력(카테고리 이름 + 상품 이름 + 가격 )  mydb3 의 tb_products, tb_categories 사용
         
        select
        c.category_name,
        p.product_name,
        p.price
        from tb_products as p
        join tb_categories as c
        on p.category_id = c.category_id
        where p.price = (select max(p.price) from tb_products as p);
        
        -- 문제 10. 현재 어느 부서의 매니저도 아닌 직원 중, 재직중이며 연봉이 100000이 넘는 직원을 조회하세요. (사원번호,first_name,last_name,연봉)
        select e.emp_no, e.first_name, e.last_name, s.salary
        from employees as e
        left join salaries as s on e.emp_no = s.emp_no
        left join dept_emp as de on e.emp_no = de.emp_no
        where e.emp_no not in (select emp_no from dept_manager)
        and s.salary >= 100000
        and de.to_date = '9999-01-01'
        group by e.emp_no, e.first_name, e.last_name;
        
        -- 문제 11. 직원번호 10033 직원의 최고 연봉액과 근무일수를 구하시오
        select 
        d.emp_no,
        max(s.salary) as 최고연봉,
        ABS(
        datediff(
        (select from_date from dept_emp where emp_no = 10033),
        (select to_date from dept_emp where emp_no = 10033)
        )
        )+1 as 근무일수
        from dept_emp as d
        join salaries as s
        on d.emp_no = s.emp_no
        where d.emp_no = 10033;
        
        -- 문제 12. 부서 번호가 d009인 부서에서 재직중이며 매니저가 있는 직원을 조회하여라.(직원 번호, 이름, 부서명)
        -- 단, 서브쿼리를 사용하여 departments 테이블의 dept_name에 담아서 출력하여라.
        select e.emp_no,  e.first_name, d.dept_name
        from employees as e
        join dept_manager as m
        on e.emp_no = m.emp_no
        join departments as d
        on d.dept_no = m.dept_no
        where m.to_date = '9999-01-01'
        and d.dept_name = (select dept_name from departments where dept_no = 'd009');
        
        
        -- 문제 13. demo3 데이터베이스를 사용하여 색깔이 '퍼플' 인 남성복 셔츠의 정보를 조회하시오.
        -- ( 서브쿼리 사용 )
        use demo3;
        select c.category_name, p.product_name, p.price, p.size, p.color,c.parent_id
        from tb_products as p
        join tb_categories as c
        on p.category_id = c.category_id
        where p.color = '퍼플'
                    and c.category_id = (select category_id from tb_categories 
                                     where category_name = '셔츠' and parent_id=1);
        728x90
        반응형

        'MySQL' 카테고리의 다른 글

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

      티스토리툴바

      단축키

      내 블로그

      내 블로그 - 관리자 홈 전환
      Q
      Q
      새 글 쓰기
      W
      W

      블로그 게시글

      글 수정 (권한 있는 경우)
      E
      E
      댓글 영역으로 이동
      C
      C

      모든 영역

      이 페이지의 URL 복사
      S
      S
      맨 위로 이동
      T
      T
      티스토리 홈 이동
      H
      H
      단축키 안내
      Shift + /
      ⇧ + /

      * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.