一道SQL考试题.多重嵌套类型,非高手勿进.

BOBO132 2006-10-29 09:36:40
设供应商零件的关系模式为SP(Sno,Pno,Qty),其中Sno表示供应商号,Pno表示零件号,Qty表示零件数量。查询至少包含了供应商“168”所供应的全部零件的供应商号的SQL语句如下:
  SELECT Sno
    FROM SP SPX
     WHERE __ (19) __
      (SELECT *
        FROM SP SPY
        WHERE __ (20) __ AND NOT EXISTS
         (SELECT *
           FROM SP SPZ
               WHERE __ (21) __));
(19) A.EXISTS     B. NOT EXISTS      C. IN      D. NOT IN
(20) A. SPY.Sno=’168’       B. SPY Sno<>’168’
   C.SPY.Sno=SPX.Sno        D.SPY.Sno<>SPX.Sno
(21) A.SPZ.Sno=SPY.Sno AND SPZ.Pno=SPY.Pno
   B. SPZ.Sno=SPX.Sno AND SPZ.Pno=SPX.Pno
   C. SPZ.Sno=SPX.Sno AND SPZ.Pno=SPY.Pno
   D. SPY.Sno=’168’ AND SPZ.Pno=SPY.Pno
答案为BAC,请问21问中SPX,SPY,SPZ代表的表的内容是什么?是怎样计算出来的?有请各位高手帮帮忙
...全文
1081 36 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
panqifeng440 2006-11-08
  • 打赏
  • 举报
回复
那三个是表的别名。分别是两个否定之后就得到了正确的答案。
前提将spx的每一行数据放到后面的where中看是否满足。
同理将spy的每一行数据放到后面的where中看是否满足。
最后一个select语句的意思是取168供应商的每一个零件号来测试spx.sno供应商是否有相同的零件号,而满足条件的sno囊括了所有的168供应商的零件号,所以not exits返回的是假不可能没有满足这样条件的数据,否定之否定即为真。
BOBO132 2006-10-31
  • 打赏
  • 举报
回复
非常感谢大家的解答
tsingever 2006-10-30
  • 打赏
  • 举报
回复
软件设计师( 高程 )考试的题目,高手不是高手,能解决问题的就可以进来.
flyingsnowy 2006-10-30
  • 打赏
  • 举报
回复
進來的看高手
  • 打赏
  • 举报
回复
中国人太爱玩文字游戏 不注重实际应用
dreamw 2006-10-30
  • 打赏
  • 举报
回复
我来露个面的 ^0^
fcuandy 2006-10-30
  • 打赏
  • 举报
回复
那肯定是国人写的书. 取其精华去其糟粕
xyxfly 2006-10-30
  • 打赏
  • 举报
回复
这不应该是面试题


课本的练习题吧?


^0^
fcuandy 2006-10-30
  • 打赏
  • 举报
回复
出题的人找抽.

SQL语句是开发人员实现思路的体现.
有什么样的思路就写什么样的SQL语句.当然考滤性能和数据完整性.

自己写个破语句来约束别人的思维.这样的题当然对语句掌握很熟练逻辑思维很清晰的人(比如像我^^~)来说小菜一碟, 但看到这样的题,这样的工作不要也罢.
  • 打赏
  • 举报
回复
虽然这样可以解决问题 就是不知道效率怎样~
playwarcraft 2006-10-30
  • 打赏
  • 举报
回复
XX先生所說的,否定之否定規律~~~
Well 2006-10-30
  • 打赏
  • 举报
回复
先找完全符合的然后取反。。
  • 打赏
  • 举报
回复
题目的思路是: 找到那些完全不和供应商='168'生产的产品有相同的供应商 然后再取反(就是取剩下的那些供应商)
方便分析 把答案填入
SELECT Sno FROM SP SPX
WHERE NOT EXISTS (SELECT * FROM SP SPY
WHERE SPY.Sno='168' AND NOT EXISTS
(SELECT * FROM SP SPZ WHERE SPZ.Sno=SPX.Sno AND SPZ.Pno=SPY.Pno))
关键要中间开始看
SELECT * FROM SP SPY WHERE SPY.Sno='168' 就是选择所有满足 供应商='168'的产品
然后 NOT EXISTS (SELECT * FROM SP SPZ WHERE SPZ.Sno=SPX.Sno AND SPZ.Pno=SPY.Pno)
就是排除 包含有 供应商='168'产品的供应商
最后就是第一句 排除这些供应商后剩下的供应商就是题目要找的答案
welove1983 2006-10-30
  • 打赏
  • 举报
回复
出题的人比较无聊
  • 打赏
  • 举报
回复
按题目很简单的select Sno from SP where Pno in (select Pno from Sp where Sno='168')
为什么它要搞那么复杂~
rookie_one 2006-10-30
  • 打赏
  • 举报
回复
。。。。。。
playwarcraft 2006-10-30
  • 打赏
  • 举报
回复
不過...難道之前說的 B,A,C 不對嗎? @_@
mysummer2003 2006-10-30
  • 打赏
  • 举报
回复
表的别名 !
playwarcraft 2006-10-30
  • 打赏
  • 举报
回复
高手都很謙虛...所以一般不進來
進來的都想看高手...
BOBO132 2006-10-30
  • 打赏
  • 举报
回复
原来进来的全不是高手,到底高手都去了哪里?

加载更多回复(16)

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧