월요일, 1월 04, 2021

[유튜브 방송] (즐겁게 배우는 SQL #25) 보너스 - 지금까지 배운 내용 응용하기

[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 25편을 공개해드리겠다. 25편은 지금까지 배운 내용을 토대로 실제 문제를 풀어본다.

2021년 1월 4일자 [즐겁게 배우는 SQL #25] 보너스 - 지금까지 배운 내용 응용하기 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 문제 분석
  • 04:00 테이블 생성과 데이터 입력
  • 06:32 일단 테이블 2개만 살펴보자
  • 12:40 테이블 3개로 확장

방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1: 문제 분석
    테이블:
    course	cno	cname		credit	dept	prname
    	C123	프로그래밍	3	컴퓨터	PrKimDo
    	C312	자료구조		3	컴퓨터	PrKimDo
    	C324	파일처리		3	컴퓨터	PrKimDo
    	C413	데이터베이스	3	컴퓨터	PrKimDo
    	E412	반도체		3	전자	PrKimDo
    					
    enrol	sno	cno	grade	midterm	finalterm
    	100	C413	A	90	95
    	100	E412	A	95	95
    	200	C123	B	85	80
    	300	C312	A	90	95
    	300	C324	C	75	75
    	400	C312	A	90	95
    	400	C413	B	80	85
    	400	E412	C	65	75
    	500	C312	B	85	80
    					
    student	sno	sname	dept	year	
    	100	Kim1	컴퓨터	4	
    	200	Kim2	전기	3	
    	300	Kim3	컴퓨터	1	
    	400	Kim4	컴퓨터	4	
    	500	Kim5	산공	2	
    
    문제: 컴퓨터공학과 4학년 모든 학생이 듣는 과목 이름을 출력
    
  • 단계 2: 테이블 생성과 데이터 입력
    1. SQL> CREATE TABLE course ( cno TEXT PRIMARY KEY, cname TEXT NOT NULL, credit INTEGER, dept TEXT NOT NULL, pname TEXT NOT NULL);
    2. SQL> CREATE TABLE enrol (sno INTEGER, cno TEXT, grade TEXT NOT NULL, midterm INTEGER, finalterm INTEGER);
    3. SQL> CREATE TABLE student (sno INTEGER PRIMARY KEY, sname TEXT NOT NULL, dept TEXT NOT NULL, year INTEGER);
    4. SQL> INSERT INTO course values ('C123', '프로그래밍', 3, '컴퓨터', 'PrKimDo');
    5. SQL> INSERT INTO course values ('C312', '자료구조', 3, '컴퓨터', 'PrKimDo');
    6. SQL> INSERT INTO course values ('C324', '파일처리', 3, '컴퓨터', 'PrKimDo');
    7. SQL> INSERT INTO course values ('C413', '데이터베이스', 3, '컴퓨터', 'PrKimDo');
    8. SQL> INSERT INTO course values ('E412', '반도체', 3, '전자', 'PrKimDo');
    9. SQL> INSERT INTO enrol values (100, 'C413', 'A', 90, 95);
    10. SQL> INSERT INTO enrol values (100, 'E412', 'A', 95, 95);
    11. SQL> INSERT INTO enrol values (200, 'C123', 'B', 85, 80);
    12. SQL> INSERT INTO enrol values (300, 'C312', 'A', 90, 95);
    13. SQL> INSERT INTO enrol values (300, 'C324', 'C', 75, 75);
    14. SQL> INSERT INTO enrol values (400, 'C312', 'A', 90, 95);
    15. SQL> INSERT INTO enrol values (400, 'C413', 'B', 80, 85);
    16. SQL> INSERT INTO enrol values (400, 'E412', 'C', 65, 75);
    17. SQL> INSERT INTO enrol values (500, 'C312', 'B', 85, 80);
    18. SQL> INSERT INTO student values (100, "Kim1", '컴퓨터', 4);
    19. SQL> INSERT INTO student values (200, "Kim2", '전기', 3);
    20. SQL> INSERT INTO student values (300, "Kim3", '컴퓨터', 1);
    21. SQL> INSERT INTO student values (400, "Kim4", '컴퓨터', 4);
    22. SQL> INSERT INTO student values (500, "Kim5", "산공", 2);
  • 단계 3: 일단 테이블 2개만 살펴보자
    1. SQL> select distinct enrol.cno, count(enrol.sno) as sno_cnt from enrol, student where student.sno = enrol.sno and student.dept = '컴퓨터' and student.year = 4 GROUP BY enrol.cno;
    2. SQL> select distinct enrol.cno, count(enrol.sno) as sno_cnt from enrol, student where student.sno = enrol.sno and student.dept = '컴퓨터' and student.year = 4 GROUP BY enrol.cno having sno_cnt = ( 2 ) ;
  • 단계 4: 일단 테이블 2개만 살펴보자
    1. SQL> select distinct enrol.cno, course.cname, count(enrol.sno) as sno_cnt from enrol, student join course on enrol.cno = course.cno where student.sno = enrol.sno and student.dept = '컴퓨터' and student.year = 4 GROUP BY enrol.cno having sno_cnt = ( select count(c.sno) from ( select enrol.sno from enrol, student where student.sno = enrol.sno and student.dept = '컴퓨터' and student.year = 4 GROUP BY enrol.sno) as c) ;
EOB

댓글 없음:

댓글 쓰기