iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL 5.7 NOT EXISTS的用法是什么
  • 896
分享到

MySQL 5.7 NOT EXISTS的用法是什么

2024-04-02 19:04:59 896人浏览 薄情痞子
摘要

本篇文章给大家分享的是有关Mysql 5.7 NOT EXISTS的用法是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

本篇文章给大家分享的是有关Mysql 5.7 NOT EXISTS的用法是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

mysql中没有MINUS语句,要想实现MINUS语句,可以使用NOT EXISTS语句。

查看测试表中的数据
mysql> select * from person;

| MSISDN         | IMEI            | IMSI            |

| +3301000000000 | 129980000000000 | 208011000000000 |
| +3301000000001 | 129980000000100 | 208011000000001 |
| +3301000000002 | 129980000000200 | 208011000000002 |
| +3301000000003 | 129980000000300 | 208011000000003 |
| +3301000000004 | 129980000000400 | 208011000000004 |
| +3301000000005 | 129980000000500 | 208011000000005 |
| +3301000000006 | 129980000000600 | 208011000000006 |
| +3301000000007 | 129980000000700 | 208011000000007 |

8 rows in set (0.00 sec)
mysql> select * from card;

| IMSI            | MSISDN         | IMEI            |

| 208011000000000 | +3301000000000 | 129980000000000 |
| 208011000000001 | +3301000000001 | 129980000000100 |
| 208011000000002 | +3301000000002 | 129980000000200 |
| 208011000000003 | +3301000000003 | 129980000000300 |
| 208011000000004 | +3301000000004 | 129980000000400 |
| 208011000000005 | +3301000000005 | 129980000000500 |
| 208011000000006 | +3301000000006 | 129980000000600 |
| 208011000000007 | +3301000000007 | 129980000000700 |
| 208011000000008 | +3301000000008 | 129980000000800 |
| 208011000000009 | +3301000000009 | 129980000000900 |

10 rows in set (0.00 sec)

查询出在card中存在,但是在person中不存在的某一列MSISDN。

mysql> select * from card a where not exists(select * from person b where a.MSISDN=b.MSISDN);

| IMSI            | MSISDN         | IMEI            |

| 208011000000008 | +3301000000008 | 129980000000800 |
| 208011000000009 | +3301000000009 | 129980000000900 |

2 rows in set (0.00 sec)

查看执行计划
mysql> explain select * from card a where not exists(select * from person b where a.MSISDN=b.MSISDN);

| id | select_type        | table | partitions | type   | possible_keys | key     | key_len | ref           | rows | filtered | Extra                    |

|  1 | PRIMARY            | a     | NULL       | ALL    | NULL          | NULL    | NULL    | NULL          |   10 |   100.00 | Using where              |
|  2 | DEPENDENT SUBQUERY | b     | NULL       | eq_ref | PRIMARY       | PRIMARY | 20      | fire.a.MSISDN |    1 |   100.00 | Using where; Using index |

2 rows in set, 2 warnings (0.00 sec)

通过执行计划,card表使用了全表扫描,person表使用了主键索引
mysql> show keys from card;

| Table | Non_unique | Key_name             | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |

| card  |          0 | PRIMARY              |            1 | IMSI        | A         |          12 |     NULL | NULL   |      | BTREE      |         |               |

6 rows in set (0.00 sec)
mysql> show keys from person;

| Table  | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |

| person |          0 | PRIMARY  |            1 | MSISDN      | A         |           8 |     NULL | NULL   |      | BTREE      |         |               |

1 row in set (0.00 sec)

由于两张表的主键不是相同列,创建索引进行测试,发现card表始终无法使用索引扫描
mysql> create index idx_card_msisdn on card(msisdn);
Query OK, 0 rows affected (0.22 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> explain select * from card a where not exists(select * from person b where a.MSISDN=b.MSISDN);

| id | select_type        | table | partitions | type   | possible_keys | key     | key_len | ref           | rows | filtered | Extra                    |

|  1 | PRIMARY            | a     | NULL       | ALL    | NULL          | NULL    | NULL    | NULL          |   10 |   100.00 | Using where              |
|  2 | DEPENDENT SUBQUERY | b     | NULL       | eq_ref | PRIMARY       | PRIMARY | 20      | fire.a.MSISDN |    1 |   100.00 | Using where; Using index |

2 rows in set, 2 warnings (0.00 sec)

mysql> create index idx_card_msisdn_imsi on card(msisdn,imsi);
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> explain select * from card a where not exists(select * from person b where a.MSISDN=b.MSISDN);


| id | select_type        | table | partitions | type   | possible_keys | key     | key_len | ref           | rows | filtered | Extra                    |

|  1 | PRIMARY            | a     | NULL       | ALL    | NULL          | NULL    | NULL    | NULL          |   10 |   100.00 | Using where              |
|  2 | DEPENDENT SUBQUERY | b     | NULL       | eq_ref | PRIMARY       | PRIMARY | 20      | fire.a.MSISDN |    1 |   100.00 | Using where; Using index |

2 rows in set, 2 warnings (0.00 sec)

mysql> create index idx_card_imsi_msisdn on card(imsi,msisdn);
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> explain select * from card a where not exists(select * from person b where a.MSISDN=b.MSISDN);

| id | select_type        | table | partitions | type   | possible_keys | key     | key_len | ref           | rows | filtered | Extra                    |
+----+--------------------+-------+------------+--------+---------------+---------+---------+---------------+------+----------+--------------------------+
|  1 | PRIMARY            | a     | NULL       | ALL    | NULL          | NULL    | NULL    | NULL          |   10 |   100.00 | Using where              |
|  2 | DEPENDENT SUBQUERY | b     | NULL       | eq_ref | PRIMARY       | PRIMARY | 20      | fire.a.MSISDN |    1 |   100.00 | Using where; Using index |
+----+--------------------+-------+------------+--------+---------------+---------+---------+---------------+------+----------+--------------------------+
2 rows in set, 2 warnings (0.00 sec)

mysql> explain select * from card a where not exists(select * from person b where a.MSISDN=b.MSISDN);
+----+--------------------+-------+------------+--------+---------------+---------+---------+---------------+------+----------+--------------------------+
| id | select_type        | table | partitions | type   | possible_keys | key     | key_len | ref           | rows | filtered | Extra                    |

|  1 | PRIMARY            | a     | NULL       | ALL    | NULL          | NULL    | NULL    | NULL          |   10 |   100.00 | Using where              |
|  2 | DEPENDENT SUBQUERY | b     | NULL       | eq_ref | PRIMARY       | PRIMARY | 20      | fire.a.MSISDN |    1 |   100.00 | Using where; Using index |

2 rows in set, 2 warnings (0.00 sec)

以上就是MySQL 5.7 NOT EXISTS的用法是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL 5.7 NOT EXISTS的用法是什么

本文链接: https://www.lsjlt.com/news/62110.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL 5.7 NOT EXISTS的用法是什么
    本篇文章给大家分享的是有关MySQL 5.7 NOT EXISTS的用法是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 ...
    99+
    2024-04-02
  • MySQL中not exists的用法是什么
    在MySQL中,"NOT EXISTS"是一种用于判断某个条件是否不存在的运算符。它的使用语法如下:```SELECT co...
    99+
    2023-09-26
    MySQL
  • SQL (NOT) EXISTS的用法是什么
    SQL中的(NOT) EXISTS是一种条件运算符,用于检查一个子查询是否返回结果。- EXISTS:如果子查询返回至少一行结果,则...
    99+
    2023-10-20
    SQL
  • oracle中not exists的用法是什么
    在Oracle中,NOT EXISTS是一个条件运算符,用于检查子查询中是否存在记录。如果子查询返回的结果集为空,则返回True,否...
    99+
    2023-08-22
    oracle
  • MySQL为什么慎用if not exists写法
    这篇文章将为大家详细讲解有关MySQL为什么慎用if not exists写法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。版本 5.6.14环境CREATE TABLE...
    99+
    2024-04-02
  • mysql中not exists有什么用
    这篇文章主要介绍了mysql中not exists有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 mys...
    99+
    2024-04-02
  • mysql中exists的用法是什么
    在MySQL中,EXISTS是一个条件运算符,用于检查一个子查询是否返回任何行。它的语法如下:```SELECT colum...
    99+
    2023-08-25
    mysql
  • IN&EXISTS与NOT IN&NOT EXISTS的优化原则是什么
    本篇文章给大家分享的是有关IN&EXISTS与NOT IN&NOT EXISTS的优化原则是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小...
    99+
    2024-04-02
  • 使用SQL中的EXISTS和NOT EXISTS的语法
    SQL中的exists和not exists的用法,需要具体的代码示例 在SQL中,exists和not exists是一对常用的谓词(predicate),用于判断一个子查询(sub...
    99+
    2024-02-22
    sql用法
  • oracle中exists的用法是什么
    在Oracle中,EXISTS是一个用于检查子查询中是否存在结果集的操作符。它返回一个布尔值,如果子查询返回了至少一行记录,则返回T...
    99+
    2023-08-29
    Oracle
  • oracle中的exists 和not exists 用法详解
    在Oracle中,EXISTS和NOT EXISTS是用来检查子查询是否返回任何行的条件运算符。- EXISTS:当子查询返回至少一...
    99+
    2023-09-12
    Oracle
  • mysql中exists关键字的使用方法是什么
    在MySQL中,EXISTS关键字用于检查子查询是否返回任何行。它返回一个布尔值,如果子查询返回至少一行结果,则返回TRUE,否则返...
    99+
    2024-04-09
    mysql
  • sql not in与not exists使用中的细微差别是什么
    这篇文章将为大家详细讲解有关sql not in与not exists使用中的细微差别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。上面两个简单的Sq...
    99+
    2024-04-02
  • MySQL中使用if not exists需要注意什么
    小编给大家分享一下MySQL中使用if not exists需要注意什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!环境MySQL 5.6.14事务隔离级别 读提交事务的开启和结束由JA...
    99+
    2024-04-02
  • sql中exists的基本用法是什么
    在SQL中,EXISTS是一个用来检查子查询是否返回任何行的条件表达式。基本用法是在SELECT语句中使用EXISTS来检查...
    99+
    2024-04-09
    sql
  • MySQL 5.7 新特性是什么
    小编给大家分享一下MySQL 5.7 新特性是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!我们自豪的宣布 MySQL 5.7 稳定版开放下载了。 MySQL 5.7.9 是...
    99+
    2024-04-02
  • SQL语句中EXISTS的用法是什么
    在SQL语句中,EXISTS用于检查子查询返回的结果集是否为空。如果子查询返回至少一行记录,则EXISTS返回TRUE,否则返回FA...
    99+
    2024-04-02
  • MySQL中EXISTS的用法
    在MySQL中,EXISTS是一个用于检查子查询是否返回结果的关键字。它的基本语法如下:```SELECT 列名FROM 表...
    99+
    2023-09-14
    MySQL
  • mysql中exists关键字的作用是什么
    在MySQL中,EXISTS关键字用于检查子查询是否返回任何行。如果子查询返回至少一行,则EXISTS返回TRUE,否则返回FALS...
    99+
    2024-04-09
    mysql
  • mysql中exists 和in的区别是什么
    今天就跟大家聊聊有关mysql中exists 和in的区别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。  MySQL中in和exists的性...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作