• 티스토리 홈
  • 프로필사진
    조별하
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
조별하
  • 프로필사진
    조별하
    • 분류 전체보기 (124)
      • 1. 공부 (0)
        • 기술 면접 (0)
      • 2. 웹개발 (7)
        • Java (1)
        • IT 정보 (5)
        • Error 모음 (1)
      • 3. 개인관심 (1)
        • 전자 (1)
      • GITHUB (5)
      • IT 기술 면접 (3)
      • COMPUTER (2)
      • TASK (1)
      • LANGUAGES (20)
        • Python (3)
        • Django (6)
        • Java (7)
        • Node (1)
        • Jsp (2)
        • R (1)
      • 데이터과학 (2)
        • 머신러닝 및 딥러닝 (2)
      • DATABASE (5)
        • Oracle (2)
      • ISSUE (10)
        • Django (4)
        • Drf (2)
        • Javascript (1)
        • Git (1)
      • JAVA 교육 (65)
        • Java (3)
        • Jquery (2)
        • Sql (16)
        • Jdbc (1)
        • Db (2)
        • Jsp (9)
        • myWeb (15)
        • Servlet (4)
        • Spring (12)
        • Crawling (0)
        • Hosting (1)
      • 정보처리산업기사 (1)
      • EDUCATION (2)
        • IoT 서비스 (2)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • 2019/07/29 join한 내용을 가지고 문제 풀이
        2019년 07월 29일
        • 조별하
        • 작성자
        • 2019.07.29.:18

        [전 수업] 3개의 테이블을 이용해 조인해보고 문제를 풀어보았다

        [본 수업] 테이블을 이용해 조회하는 능력을 기르자


        1.inner join(생략가능)

        수강테이블 학생테이블 과목테이블 세개를 조인하여 논리테이블을 생성  / 수강테이블의 학번으로 오름차순으로 정열하였다                                                                                                     

         

        2. 문) 학번별 수강 신청과목의 총학점을 조회

        총학점을 count()함수로 잘못 조회하였다



        select AA.hakno,AA.uname,sum(AA.ghakjum)
         from (       select su.hakno,stu.uname,su.gcode,GM.gname,GM.ghakjum   from tb_sugang SU inner join  tb_student STU

        on SU.hakno=STU.hakno inner join tb_gwamok GM
        on SU.gcode=GM.gcode) AA
        group by AA.hakno,AA.uname;

        ※서브쿼리를 이용하지 않아도 조회 할 수 있다


        select su.hakno,stu.uname,sum(GM.ghakjum)
                from tb_sugang SU inner join  tb_student STU
                on SU.hakno=STU.hakno inner join tb_gwamok GM
                on SU.gcode=GM.gcode
                group by su.hakno,stu.uname;

         

        ▶구하는 또 다른 방법

         

        select AA.hakno,AA.총학점,STU.uname
            from(
                select SU.hakno,sum(GM.ghakjum) as 총학점
                from tb_sugang SU join tb_gwamok GM
                on SU.gcode=GM.gcode
                group by SU.hakno
                ) AA join tb_student STU
                on AA.hakno=STU.hakno
                order by 총학점;

         

        3. 디자인 교과목 대상으로 학번별 수강신청과목의 총학점을 조회(단,디자인교과목만)

        select AA.hakno,AA.uname,sum(aa.ghakjum)
                from(   select su.hakno,stu.uname,su.gcode,GM.gname,GM.ghakjum
        from tb_sugang SU join tb_student STU
        on SU.hakno=STU.hakno join tb_gwamok GM
        on SU.gcode=GM.gcode
        where su.gcode like 'd%') AA
                group by AA.hakno,AA.uname;

         

        4.문) 과목코드가 p001을 신청한 학생들의 명단을 조회

         

        select SU.gcode,GM.gname,SU.hakno,STU.uname
        from tb_sugang SU inner join  tb_student STU
        on SU.hakno=STU.hakno inner join tb_gwamok GM
        on SU.gcode=GM.gcode
        where SU.gcode='p001';

         

         

        5. 프로그램 교과목중에서 학점이 제일 많은 과목을 신청한 학생들 명단을 조회

         

         

        select * from tb_gwamok where gcode like 'p%';

         

        2) 프로그램 교과목중에서 가장 많은 학점 조회

         

        select max(ghakjum)
            from tb_gwamok
            where gcode like 'p%';

         

         

        3) 프로그램 교과목중에서 가장 많은 학점을 가진 교과목 조회

         

        select gcode,ghakjum
            from tb_gwamok
            where ghakjum=(select max(ghakjum)
                          from tb_gwamok
                          where gcode like 'p%')
            and gcode like 'p%';

         

        4) 프로그램교과목중에서 학점이 가장 많은 교과목을 신청한 학번

        select tb_sugang.gcode,tb_sugang.hakno
        from tb_sugang
        where gcode in(select gcode
                            from tb_gwamok
                            where ghakjum=(select max(ghakjum)
         from tb_gwamok
         where gcode like 'p%')
         and gcode like 'p%'
                    );

         

        5) 프로그램교과목중에서 학점이 가장 많은 교과목을 신청한 학생의 명단

        select AA.gcode,AA.hakno,STU.uname
            from(
                    select tb_sugang.gcode,tb_sugang.hakno
                    from tb_sugang
                    where gcode in(select gcode
                                        from tb_gwamok
                                    where ghakjum=(select max(ghakjum)
                                                          from tb_gwamok
                                                        where gcode like 'p%')
                                                        and gcode like 'p%'
                    ))AA join tb_student STU
            on AA.hakno=STU.hakno;

         

        6. 문)수강신청을 하지 않은 학생들의 명단을 조회하시오

         

        1.수강신청 한 학번

        select hakno
          from tb_sugang
          group by hakno;

         

        2.수강신청 한 학생들

        select hakno,uname
            from tb_student
            where hakno in (select hakno from tb_sugang
                              group by hakno);

         

        3.수강신청을 하지않은 학생들

         

        select hakno,uname
            from tb_student
            where hakno not in (select hakno from tb_sugang
                              group by hakno);

         

         


        7. 내부조인(inner join)
        두 테이블에 공통으로 존재하는 칼럼을 이용하는 방식 (생략가능)
          
          select STU.hakno,STU.uname,STU.phone,SU.gcode
          from tb_student STU inner join tb_sugang SU
          on STU.hakno=SU.hakno;

        8. left join
         왼쪽 테이블의 모든 데이터와 오른쪽 테이블의 동일한 데이터를 추출

        ※수강신청을 한 학생, 하지 않은 학생들 모두 조회
            select STU.hakno,STU.uname,STU.phone,SU.gcode
            from tb_student STU left outer join tb_sugang SU
            on STU.hakno=SU.hakno;                                 --outer 생략가능

        9. right outer join
         오른쪽 테이블의 모든 데이터와 왼쪽 테이블의 동일 데이터를 추출
            select STU.hakno,STU.uname,STU.phone,SU.gcode
            from tb_sugang SU right outer join tb_student STU
            on STU.hakno=SU.hakno;


        10. 수강신청을 하지 않은 과목들을 조회

        1)


        select gcode,gname

            from tb_gwamok
            where gcode not in(
        select gcode from tb_sugang group by gcode );

        2) left join 을 이용해서 수강신청되지 않은 hakno를 null값으로 구하기

        select GM.gcode,GM.gname,SU.hakno
                         from tb_gwamok GM left outer join tb_sugang SU
            on GM.gcode=SU.gcode;

        3) hakno가 null인걸 이용하여 수강신청되지 않은 과목 조회

        select GM.gcode,GM.gname,SU.hakno
            from tb_gwamok GM left outer join tb_sugang SU
            on GM.gcode=SU.gcode 
            where SU.gcode is null;

        'JAVA 교육 > Sql' 카테고리의 다른 글

        2019/07/30 트랜잭션  (0) 2019.07.30
        2019/07/29 rownum  (0) 2019.07.29
        2019/07/25 Table Join 테이블 조인  (0) 2019.07.25
        2019/07/23 Group by 명령어 & 서브쿼리  (0) 2019.07.24
        2019/07/22 오라클 함수  (0) 2019.07.24
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바