永发信息网

怎么用用sql语句中的not exists来写语句?

答案:2  悬赏:10  手机版
解决时间 2021-03-09 00:58
  • 提问者网友:遁入空寂
  • 2021-03-08 09:53
怎么用用sql语句中的not exists来写语句?
最佳答案
  • 五星知识达人网友:不如潦草
  • 2021-03-08 10:00
使用 NOT EXISTS 的子查询
NOT EXISTS 与 EXISTS 的工作方式类似,只是如果子查询不返回行,那么使用 NOT EXISTS 的 WHERe 子句会得到令人满意的结果。

例如,要查找不出版商业书籍的出版商的名称:

USE pubs
SELECt pub_name
FROM publishers
WHERe NOT EXISTS
(SELECt *
FROM titles
WHERe pub_id = publishers.pub_id
AND type = 'business')

下面是结果集:

pub_name
----------------------------------------
Binnet & Hardley
Five Lakes Publishing
Ramona Publishers
GGG&G
Scootney Books
Lucerne Publishing

(6 row(s) affected)

下面的查询查找已经不销售的书的名称。

USE pubs
SELECt title
FROM titles
WHERe NOT EXISTS
(SELECt title_id
FROM sales
WHERe title_id = titles.title_id)

下面是结果集:

title
----------------------------------
The Psychology of Computer Cooking
Net Etiquette

(2 row(s)
全部回答
  • 1楼网友:孤独的牧羊人
  • 2021-03-08 10:17
exists或者not exists是把主查询的字段传到后边的查询中作为条件,返回值是true或者false。exists true,那么就是查询条件成立,结果会显示出来。not exists true,则为false,查询连接条件不成立。 select * from course where not exists(select * from grade where grade.课程代号=course.课程代号) 这个语句,是查询course表中课程代号在grade中没有出现的数据。 看看grade表,课程编号有k01到k06,而course表,有k01到k07,那么k07在grade表是不存在的,那么,是符合条件的。 同样select * from course where exists(select * from grade where grade.课程代号=course.课程代号) 则是查询course的记录条件为编号在grade中存在。那么很明显,结果是k01到k06的数据。 另外,exists和not exists的作用可以用in或not in实现,但是,效率要高。 因为exists和not exists返回的结果是true或者false,那么则在子查询中,遇到第一个符合条件的结果,就会退出查询,而不会进行全表的检索。而not in或者in,要把子查询中的select字句全部查询出来才行。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯