DB/명령프롬프트 - mysql 예시

[MySQL] ERD 대학수강프로그램 3. table이용 예시 (join)

congs 2023. 3. 29. 17:09

( join으로 가져올 경우,  from뒤에는 관계테이블 명 = 가운데 연결되어 있는 테이블 을 넣기! )

 

1. 김영철이 수강하는 과목명을 출력 ( 중복과목이 있는 경우 (학기)도 함께 출력)

mysql> select concat(su.su_title, '(' ,c.co_term, '학기)' ) as "김영철이 수강하는 과목명( 학기 )"
    -> from attend a
    -> join student s on at_st_num = s.st_num
    -> join course c on at_co_num = c.co_num
    -> join subject su on co_su_num = su.su_num
    -> where st_name = "김영철"
    -> order by co_term;
+----------------------------------+
| 김영철이 수강하는 과목명( 학기 ) |
+----------------------------------+
| 대학수학(1학기)                  |
| 컴퓨터개론(1학기)                |
| 운영체제(1학기)                  |
| 대학수학(2학기)                  |
| 글쓰기(2학기)                    |
| 영어(2학기)                      |
+----------------------------------+
6 rows in set (0.00 sec)

 

2. 강길동 교수가 지도하는 학생명 출력

mysql> select s.st_name as "강길동교수님이 지도하는 학생명" , gu_year as "지도학기" from guide g
    -> join student s on gu_st_num = s.st_num
    -> join professor p on gu_pr_num = p.pr_num
    -> where pr_name = "강길동"
    -> order by st_name;
+--------------------------------+----------+
| 강길동교수님이 지도하는 학생명 | 지도학기 |
+--------------------------------+----------+
| 강철수                         | 2020     |
| 박철수                         | 2020     |
+--------------------------------+----------+
2 rows in set (0.01 sec)

 

3. 대학수학 과목을 수강하는 수강자 명단 출력

mysql> select s.st_name as "대학수학 과목을 수강하는 수강자" ,co_term as "수강 학기" from attend a
    -> join student s on at_st_num = s.st_num
    -> join course c on at_co_num = c.co_num
    -> join subject su on co_su_num = su.su_num
    -> where su_title = "대학수학"
    -> order by co_term;
+---------------------------------+----------+
| 대학수학 과목을 수강하는 수강자 | 수강학기 |
+---------------------------------+----------+
| 김영철                          | 1        |
| 나영희                          | 1        |
| 강철수                          | 1        |
| 박철수                          | 1        |
| 강군                            | 1        |
| 김영철                          | 2        |
| 나영희                          | 2        |
| 강철수                          | 2        |
| 박철수                          | 2        |
| 강군                            | 2        |
+---------------------------------+----------+
10 rows in set (0.00 sec)

// 중복제거하는 경우
mysql> select distinct s.st_name as "대학수학 과목을 수강하는 수강자" from attend a
    -> join student s on at_st_num = s.st_num
    -> join course c on at_co_num = c.co_num
    -> join subject su on co_su_num = su.su_num
    -> where su_title = "대학수학"
    -> order by st_name;
+---------------------------------+
| 대학수학 과목을 수강하는 수강자 |
+---------------------------------+
| 강군                            |
| 강철수                          |
| 김영철                          |
| 나영희                          |
| 박철수                          |
+---------------------------------+
5 rows in set (0.00 sec)