언어 및 도구들 공부/DATABASE
MySQL 서브쿼리 연습문제
Dr.Mlem
2024. 10. 7. 21:20
이광훈 과 같은 학과의 학생들에 대한 평균 몸무게보다 몸무게가 적게 나가는 학생들의
이름, 몸무게, 소속학과이름, 담당교수 이름을 조회하시오
(담당교수 없으면 출력 x)
-> 담당교수번호로 교수 테이블에 inner join을 걸어서,
담당교수 번호가 없는 학생들을 나오지 않게 제거.
하던대로 deptno 로 걸면, 조건에 문제가 생겨서 카디션 곱이 생김.
```sql
mysql> select s.name, s.weight, d.dname, p.name
-> from student s
-> inner join professor p
-> on s.deptno = p.deptno -- 담당교수 없는 학생들을 제거하기 위함
-> inner join department d
-> on s.deptno = d.deptno
-> where s.weight <
-> (select avg(weight) from student where deptno =
-> (select deptno from student where name = '이광훈')
-> )
-> ;
+--------+--------+----------------+--------+
| name | weight | dname | name |
+--------+--------+----------------+--------+
| 지은경 | 42 | 컴퓨터공학과 | 전은지 |
| 임유진 | 54 | 컴퓨터공학과 | 전은지 |
| 김진영 | 48 | 멀티미디어학과 | 권혁일 |
| 김진경 | 51 | 전자공학과 | 이재우 |
+--------+--------+----------------+--------+
4 rows in set (0.00 sec)
```
on s.deptno = p.deptno -- 담당교수 없는 학생들을 제거하기 위함
-> 이렇게 조인을 거는 조건에서, 둘 다 프라이머리 키가 아닌 상황에서 조인을 걸어버리면, n대 n 으로 엮여지기에, 카디션 곱이 발생하게 된다.