+ -
当前位置:首页 → 问答吧 → sql相关

sql相关

时间:2011-11-23

来源:互联网

SELECT * FROM PROJECT P WHERE P.PNUMBER<>ALL
(SELECT W.PNO FROM WORK_ON W WHERE W.ESSN=E.SSN)
解释红体部分

作者: zxl513029   发布时间: 2011-11-23

怎么没人回答...

作者: zxl513029   发布时间: 2011-11-23

SQL code
SELECT * FROM PROJECT P WHERE P.PNUMBER NOT in
(SELECT W.PNO FROM WORK_ON W WHERE W.ESSN=E.SSN)

作者: roy_88   发布时间: 2011-11-23

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

作者: roy_88   发布时间: 2011-11-23

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

作者: geniuswjt   发布时间: 2011-11-23

看錯,樓主的語句等同於 not in,在2樓說明了

作者: roy_88   发布时间: 2011-11-23

<> all等价与 not in

作者: ssp2009   发布时间: 2011-11-23

引用 4 楼 geniuswjt 的回复:

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



可用這樣用,是SQL7.0之前的版本用的

作者: roy_88   发布时间: 2011-11-23

但是他的E表根本没出现过。。。执行的通么
引用 7 楼 roy_88 的回复:
引用 4 楼 geniuswjt 的回复:

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



可用這樣用,是SQL7.0之前的版本用的

作者: geniuswjt   发布时间: 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能够执行的
就是不太明白

作者: zxl513029   发布时间: 2011-11-23

引用 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))
这是整个语句
是对的,能够执行的,但是那句不懂

作者: zxl513029   发布时间: 2011-11-23

引用 6 楼 ssp2009 的回复:

<> all等价与 not in

是那么等价的 但
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))
这是整个语句,那句怎么理解

作者: zxl513029   发布时间: 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 ,你细想

作者: ssp2009   发布时间: 2011-11-23

引用 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))
……


在2樓不是解釋了麼,not in

作者: roy_88   发布时间: 2011-11-23

SQL code
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字段,有個沒有包括都出結果集

作者: roy_88   发布时间: 2011-11-23

引用 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……

那个not in前面是有很多个 后面也是一个表,它的意思是前面的同时不能在后面找到?还是其他

作者: zxl513029   发布时间: 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 ,你细想

作者: vincent_font   发布时间: 2011-11-23

看14樓的解釋,能不能理解

作者: roy_88   发布时间: 2011-11-23

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

作者: vincent_font   发布时间: 2011-11-23

給樓主列點數據,便於你理解

SQL code
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

作者: roy_88   发布时间: 2011-11-23

热门下载

更多