sql相关

Max7Chou 2011-11-23 02:11:30
SELECT * FROM PROJECT P WHERE P.PNUMBER<>ALL
(SELECT W.PNO FROM WORK_ON W WHERE W.ESSN=E.SSN)
解释红体部分
...全文
86 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2011-11-23
  • 打赏
  • 举报
回复
給樓主列點數據,便於你理解

EMPLOYEE
ESSN
001
002

PROJECT:
PNUMBER
1
2
3

WORK_ON
ESSN PNO
001 1
001 2
001 3
001 1
001 2

--如上數據員工002出現在結果集,因為在WORK_ON的PNO少了3
vincent_font 2011-11-23
  • 打赏
  • 举报
回复
ALL--應該用any吧,不等於任何一個值
中国风 2011-11-23
  • 打赏
  • 举报
回复
看14樓的解釋,能不能理解
vincent_font 2011-11-23
  • 打赏
  • 举报
回复
select FNAME,LNAME from EMPLOYEE E
WHERE NOT EXISTS
(SELECT * FROM PROJECT P WHERE P.PNUMBER
not in(SELECT W.PNO FROM WORK_ON W WHERE W.ESSN=E.SSN))
这个嵌套了两层子查询,最外层EMPLOYEE限制最里层WORK_ON,又合起来限制第二层PROJECT ,你细想
Max7Chou 2011-11-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 ssp2009 的回复:]

select FNAME,LNAME from EMPLOYEE E
WHERE NOT EXISTS
(SELECT * FROM PROJECT P WHERE P.PNUMBER
not in(SELECT W.PNO FROM WORK_ON W WHERE W.ESSN=E.SSN))
这个嵌套了两层子查询,最外层EMPLOYEE限制最里层WORK_O……
[/Quote]
那个not in前面是有很多个 后面也是一个表,它的意思是前面的同时不能在后面找到?还是其他
中国风 2011-11-23
  • 打赏
  • 举报
回复
select FNAME,LNAME 
from EMPLOYEE E
WHERE NOT EXISTS
(SELECT * FROM PROJECT P
WHERE
NOT exists(SELECT 1 FROM WORK_ON W WHERE W.ESSN=E.SSN AND P.PNUMBER=W.PNO )
)

--也可以這樣改

同一個員有在WORK_ON的PNO字段 包含了所有的PROJECT表的PNUMBER字段,有個沒有包括都出結果集
中国风 2011-11-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zxl513029 的回复:]

引用 3 楼 roy_88 的回复:

ALL--應該用any吧,不等於任何一個值

select FNAME,LNAME from EMPLOYEE E
WHERE NOT EXISTS
(SELECT * FROM PROJECT P WHERE P.PNUMBER<>ALL
(SELECT W.PNO FROM WORK_ON W WHERE W.ESSN=E.SSN))
……
[/Quote]

在2樓不是解釋了麼,not in
快溜 2011-11-23
  • 打赏
  • 举报
回复
select FNAME,LNAME from EMPLOYEE E
WHERE NOT EXISTS
(SELECT * FROM PROJECT P WHERE P.PNUMBER
not in(SELECT W.PNO FROM WORK_ON W WHERE W.ESSN=E.SSN))
这个嵌套了两层子查询,最外层EMPLOYEE限制最里层WORK_ON,又合起来限制第二层PROJECT ,你细想
Max7Chou 2011-11-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ssp2009 的回复:]

<> all等价与 not in
[/Quote]
是那么等价的 但
select FNAME,LNAME from EMPLOYEE E
WHERE NOT EXISTS
(SELECT * FROM PROJECT P WHERE P.PNUMBER<>ALL
(SELECT W.PNO FROM WORK_ON W WHERE W.ESSN=E.SSN))
这是整个语句,那句怎么理解
Max7Chou 2011-11-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 roy_88 的回复:]

ALL--應該用any吧,不等於任何一個值
[/Quote]
select FNAME,LNAME from EMPLOYEE E
WHERE NOT EXISTS
(SELECT * FROM PROJECT P WHERE P.PNUMBER<>ALL
(SELECT W.PNO FROM WORK_ON W WHERE W.ESSN=E.SSN))
这是整个语句
是对的,能够执行的,但是那句不懂
Max7Chou 2011-11-23
  • 打赏
  • 举报
回复
select FNAME,LNAME from EMPLOYEE E
WHERE NOT EXISTS
(SELECT * FROM PROJECT P WHERE P.PNUMBER<>ALL
(SELECT W.PNO FROM WORK_ON W WHERE W.ESSN=E.SSN))
这是整个语句
SQL2008能够执行的
就是不太明白
geniuswjt 2011-11-23
  • 打赏
  • 举报
回复
但是他的E表根本没出现过。。。执行的通么[Quote=引用 7 楼 roy_88 的回复:]
引用 4 楼 geniuswjt 的回复:

LZ,你确定这执行的通吗?
是MSSQL?



可用這樣用,是SQL7.0之前的版本用的
[/Quote]
中国风 2011-11-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 geniuswjt 的回复:]

LZ,你确定这执行的通吗?
是MSSQL?
[/Quote]


可用這樣用,是SQL7.0之前的版本用的
快溜 2011-11-23
  • 打赏
  • 举报
回复
<> all等价与 not in
中国风 2011-11-23
  • 打赏
  • 举报
回复
看錯,樓主的語句等同於 not in,在2樓說明了
geniuswjt 2011-11-23
  • 打赏
  • 举报
回复
LZ,你确定这执行的通吗?
是MSSQL?
中国风 2011-11-23
  • 打赏
  • 举报
回复
ALL--應該用any吧,不等於任何一個值
中国风 2011-11-23
  • 打赏
  • 举报
回复
SELECT * FROM PROJECT P WHERE P.PNUMBER NOT in
(SELECT W.PNO FROM WORK_ON W WHERE W.ESSN=E.SSN)
Max7Chou 2011-11-23
  • 打赏
  • 举报
回复
怎么没人回答...

34,838

社区成员

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

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