日期:2014-05-18  浏览次数:20409 次

MSSQL 题目 ,俺觉得挺难, 大家讨论下,解决了按给分
某数据库中有员I   关系E、产品关系P、仓库关系W   和库存关系I,其中:员工关系
E(employeeID,name,department)中的属性为:员工编号,姓名,部门:产品关系
P(productID,name,model,size,color)中的属性为:产品编号,产品名称,型号,尺
寸,颜色:仓库关系W(warehouseID,name,address,employeelD)中的属性为:仓库编号,
仓库名称,地址,负责人编号;库存关系I(warehouseID,productID,quantity))中的
属性为仓库编号,产品编号和产品数量。

c.若需得到在所有仓库中都存在的产品的名称,则对应的查询语句为:
SELECT   name   FROM   P
WHERE   (50)
(SELECT   *   FROM   W
WHERE   NOT   EXISTS
(SELECT   *   FROM   I
WHERE   P.productID   =   I.productID   AND   W.warehouseID   =   Ⅰ.warehouseID))
(50)A.EXISTS   B.NOT   EXISTS   C.IN   D.NOT   IN


答案可能是B    
俺想不通,各位高手解释下!俺也查过书了,但是还是不懂!!


------解决方案--------------------
看lz说的语句 where 后面没有指定具体的列名所以,用in 和 not in 都是不对的,可以把c和d两个答案排除了,然后在看那个子查询
SELECT * FROM W
WHERE NOT EXISTS
(SELECT * FROM I
WHERE P.productID = I.productID AND W.warehouseID = Ⅰ.warehouseID)

上面的语句得到的是所有仓库中没有的数据,所以要用not exists 不知道lz看不看得懂。

------解决方案--------------------
NOT EXISTS
NOT EXISTS 的作用与 EXISTS 相反。如果子查询没有返回行,则满足 NOT EXISTS 中的 WHERE 子句。本示例查找不出版商业书籍的出版商的名称:

USE pubs
GO
SELECT pub_name
FROM publishers
WHERE NOT EXISTS
(SELECT *
FROM titles
WHERE pub_id = publishers.pub_id
AND type = 'business ')
ORDER BY pub_name
GO

下面是结果集:

pub_name
----------------------------------------
Binnet & Hardley
Five Lakes Publishing
GGG&G
Lucerne Publishing
Ramona Publishers
Scootney Books

(6 row(s) affected)