zoukankan      html  css  js  c++  java
  • MySQL 子查询 EXISTS 和 NOT EXISTS

    MySQL EXISTS 和 NOT EXISTS 子查询

    MySQL EXISTS 和 NOT EXISTS 子查询语法如下:

    SELECT ... FROM table WHERE  EXISTS (subquery)
    

    该语法可以理解为:将主查询的数据,放到子查询中做条件验证,根据验证结果(TRUE 或 FALSE)来决定主查询的数据结果是否得以保留。

    MySQL EXISTS 子查询实例

    下面以实际的例子来理解 EXISTS 子查询。下面是原始的数据表:

    article 文章表:
    aidtitlecontentuid
    1 文章1 文章1正文内容... 1
    2 文章2 文章2正文内容... 1
    3 文章3 文章3正文内容... 2
    4 文章4 文章4正文内容... 4
    user 用户表:
    uidusernameemail
    1 admin admin@5idev.com
    2 小明 xiao@163.com
    3 Jack jack@gmail.com

    我们要查出 article 表中的数据,但要求 uid 必须在 user 表中存在。SQL 语句如下:

    SELECT * FROM article WHERE EXISTS (SELECT * FROM user WHERE article.uid = user.uid)
    

    返回查询结果如下:

    aidtitlecontentuid
    1 文章1 文章1正文内容... 1
    2 文章2 文章2正文内容... 1
    3 文章3 文章3正文内容... 2

    从语句执行结果可以看出,article 表中第 4 条记录没有被保留,原因就是该条记录的数据在子查询中返回的结果是 FALSE 。

    当上面的 SQL 使用 NOT EXISTS 时,查询的结果就是 article 表中 uid 不存在于 user 表中的数据记录。

    提示

    • EXISTS (subquery) 只返回 TRUE 或 FALSE,因此子查询中的 SELECT * 也可以是 SELECT 1 或其他,官方说法是实际执行时会忽略 SELECT 清单,因此没有区别。
    • EXISTS 子查询的实际执行过程可能经过了优化而不是我们理解上的逐条对比,如果担忧效率问题,可进行实际检验以确定是否有效率问题。
    • EXISTS 子查询往往也可以用条件表达式、其他子查询或者 JOIN 来替代,何种最优需要具体问题具体分析。
  • 相关阅读:
    用例建模Use Case Modeling——传感器智能分析引擎
    结合工程实践分析同类软件产品-抖音快手微视
    为知笔记快捷键
    unity__细碎小知识
    unity__脚本实例化
    unity_GUI
    unity__音频
    关于js获取赋值,遍历属性
    关于节点,jquery的使用以及动画效果
    关于数组,对象,构造器的写法以及事件的使用
  • 原文地址:https://www.cnblogs.com/a757956132/p/4311919.html
Copyright © 2011-2022 走看看