안녕하세요 지금 exists 의 관련해서 공부하고 있는데;;
이해가 안되는 부분이 있어 어떻게 이해를 해야될지 몰라 질문드립니다.
exists 란 서브 쿼리의 값이 본쿼리에 있으면 출력하고
not exists 란 없는 값을 출력하는 것으로 알고 있습니다.
여기까지는 제가 이해를 했습니다.
이와 같은 테이블이 있다고 가정햇을때
select sname from sailors where exists
(select * from reserves where sailors.sid=reserves.sid);
를 하면 22, 31,64,74 가 존재하는 sailors의 열을 출력하는거 라고 생각을 했습니다.
문제는 다음입니다
모든 보트를 예약한 사람을 찾으라는 문제였습니다.
이 테이블에선 모든 배를 예약한 dustin 을 찾는 것이 목표입니다.
여기서 답이 밑에 부분인데 전혀 이해를 못하겠습니다
SELECT S.sname
FROM Sailors S
WHERE NOT EXISTS (SELECT B.bid
FROM Boats B
WHERE NOT EXISTS (SELECT R.bid
FROM Reserves R
WHERE R.bid=B.bid AND R.sid=S.sid))
위와 같이 하면 신기하게 답이 나옵니다.
그러나 제가 생각하기엔 이는 보트를 하나도 예약하지 않은 사람이 아닌 사람을 찾는 것이 아닌가요....???
읽어주셔서 감사합니다...
SELECT b.bid FROM boats b WHERE NOT EXISTS (SELECT r.bid FROM reserves r WHERE r.bid = b.bid AND r.SID = s.SID) ->보트테이블 기준으로 SID로 예약된 건이 없는 보트 SELECT s.sname FROM sailors s WHERE NOT EXISTS (SELECT b.bid FROM boats b WHERE NOT EXISTS (SELECT r.bid FROM reserves r WHERE r.bid = b.bid AND r.SID = s.SID ) ) ->세일러테이블 기준으로 (보트테이블 기준으로 SID로 예약된 건이 없는 보트) 가 없음(not exists 이므로) ->세일러테이블 기준으로 모든 보트를 예약한 사람