Set Membership
하.... not exists 와 except을 활용한 생물학 문제... 겁나 이해하기가 어려웠다.
일단 이거...Mysql로는 안돌아간다.
mysql에서는 except가 안 먹는 것 같았고 버그도 핵 많고
postgresql에서는 돌아가길래 넘어왔다.
튤의 문제인제 DBMS문제인지는 모르겠으나... mysql 가능하면 안 다루고 싶어질 정도로 별로임.
암튼.,
겁나 난해한 학문을 위한 문제
절대 짜라면 이렇게 못 짤것 같은 문제
일단 이 자료 꿈꾸는 개발자, DBA 커뮤니티에 그대로 있는 자료 같아서 아래와 같이 데이터 넣어보았다.
자자 데이터는 아래와 같이 생성했고 이제 한줄한줄 보겠다.
( select course_id
from course
where dept_name = 'Biology') //결과값으로 A,B 나온다
( select T.course_id
from takes T
where S.ID= T.ID) //ID 1번부터 5번까지 돌면서 비교한다.
id 1번 일때
(A B) except (A B C) 값이 없다.
not exist (X) --> 1 번은 참으로 나오게 됨.
id 2번 일때
(A B) except (A B) 역시 그대로 빼져서 값이 없다.
not exist(안에 값이 없으니 참) ---> 2번도 참으로 나오게 됨.
id 3번 일때,
(A B) except (A C) --> B 가 남게 된다.
not exist (B) 거짓이 되고 3은 나오지 않는다.
id 4번 일때,
(A B) except ( B C) --> A 가 남게 된다.
역시 not exist안에 값이 있어서 거짓 안나온다.
마지막으로 id 5 일때,
(A B) except (A) ---> B 가 남게되어
역시나 not exist안에 값이 있어서 거짓 안나온다.
그래서 최종 결과값은 아래와 같이 나오게 된다.
아주 신기하게도.
이런거 머리속으로 바로 딱 나와야하는데 이렇게 손이 고생하고 나오는 거 보면 아직 참 멀었다.
참고한 사이트
http://www.gurubee.net/article/69408
'IT' 카테고리의 다른 글
쉽지만 유용한 쿼리들 정리 (0) | 2021.10.19 |
---|---|
SQL Quiz N번째 높은 급여 찾기 (0) | 2021.10.19 |
Inner Join, Outer Join (0) | 2021.10.17 |
[Oracle] GROUP BY ,Having 이해를 위한 SQL 연습 문제 (0) | 2021.10.17 |
Fast Campus 강의 추천 | 데이터베이스와 SQLD 합격패스 (0) | 2021.10.17 |
댓글