언어 및 도구들 공부/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 으로 엮여지기에, 카디션 곱이 발생하게 된다.