• SQL中IN,NOT IN,EXISTS,NOT EXISTS的用法和差别


    SQL中IN,NOT IN,EXISTS,NOT EXISTS的用法和差别:

    IN:确定给定的值是否与子查询或列表中的值相匹配。
    IN 关键字使您得以选择与列表中的任意一个值匹配的行。
    当要获得居住在 California、Indiana 或 Maryland 州的所有作者的姓名和州的列表时,就需要下列查询:
    SELECT ProductID, ProductName FROM Northwind.dbo.Products WHERE CategoryID = 1 OR CategoryID = 4 OR CategoryID = 5
    然而,如果使用 IN,少键入一些字符也可以得到同样的结果:
    SELECT ProductID, ProductName FROM Northwind.dbo.Products WHERE CategoryID IN (1, 4, 5)
    IN 关键字之后的项目必须用逗号隔开,并且括在括号中。
    下列查询在 titleauthor 表中查找在任一种书中得到的版税少于 50% 的所有作者的 au_id,然后从 authors 表中选择 au_id 与

    titleauthor 查询结果匹配的所有作者的姓名: 
    SELECT au_lname, au_fname FROM authors WHERE au_id IN (SELECT au_id FROM titleauthor WHERE royaltyper < 50)
    结果显示有一些作者属于少于 50% 的一类。

    NOT IN:通过 NOT IN 关键字引入的子查询也返回一列零值或更多值。
    以下查询查找没有出版过商业书籍的出版商的名称。
    SELECT pub_name FROM publishers WHERE pub_id NOT IN (SELECT pub_id FROM titles WHERE type = 'business')


    使用 EXISTS 和 NOT EXISTS 引入的子查询可用于两种集合原理的操作:交集与差集。两个集合的交集包含同时属于两个原集合的所有元素。

    差集包含只属于两个集合中的第一个集合的元素。

    EXISTS:指定一个子查询,检测行的存在。 
    本示例所示查询查找由位于以字母 B 开头的城市中的任一出版商出版的书名:
    SELECT DISTINCT pub_name FROM publishers WHERE EXISTS (SELECT * FROM titles WHERE pub_id = publishers.pub_id AND type =

    'business')
    SELECT distinct pub_name FROM publishers WHERE pub_id IN (SELECT pub_id FROM titles WHERE type = 'business')
    两者的区别:
    EXISTS:后面可以是整句的查询语句如:SELECT * FROM titles
    IN:后面只能是对单列:SELECT pub_id FROM titles

    NOT EXISTS:
    例如,要查找不出版商业书籍的出版商的名称:
    SELECT pub_name FROM publishers WHERE NOT EXISTS (SELECT * FROM titles WHERE pub_id = publishers.pub_id AND type =

    'business')
    下面的查询查找已经不销售的书的名称:
    SELECT title FROM titles WHERE NOT EXISTS (SELECT title_id FROM sales WHERE title_id = titles.title_id)

  • 相关阅读:
    【FPGA篇章四】FPGA状态机:三段式以及书写方法
    【FPGA篇章三】FPGA常用语句:Verilog基本语法要素
    【FPGA篇章二】FPGA开发流程:详述每一环节的物理含义和实现目标
    【FPGA篇章一】FPGA工作原理:详细介绍FPGA实现编程逻辑的机理
    学习python随笔记
    Spring中的@Bean注解、@Configuration注解、@Value
    什么是Maven项目
    SpringBoot(四)thymeleaf+MyBatis+MySql
    SpringBoot(三)thymeleaf+JPA+MySql
    SpringBoot(二)thymeleaf模板的引入
  • 原文地址:https://www.cnblogs.com/duanxz/p/2607820.html
Copyright © 2020-2023  润新知