mysql中exists的用法详解

本文详细介绍了MySQL中EXISTS关键字的用法,包括其语法、执行过程和常见查询案例。通过与IN关键字的效率比较,揭示了在不同场景下选择合适查询方式的重要性,提供了优化查询效率的策略,并总结了EXISTS在内外层表大小不同的情况下相对于IN的效率优势。
摘要由CSDN通过智能技术生成

前言

在日常开发中,用mysql进行查询的时候,有一个比较少见的关键词exists,我们今天来学习了解一下这个
exists这个sql关键词的用法,这样在工作中遇到一些特定的业务场景就可以有更加多样化的解决方案

语法解释

语法

SELECT column1 FROM t1 WHERE [conditions] and EXISTS (SELECT * FROM t2 );

说明
  • 括号中的子查询并不会返回具体的查询到的数据,只是会返回true或者false,如果外层sql的字段在子查询中存在则返回true,不存在则返回false
  • 即使子查询的查询结果是null,只要是对应的字段是存在的,子查询中则返回true,下面有具体的例子
执行过程

1、首先进行外层查询,在表t1中查询满足条件的column1
2、接下来进行内层查询,将满足条件的column1带入内层的表t2中进行查询,
3、如果内层的表t2满足查询条件,则返回true,该条数据保留
4、如果内层的表t2不满足查询条件,则返回false,则删除该条数据
5、最终将外层的所有满足条件的数据进行返回


贴个链接,mysql官方对于这个命令的说明: https://dev.mysql.com/doc/refman/8.0/en/exists-and-not-exists-subqueries.html;喜欢看英文原版说明的可以来这里看一下

使用案例

环境准备

?? mysql版本: 8.0.28

?? 数据库表设计:

  • 学生表: t_student

    CREATE TABLE t_student (
    id int unsigned NOT NULL AUTO_INCREMENT,
    name varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT ‘’ COMMENT ‘学生姓名’,
    age int NOT NULL COMMENT ‘年龄’,
    PRIMARY KEY (id)
    ) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT=‘学生表’;

导入部分数据

INSERT INTO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值