zoukankan      html  css  js  c++  java
  • SQL——(NOT) EXISTS 用法

    SQL——EXISTS用法

    如下:
    表A
    ID NAME  
    1   A1
    2   A2
    3   A3

    表B
    ID AID NAME
    1   1     B1
    2   2     B2  
    3   2     B3

    表A和表B是1对多的关系 A.ID => B.AID

    SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE A.ID=B.AID)

    执行结果为

    1 A1
    2 A2

    原因可以按照如下分析

    SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=)
    --->SELECT * FROM B WHERE B.AID=1 有值返回(真),所以有数据;
    SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=2)
    --->SELECT * FROM B WHERE B.AID=2 有值返回(真),所以有数据;
    SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=3)
    --->SELECT * FROM B WHERE B.AID=3 无值返回(假),所以没有数据。

    NOT EXISTS 就是反过来

    SELECT ID,NAME FROM A WHERE NOT EXIST (SELECT * FROM B WHERE A.ID=B.AID)

    执行结果为

    3  A3

    重点:1.此处内表SELECT什么无所谓,不会影响外表的查询结果(select 1);2.内表和外表必须有联系(此处的联系即是指A/外表的ID和B/内表的AID——A表的ID是B表的外码)。

    补充:如果查询语句使用了NOT IN,那么内外表都进行全表扫描,没有用到索引;
    而NOT EXISTS的子查询依然能用到表上的索引。

    ///纵有疾风起,人生不言弃///
  • 相关阅读:
    中医手诊原理
    半月痕
    0020 教您新手修车的五种实用技巧
    下面说说我开车12年来的一些心得
    创建电子邮件信纸
    交通事故责任划分2011版(图解)
    育儿语录
    汽车中控台那些按钮是什么用的?
    我的书中的部分函数
    纠结的书名
  • 原文地址:https://www.cnblogs.com/skzxc/p/15567867.html
Copyright © 2011-2022 走看看