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)