[유튜브 방송] (즐겁게 배우는 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: 테이블 생성과 데이터 입력
- SQL> CREATE TABLE course ( cno TEXT PRIMARY KEY, cname TEXT NOT NULL, credit INTEGER, dept TEXT NOT NULL, pname TEXT NOT NULL);
- SQL> CREATE TABLE enrol (sno INTEGER, cno TEXT, grade TEXT NOT NULL, midterm INTEGER, finalterm INTEGER);
- SQL> CREATE TABLE student (sno INTEGER PRIMARY KEY, sname TEXT NOT NULL, dept TEXT NOT NULL, year INTEGER);
- SQL> INSERT INTO course values ('C123', '프로그래밍', 3, '컴퓨터', 'PrKimDo');
- SQL> INSERT INTO course values ('C312', '자료구조', 3, '컴퓨터', 'PrKimDo');
- SQL> INSERT INTO course values ('C324', '파일처리', 3, '컴퓨터', 'PrKimDo');
- SQL> INSERT INTO course values ('C413', '데이터베이스', 3, '컴퓨터', 'PrKimDo');
- SQL> INSERT INTO course values ('E412', '반도체', 3, '전자', 'PrKimDo');
- SQL> INSERT INTO enrol values (100, 'C413', 'A', 90, 95);
- SQL> INSERT INTO enrol values (100, 'E412', 'A', 95, 95);
- SQL> INSERT INTO enrol values (200, 'C123', 'B', 85, 80);
- SQL> INSERT INTO enrol values (300, 'C312', 'A', 90, 95);
- SQL> INSERT INTO enrol values (300, 'C324', 'C', 75, 75);
- SQL> INSERT INTO enrol values (400, 'C312', 'A', 90, 95);
- SQL> INSERT INTO enrol values (400, 'C413', 'B', 80, 85);
- SQL> INSERT INTO enrol values (400, 'E412', 'C', 65, 75);
- SQL> INSERT INTO enrol values (500, 'C312', 'B', 85, 80);
- SQL> INSERT INTO student values (100, "Kim1", '컴퓨터', 4);
- SQL> INSERT INTO student values (200, "Kim2", '전기', 3);
- SQL> INSERT INTO student values (300, "Kim3", '컴퓨터', 1);
- SQL> INSERT INTO student values (400, "Kim4", '컴퓨터', 4);
- SQL> INSERT INTO student values (500, "Kim5", "산공", 2);
- 단계 3: 일단 테이블 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;
- 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개만 살펴보자
- 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) ;
댓글 없음:
댓글 쓰기