SQL经典问题求解! 高手进!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL经典问题求解! 高手进!相关的知识,希望对你有一定的参考价值。
有三张表:销售商(xss) ,产品(cp),销售产品(xscp),销售商(xss)与产品(cp)是n对m的关系,它们通过之间的联系是表:销售产品(xscp).现在要查询“销售了销售编号(xsbh)为000001的销售商,所销售的全部产品的销售商名称”. 现在有两种写法:
1.我自己写的语句是
use cpxs
select xsmc
from xss where xsbh in(
select xsbh
from xscp
where cpbh in(select cpbh
from cp
where cpmc in (select cpmc from cp,xscp,xss where cp.cpbh=xscp.cpbh and xscp.xsbh = xss.xsbh and xss.xsbh='000001' )))这样写查询出来的是销售了000001号销售商的销售的产品的销售商名称,并不符合条件销售了销售编号(xsbh)为000001的销售商,所销售的“全部产品”的销售商名称.
针对上述问题,正确答案是
2.select xsmc from xss
where xsbh in
( select xsbh from xscp xscp1
where not exists
(select * from xscp as xscp2
where xscp2.xsbh='000001'and not exists
(select * from xscp xscp3 where xscp3.xsbh=xscp1.xsbh and
xscp3.cpbh=xscp2.cpbh)
)
)
请问连续使用2个NOT EXISTS 时表示双重否定吗 ?谁能将2的求解思路具体给我解释下 啊 ,我自己想了3天了 ,每天都只做了这一个题目,效率实在太低了,盼望高手指点迷津!
假如
A销售了1,2
B销售了1
C销售了2
D销售了1,2
那么所所得结果中D是符合条件的结果,因为只有D销售了所
销售的“全部产品”。注意 条件“全部产品”
xscp1 和 xscp2 xscp3 它们都是xscp这张表的别名啊 !
三张表分别是:
销售商(销售编号,销售名称) 即xss(xsbh,xsmc)
产品 (产品编号,产品名称) 即cp(cpbh,cpmc)
销售产品(销售编号,产品摆好) 即xscp(xsbh,cpbh)
查询不存在于子查询1中,子查询1不存在于子查询2中
这种关系的写法就是
查询 NOT EXISTS (子查询1 NOT EXISTS(子查询2))
是嵌套的关系
请问一下,那位高手知道数据库语句中 in ,on ,with 等关键字的用法啊,求解.......
参考技术A 这个问题不太明确,in,谓词,用来查找属性值属于指定集合的元组 ,可以作为一个where条件 select * from table where id in ('1','2'),还可以组合成关键字;ON 是连接时候的条件 join on 两个表的关系 ;wiht可单独使用,提供不同功能,例如 with chenk option等,还有一种常用的用法是 with as,WITH 通常与AS连用,也叫做子查询部分。用法:
1). 可用来定义一个SQL片断,该片断会被整个SQL语句所用到。
2). 为了让SQL语句的可读性更高
3). 也有可能是在UNION ALL的不同部分,作为提供数据的部分。特别对于UNION ALL比较有
用。因为UNION ALL的每个部分可能相同,但是如果每个部分都去执行一遍的话,则成本
太高,所以可以使用WITH AS短语,则只要执行一遍即可。
例如:下面两种表达的是同一种意思:
①with alias as (select * from pra)
②select * from pra;
以上是关于SQL经典问题求解! 高手进!的主要内容,如果未能解决你的问题,请参考以下文章