1

私は最終試験のために勉強していますが、これは過去の試験で出てきます:

テーブル: 看護師 - ( nid:int , nname:string, age:real, 給与:real, sid:int)
テーブル: スーパーバイザー - ( sid:int , rating:real)
テーブル: WorksIn - ( nid:int , hid:int、hours:real)
テーブル: Hospital - ( hid:int、 hname:string、tid:int)
テーブル: Town - ( tid:int、 tname:string、mayor:string)

次のクエリが取得するものを説明してください。

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 部分とどのように関連しているかはわかりません。

4

2 に答える 2

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

コメンテーターとの議論で提起された次の点に注意してください。

  • サブクエリは、すべての看護師のセットに対して個別に評価されるのではなく、看護師ごとに個別に評価されます
  • つまり、看護師が働いていないトロントの病院の集合が空集合であるような各看護師。各看護師にとって、彼はトロントのすべての病院で働いています。
  • サブクエリを次のように読みます。
于 2013-04-20T03:47:18.133 に答える
0

個々の看護師ごとに、サブクエリはトロントのすべての病院を取得し、看護師が勤務するすべての病院を除外します。そのため、トロントの病院では彼女が働いていませんNOT EXISTこの看護師のリストを満たすには、空にする必要があります。したがって、この看護師はトロントのすべての病院で働かなければなりません。

したがって、このクエリは、トロントのすべての病院で働く看護師を返します。

トロントの規模と病院の数を考えると人道的に不可能ですが、それでもこれが答えです。

于 2013-04-20T04:12:03.253 に答える