김갱환
맨땅에 코딩
김갱환
전체 방문자
오늘
어제
  • 분류 전체보기 (239)
    • ⁂ 맨땅에 코딩 (11)
      • : Story (3)
      • : MiniProject 'MyWeb' (1)
      • : Final Project (5)
      • : Josa-Moa 한국어 조사 처리 프로젝트 (1)
    • —————Frontend——————————————.. (0)
    • ⁂ HTML (10)
      • : 기본 익히기 (10)
    • ⁂ CSS (15)
      • : 기본 익히기 (15)
    • ⁂ Java Script (32)
      • : 기본 익히기 (28)
      • : 자바스크립트 라이브러리 (1)
      • : 연습 문제 (3)
    • ⁂ jQuery (11)
      • : 기본 익히기 (11)
    • ⁂ Bootstrap (3)
      • : 기본 익히기 (3)
    • ⁂ TailWind CSS (1)
    • ⁂ AJAX (5)
      • : 기본 익히기 (5)
    • ⁂ Vue.js (3)
      • : 기본 익히기 (3)
    • —————DB : Data Base————————.. (0)
    • ⁂ Oracle DB (27)
      • : 기본 익히기 (24)
      • : 연습 문제 (3)
    • ⁂ MyBatis Framework (15)
      • : 기본 익히기 (15)
    • —————Backend———————————————.. (0)
    • ⁂ Java (62)
      • : 기본 익히기 (42)
      • : JDBC - Java DataBase Conn.. (4)
      • : Crawling (2)
      • : 독학으로 공부하기(과거) (11)
      • : 연습문제 (3)
    • ——————Web————————————————— (0)
    • ⁂ JSP (28)
      • : 기본 익히기 (28)
    • ⁂ Spring FrameWork (15)
      • : Legacy Project (1)
      • : 기본 익히기(Boot 기반) (14)
    • ——————————————————————— (0)
    • ⁂ Error Note (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 백앤드
  • web.xml수정
  • 코딩공부 #자바공부
  • httperror
  • 프론트앤드
  • 풀스택
  • 개발자
  • http에러메세지
  • 코딩 #코딩공부 #상수 #리터럴 #형변환 #개발자 #자바 #자바공부 #자바독학
  • ErrorPage
  • 비트연산자 #코딩공부 #자바공부 #코딩 #자바 #프로그래밍 #개발자
  • 연산자 #기본연산자 #코딩 #자바 #독학 #자바공부 #자바연산자
  • 자바공부
  • HTML공부
  • 코딩 #코딩공부 #프론트앤드 #백앤드 #풀스택개발자
  • 코딩공부
  • 객체지향프로그래밍
  • 코딩공부 #코딩 #자바 #자바독학 #자바공부 #개발자 #프론트앤드 #백앤드 #풀스택
  • 코딩
  • 자바

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
김갱환

맨땅에 코딩

⁂ Oracle DB/: 연습 문제

[Oracle] Paging까지 배운 후 연습 문제

2022. 8. 29. 13:11

1. 테이블 생성

1. 테이블 생성
----------------------------- 학생테이블
create table tb_student(
   hakno    char(5)     not null            -- 학번
  ,uname    varchar(20) not null            -- 이름
  ,email    varchar(20) unique              -- 이메일
  ,address  varchar(20) not null            -- 주소
  ,phone    varchar(20)                     -- 전화번호
  ,regdt    date        default sysdate     -- 등록일
  ,primary key(hakno)                       -- 기본키
);

drop table tb_student;
delete table tb_student;

----------------------------- 과목테이블
create table tb_gwamok(
   gcode    char(4)      not null           -- 과목코드 (p:프로그램교과목, d:디자인교과목)
  ,gname    varchar(20)  not null           -- 과목이름
  ,ghakjum  number(2)    default 1          -- 학점
  ,regdt    date         default sysdate    -- 등록일    
  ,primary key(gcode)                       -- 기본키
);

drop table tb_gwamok;

----------------------------- 수강테이블
create table tb_sugang(
   sno    number(3)  not null               -- 일련번호
  ,hakno  char(5)    not null               -- 학번
  ,gcode  char(4)    not null               -- 과목코드
  ,primary key(sno)                         -- 기본키
);

drop table tb_sugang;


2. 수강테이블 시퀀스 생성
create sequence sugang_seq;

drop sequence sugang_seq;


3. 행추가

----------------------------- tb_student테이블에 행 추가하기
insert into tb_student(hakno,uname,address,phone,email)
values('g1001','홍길동','서울','111-5558','11@naver.com');

insert into tb_student(hakno,uname,address,phone,email)
values('g1002','홍길동','제주','787-8877','33@daum.net');

insert into tb_student(hakno,uname,address,phone,email)
values('g1003','개나리','서울','554-9632','77@naver.com');

insert into tb_student(hakno,uname,address,phone,email)
values('g1004','홍길동','부산','555-8844','88@daum.net');

insert into tb_student(hakno,uname,address,phone,email)
values('g1005','진달래','서울','544-6996','33@nate.com');

insert into tb_student(hakno,uname,address,phone,email)
values('g1006','개나리','제주','777-1000','66@naver.com');


----------------------------- tb_gwamok테이블에 행 추가하기
insert into tb_gwamok(gcode,gname,ghakjum) values('p001','JAVA',3);
insert into tb_gwamok(gcode,gname,ghakjum) values('p002','Oracle',3);
insert into tb_gwamok(gcode,gname,ghakjum) values('p003','JSP',2);
insert into tb_gwamok(gcode,gname,ghakjum) values('d001','HTML',1);
insert into tb_gwamok(gcode,gname,ghakjum) values('d002','포토샵',5);
insert into tb_gwamok(gcode,gname,ghakjum) values('d003','일러스트',3);
insert into tb_gwamok(gcode,gname,ghakjum) values('d004','CSS',1);
insert into tb_gwamok(gcode,gname,ghakjum) values('p004','Python',3);
insert into tb_gwamok(gcode,gname,ghakjum) values('p005','AJAX',2);


----------------------------- tb_sugang테이블에 행 추가하기
insert into tb_sugang(sno,hakno,gcode) values(sugang_seq.nextval,'g1001','p001');
insert into tb_sugang(sno,hakno,gcode) values(sugang_seq.nextval,'g1002','p002');
insert into tb_sugang(sno,hakno,gcode) values(sugang_seq.nextval,'g1002','p001');
insert into tb_sugang(sno,hakno,gcode) values(sugang_seq.nextval,'g1002','p003');
insert into tb_sugang(sno,hakno,gcode) values(sugang_seq.nextval,'g1001','p003');
insert into tb_sugang(sno,hakno,gcode) values(sugang_seq.nextval,'g1001','p004');
insert into tb_sugang(sno,hakno,gcode) values(sugang_seq.nextval,'g1005','p001');
insert into tb_sugang(sno,hakno,gcode) values(sugang_seq.nextval,'g1005','d001');
insert into tb_sugang(sno,hakno,gcode) values(sugang_seq.nextval,'g1005','d002');
insert into tb_sugang(sno,hakno,gcode) values(sugang_seq.nextval,'g1005','d003');
insert into tb_sugang(sno,hakno,gcode) values(sugang_seq.nextval,'g1001','d001');
insert into tb_sugang(sno,hakno,gcode) values(sugang_seq.nextval,'g1001','p002');
insert into tb_sugang(sno,hakno,gcode) values(sugang_seq.nextval,'g1006','p001');
insert into tb_sugang(sno,hakno,gcode) values(sugang_seq.nextval,'g1001','p005');
/////////////////////////////////////////////////////////////////////////////////

commit;

-- tb_student 테이블 전체 레코드 갯수
select count(*) from tb_student;    -- 6

-- tb_gwamok 테이블 전체 레코드 갯수
select count(*) from tb_gwamok;    -- 9

-- tb_sugang 테이블 전체 레코드 갯수
select count(*) from tb_sugang;    -- 14
/////////////////////////////////////////////////////////////////////////////////

 

 

2. 문제

 

문1) 디자인 교과목중에서 학점이 제일 많은 교과목을 수강신청한 명단을 조회하시오
    (학번, 이름, 과목코드)
    

    g1005 진달래 d002

 

 

 

문2) 학번별 수강신청한 총학점을 구하고 학번별 정렬해서 줄번호 4~6행 조회하시오
    - 단, 수강신청하지 않은 학생의 총학점도 0으로 표시

        g1004 0 4
        g1005 12 5
        g1006 3 6

 

 

문3) 학번별로 수강신청 총학점을 구하고, 총학점순으로 내림차순 정렬후
     위에서 부터 1건만 조회하시오 (학번, 이름, 총학점)

 

        g1001 홍길동 14 1

 

 

 

3. 풀이

 

눌러서 확인하세요 
문1) 디자인 교과목중에서 학점이 제일 많은 교과목을 수강신청한 명단을 조회하시오
    (학번, 이름, 과목코드)
    
    g1005	진달래	d002
    ;

-- 1) 디자인 교과목 신청명단
select SU.hakno, uname, SU.gcode, gname, ghakjum
from tb_sugang SU join tb_student ST
on SU.hakno = ST.hakno join tb_gwamok GW
on SU.gcode = GW.gcode
where SU.gcode like 'd%';

-- 1)에 조건주기
select *
from(
    select SU.hakno, uname, SU.gcode, ghakjum
    from tb_sugang SU join tb_student ST
    on SU.hakno = ST.hakno join tb_gwamok GW
    on SU.gcode = GW.gcode
    where SU.gcode like 'd%'
    ) AA
where ghakjum = (
                select max(ghakjum)
                from tb_gwamok
                where gcode like 'd%'
                );

-- 1)하고 2)를 합칠 수도 있구나~
select SU.hakno, uname, SU.gcode
from tb_sugang SU join tb_student ST
on SU.hakno = ST.hakno join tb_gwamok GW
on SU.gcode = GW.gcode
where SU.gcode like 'd%' and ghakjum = (
                                        select max(ghakjum)
                                        from tb_gwamok
                                        where gcode like 'd%'
                                        );


문2) 학번별 수강신청한 총학점을 구하고 학번별 정렬해서 줄번호 4~6행 조회하시오
    - 단, 수강신청하지 않은 학생의 총학점도 0으로 표시

        g1004	0	4
        g1005	12	5
        g1006	3	6

-- 1) 전체 학생들의 총학점 구하기
select ST.hakno, sum(nvl(GW.ghakjum, 0))
from tb_student ST left join tb_sugang SU
on ST.hakno = SU.hakno left join tb_gwamok GW
on SU.gcode = GW.gcode
group by ST.hakno
order by ST.hakno;


-- 2) AA 테이블로 만들어서 rownum로 줄번호 붙이기
select hakno, sumhak, rownum
from (
    select ST.hakno as hakno, sum(nvl(GW.ghakjum, 0)) as sumhak
    from tb_student ST left join tb_sugang SU
    on ST.hakno = SU.hakno left join tb_gwamok GW
    on SU.gcode = GW.gcode
    group by ST.hakno
    order by ST.hakno
    ) AA;
    
    
select *
from tb_student ST left join tb_sugang SU
on ST.hakno = SU.hakno;

-- 3) 2)의 결과에 붙여진 줄번호에 조건절로 4~6행만 조회하기
select *
from (
    select hakno, sumhak, rownum as rnum
    from (
        select ST.hakno as hakno, sum(nvl(GW.ghakjum, 0)) as sumhak
        from tb_student ST left join tb_sugang SU
        on ST.hakno = SU.hakno left join tb_gwamok GW
        on SU.gcode = GW.gcode
        group by ST.hakno
        order by ST.hakno
        ) AA
    ) BB
where rnum between 4 and 6;


문3) 학번별로 수강신청 총학점을 구하고, 총학점순으로 내림차순 정렬후
     위에서 부터 1건만 조회하시오 (학번, 이름, 총학점) 
-- 수강테이블에 행추가 해주세요
-- (총학점이 다 같은 값이여서 결과확인하기가 조금 애매 합니다)
insert into tb_sugang(sno,hakno,gcode) values(sugang_seq.nextval,'g1001','p005');
commit;


-- 1) 학번별 수강신청 총학점 구한 뒤 총학점 순으로 내림차순 정렬
select SU.hakno, uname, sum(ghakjum)
from tb_sugang SU join tb_student ST
on SU.hakno = ST.hakno join tb_gwamok GW
on SU.gcode = GW.gcode
group by SU.hakno, uname
order by sum(ghakjum) desc;

-- 2) 1)의 결과를 AA 테이블로 만든 뒤 rownum을 붙이고 1건만 조회
select hakno, uname, sum_hak, rownum
from (
    select SU.hakno, uname, sum(ghakjum) as sum_hak
    from tb_sugang SU join tb_student ST
    on SU.hakno = ST.hakno join tb_gwamok GW
    on SU.gcode = GW.gcode
    group by SU.hakno, uname
    order by sum(ghakjum) desc
    ) AA
where rownum = 1;
저작자표시 비영리 동일조건 (새창열림)

'⁂ Oracle DB > : 연습 문제' 카테고리의 다른 글

[Oracle] Join 연습문제  (0) 2022.08.26
[Oracle] SQL문 연습문제(문제와 풀이)  (0) 2022.08.24
    '⁂ Oracle DB/: 연습 문제' 카테고리의 다른 글
    • [Oracle] Join 연습문제
    • [Oracle] SQL문 연습문제(문제와 풀이)
    김갱환
    김갱환
    코딩의 코자도 모르는 이의 공부 기록장

    티스토리툴바