2013-04-20 4 views
1
내가 최종 시험 공부

이것은 과거 시험에서 온다 :이 쿼리는 어떤 기능을합니까?

테이블 : 간호사 - (NID : 문자열, 연령 :, nname이를 int로 실제 급여 : 실제, SID를 : int)를
테이블 : 관리자 - (SID가 :를 INT, 평가 : 실제)
테이블 : (- - 병원 : WorksIn (꾸벅 꾸벅는 :
표 실제) :
, 시간을 int로 :
는, 숨겨 int로 hid : int, hname : string, tid : int)
테이블 : 타운 - (TID : INT, TNAME : 문자열 시장 : 문자열)

다음 쿼리는 검색하는지 설명 :

SELECT nname 
FROM Nurse N 
WHERE NOT EXISTS 
    ( (SELECT H.hid 
      FROM Hospital H 
      WHERE H.town = ‘Toronto’) 
    EXCEPT 
     (SELECT W.hid 
     FROM WorksIn W 
     WHERE N.nid = W.nid)) 

이 쿼리는 어떤 기능을 수행합니까? 하위 쿼리가 토론토의 모든 병원에서 간호사가 근무하지 않는 병원을 반환한다는 것을 이해할 수 있지만 NOT EXIST 부분과 어떻게 연결되는지는 알지 못합니다.

+2

좋은 질문 종이! :) –

+1

NOT EXISTS는 참조하는 부속 조회에 행이 있으면 false를, 그렇지 않으면 true를 리턴하는 연산자입니다. 따라서 하위 쿼리가 0 행을 반환하는 모든 간호사를 선택합니다. – Patashu

+1

질문에 질문이 필요하지 않은 경우 대부분의 콘텐츠가 이미지에 포함 된 질문을 게시하지 마십시오. 그것은 테스트를 위해 내용을 복사/붙여 넣기하는 것을 불가능하게 만들고 모바일 장치에서 사이트를 방문하는 사람들에게는 끔찍한 일입니다. 감사. :-) –

답변

6

이 단계에서 고려 :

  • 이 하위 쿼리는 다음과 같습니다 배중률으로
    The set of nurses where 
        there does not exist 
        a hospital in Toronto where the nurse doesn't work. 
    

    이 이러한 점은 평론가와 함께 토론에서 제기

    The set of nurses where 
        the nurse works in all Toronto hospitals 
    

    참고가된다

    각 간호사에 대해 개별적으로 평가하지 않고 모든 간호사에 대해 개별적으로 평가 함
  • 즉, 간호사가 일하지 않는 토론토 병원 세트가 빈 세트 인 것처럼 각 간호사. 각 간호사의 의미, 그는 모든 토론토 병원에서 근무합니다.
  • 하위 쿼리를 "간호사가 근무하는 토론토 병원 제외 (세트 차이 또는 마이너스로 읽음) 병원"으로 읽습니다.
+0

다른 해석이 있습니다 (아래 참조). 내가 여기서 무엇을 놓치고 있니? –

+0

확인. 나는 이제 합의에 이르렀다. 설명해 주셔서 감사합니다. –

0

각 개별 간호사를 들어, 서브 쿼리는 토론토 및 제외에 모든 병원 들/그는 작동 모든 병원이 걸립니다. 그 결과 우리는 토론토 병원에서 근무하지 않습니다.. NOT EXIST을 만족 시키려면이 간호사의 목록이 이어야합니다.입니다. 따라서이 간호사는 모든 모든 토론토 병원을 일해야합니다.

따라서 쿼리는 모든 토론토 병원에서 근무하는 간호사를 반환합니다.

토론토의 크기와 병원 수를 고려해 볼 때 인도적으로 가능하지는 않지만 그럼에도 불구하고 답변입니다.

+0

하위 쿼리는 모든 간호사 세트에 대해 개별적으로 평가되는 것이 아니라 각 간호사마다 별도로 평가됩니다. –

+0

즉, 간호사가 일하지 않는 토론토 병원 세트는 간호사마다 공백 집합입니다. 각 간호사의 의미, 그는 모든 토론토 병원에서 근무합니다. –

+0

토론토 병원 세트 ** 간호사가 근무하는 ** 병원을 제외한 ** (차이점 또는 마이너스로 읽음) 병원. –

관련 문제