首页
学习
活动
专区
圈层
工具
发布

MySQL 复杂 where 语句分析

在《MySQL 常见语句加锁分析》一文中,我们详细讲解了 SQL 语句的加锁原理并具体分析了大部分的简单 SQL 语句,但是实际业务场景中 SQL 语句往往及其复杂,包含多个条件,此时就需要具体分析SQL...但是我们也需要了解具体 Where 语句的条件的拆分和使用,即复杂 Where 条件是如何生效的,用何登成大神的原话,就是: 给定一条SQL,where条件中的每个子条件,在SQL执行的过程中有分别起着什么样的作用...Index Key 和 Table Filter 基于上述表,我们具体分析一下如下拥有复杂 Where 条件的 SQL 语句。 ?...上述 SQL 语句的 Where 条件使用了两个索引,分别是二级唯一索引 ISBN 和二级非唯一索引 Author。...MySQL 会根据索引选择性等指标选择其中一个索引来使用,而另外一个没有被使用的 Where 条件就被当做普通的过滤条件,一般称被用到的索引称为 Index Key,而作为普通过滤的条件则被称为 Table

2.3K30

mysql(基本的SELECT语句)

单引号、双引号是成对结束的必须使用英文状态下的半角输入方式字符串型和日期时间类型的数据可以使用单引号(' ')表示列的别名,尽量使用双引号(" "),而且不建议省略as  单行注释:#注释文字(MySQL...SELECT department_id FROM   employees;  在SELECT语句中使用关键字DISTINCT去除重复行 SELECT DISTINCT department_id FROM...空值参与运算 所有运算符或列值遇到null值,运算的结果都为null SELECT NULL+1,NULL-1,NULL*1,NULL>1,NULL<1,NULL=1 FROM DUAL 在 MySQL...而且,在 MySQL 里面,空值是占用空间的。  着重号 我们需要保证表中的字段、表名等没有和保留字、数据库系统或常用方法冲突。如果真的相同,请在SQL语句中使用一对``(着重号)引起来。...条件查询 语法: SELECT 字段1,字段2 FROM 表名 WHERE 过滤条件  用WHERE 子句,将不满足条件的行过滤掉 WHERE子句紧随 FROM子句 举例 SELECT employee_id

2.9K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【mysql】基本的select语句

    如果真的相同,请在SQL语句中使用一对(着重号)引起来。 5. 查询常数 SELECT 查询还可以对常数进行查询。就是在 SELECT 查询结果中增加一列固定的常数列。...过滤元素 练习:查询90号部门的员工信息 SELECT * FROM employees #过滤条件,声明在FROM结构的后面 WHERE department_id = 90; [在这里插入图片描述...] 练习:查询last_name为'King'的员工信息 SELECT * FROM EMPLOYEES WHERE LAST_NAME = 'King'; [在这里插入图片描述] 注意:mysql...的员工姓名和工资 SELECT last_name salary FROM employees WHERE salary > 12000; [在这里插入图片描述] 查询员工号为176的员工的姓名和部门号...SELECT last_name department_id FROM employees WHERE employee_id = 176 [在这里插入图片描述] 显示表 departments 的结构

    2.6K30

    MySQL之优化SELECT语句

    MySQL之优化SELECT语句 摘要: 本文主题为MySQL优化SELECT语句,涵盖了数据库性能提升概述,WHERE子句优化,范围优化和哈希联接优化。...引言: MySQL是广泛使用的关系型数据库管理系统,对于确保数据库性能至关重要。优化SELECT语句是提高数据库性能的关键一环。...WHERE子句优化 当处理WHERE子句时,可以采取一系列优化措施来提高查询性能。这些优化原则同样适用于包含WHERE子句的DELETE和UPDATE语句。...确保WHERE条件上的列有合适的数据类型: 查询优化前:使用字符串进行比较 SELECT * FROM employees WHERE age = '30'; 查询优化后:使用正确的数据类型 SELECT...总结: MySQL数据库的性能优化对于提高应用程序的效率和用户体验至关重要。本文讨论了优化SELECT语句的几个方面,包括改进WHERE子句、范围优化以及使用哈希联接代替块嵌套循环联接算法。

    1.6K10

    select语句的执行流程(MySql)

    学习了极客时间MySql课程,做个总结 以一条select语句为例:select * from T where ID=4 ,梳理下执行的流程 一条sql语句在执行过程中需要经过连接器、分析器、优化器、...查询缓存 在经过连接器之后,会执行第二步查询缓存,在MySql拿到查询后,会先到查询缓存查看是否执行过这条语句,之前执行的结果会以key-value对的形式存在,如果不在查询缓存中,会继续执行后面的极端...在MySql8.0之后去掉了查询缓存的功能。...分析器 分析器会先做“词法分析”,识别出sql里的字符串分别是什么,读出“select”关键字对出这是一条查询语句,把字符串T识别成“表T” “语法分析”,根据词法分析的结果,判断该条sql是否满足MySql...的语法 优化器 优化器的作用在于选择最优的逻辑执行sql,例如在一个语句进行多表关联的时候,决定各个表的连接顺序 执行器 在开始执行前,先判断你对表T是否有执行查询的权限,没有就返回没有权限的错误,有权限则继续执行

    1.1K10

    MySQL基础查询语法:深入解析SELECT、WHERE、ORDER BY、LIMIT

    MySQL基础查询语法:深入解析SELECT、WHERE、ORDERBY、LIMIT相信很多朋友在学习数据库的时候,都看到过类似的SQL查询语句。...前言MySQL是当前最受欢迎的开源数据库系统,掌握SELECT查询语句是每位开发者的基本技能。虽然许多人认为SQL学习起来有难度,但其实核心内容不过是几个关键字。...:限制结果数量综合查询示例SQL查询执行顺序SELECT:选择查询的列SELECT语句的基本结构咱们先打个比方。...不然每次都要写全表名,语句又长又容易出错。WHERE:设置查询条件WHERE子句的作用WHERE子句用于过滤数据,仅返回满足特定条件的数据行。...;--按日期时间排序SELECT*FROMordersORDERBYcreated_atDESC;--NULL值排序(MySQL中NULL值最小)SELECT*FROMusersORDERBYlast_loginDESC

    12710

    MYSQL基本操作-select 查询语句【续】

    基本操作-select 查询语句【续】 聚合函数 最大值(max) select max(bookprice) as '最贵的书' from book; 最小值(min) select min(borrowsum...Mysql聚合函数来使用 如果需要指定条件来过滤分组后的结果集,需要结合 having 关键字;原因:where不能与聚合函数联合使用 并且where 是在 group by 之前执行的 GROUP...条件语句结合在一起使用。...当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序是: 执行where xx对全表数据做筛选,返回第1个结果集。...子查询可以在select、update、delete语句中使用,还可以进行多层嵌套 WHERE (子查询) 操作符可以是比较运算符、in、not in、exists、not

    2.8K40

    select和where子句优化

    8.优化select语句,这方面技巧同样适用于其他带where的delete语句等,在where子句的列上设置索引;索引对于引用多个列如join和外键尤其重要 select where子句优化: 1.调整查询的结构...,索引技术和配置参数 5.优化InnoDB表的单查询事务 6.通过阅读EXPLAIN计划并调整索引,WHERE子句,连接子句等来调查特定查询的内部详细信息 7.调整MySQL用于缓存的内存区域的大小和属性...通过有效使用InnoDB缓冲池,MyISAM密钥缓存和MySQL查询缓存 8.where条件,去掉不必要的括号,恒定折叠,恒定条件去除,减少不必要的逻辑 9.被索引使用的常量表达式只计算一次 10.count...by子句不一样,或来自不同的表,则会创建临时表 15.如果使用SQL_SMALL_RESULT修饰符,MySQL将使用内存中的临时表 16.MySQL甚至无需咨询数据文件即可只从索引中读取行 17.在输出每一行之前...,将跳过与HAVING子句不匹配的行 以下表被用作常量表: SELECT * FROM t WHERE primary_key=1; SELECT * FROM t1,t2 WHERE t1.primary_key

    2.5K30

    【重学MySQL】十三、基本的 select 语句

    【重学MySQL】十三、基本的 select 语句 基本的SELECT语句是SQL(Structured Query Language,结构化查询语言)中最常用的语句之一,用于从数据库表中检索数据...一个基本的SELECT语句的结构非常直观,主要包括SELECT关键字、要检索的列名(或表达式)、FROM子句来指定数据来源的表名,以及可选的WHERE子句来指定检索数据的条件。...带有条件的检索 SELECT * FROM Employees WHERE DepartmentID = 5; 这条语句会检索Employees表中所有DepartmentID为5的行。...但在MySQL中,你可以直接写: SELECT 5 * 10; 这条语句同样会返回50,而不需要引用DUAL表。...在这种情况下,MySQL仍然能够处理这样的查询,因为MySQL会忽略这个DUAL的引用,并直接执行SELECT语句中的计算或函数。

    2.4K10

    MySQL Select语句是怎么执行的?

    MySQL Select语句是怎么执行的?...今天分享的内容是select和update的执行流程。 select的执行过程 话不多说,来个神图镇楼(自己画的)。...[7goo7i5di4.png] 首先,我们可以看到,整个select语句包含三个模块,其中客户端和MySQL两个部分,MySQL又包含server端和存储引擎侧,server端包含连接器、查询缓存...这里可以给出一个例子,例如我们建立了(a,b)的联合索引, select * from table where a=1 and b=1; select * from table where b=1 and...A1:有些时候,SQL语句要操作的表不只是SQL字面上那些。比如如果有个触发器,得在执行器阶段(过程中)才能确定。优化器阶段前是无能为力的 Q2:MySQL权限到底在哪里验证?

    3.4K40

    软件测试|MySQL SELECT语句的详细使用

    简介MySQL是一种广泛使用的开源关系型数据库管理系统,它提供了许多功能强大的SQL查询语句,其中最常用且最重要的是SELECT语句。...SELECT语句用于从数据库表中检索数据,并根据给定的条件返回所需的结果集。在本文中,我们将深入探讨MySQL SELECT语句的各个方面,并提供一些示例来说明其用法。...基本语法SELECT 的语法格式如下:SELECT{* | }[FROM , …[WHERE [GROUP BY [HAVING...WHERE 是可选项,如果选择该项,将限定查询数据必须满足该查询条件。GROUP BY,该子句告诉 MySQL 如何显示查询出来的数据,并按照指定的字段分组。...下面先介绍一些简单的 SELECT 语句,关于 WHERE、GROUP BY、ORDER BY 和 LIMIT 等限制条件,后面我们会一一讲解。查询表中所有字段查询所有字段是指查询表中所有字段的数据。

    2.3K20

    《MySQL》系列 - select 语句是怎么执行的?

    select * from user where id = 1;  01 mysql 架构概览 要想理解这个问题就必须要知道 mysql 的内部架构。...而对于要使用缓存的语句则可用 SQL_CACHE 显示指定,像这样: select SQL_CACHE * from user where id = 1; PS:MySQL 8.0 及以上版本把查询缓存删掉了...你输入的 sql 是啥,由啥组成,MySQL 都需要知道它们代表什么。 首先根据 "select" 识别出这是查询语句。...具体表现就是 select、where、from 等关键字少了个字母,明显不符合 MySQL 语法,这次就会报个语法错误的异常:它一般会提示错误行数,关注 "use near" 后面即可。 ?...比如下面的 sql 语句: select * from user u inner join role r on u.id = r.user_id where u.name = "狗哥" and r.id

    3.2K20

    MySQL 简单查询语句执行过程分析(四)WHERE 条件

    本文是 MySQL 简单查询语句执行过程分析 6 篇中的第 4 篇,第 1 ~ 3 篇请看这里: MySQL 简单查询语句执行过程分析(一)词法分析 & 语法分析 MySQL 简单查询语句执行过程分析(...二)查询准备阶段 MySQL 简单查询语句执行过程分析(三)从 InnoDB 读数据 今天我们分为 3 个部分来介绍,首先会看一下 where 条件在源码中的结构是什么样的,对 where 条件结构有了初步了解之后...条件结构 我们平时在写 SQL 的时候,where 条件中会使用括号,也会出现多层 and、or 嵌套的情况,特别是使用各种 ORM 框架时,框架生成的 SQL 语句括号嵌套一层又一层,层峦叠嶂,非常壮观...MySQL 中多层 where 条件会形成一棵树状结构,每多一个层级,都需要额外的逻辑处理,执行效率上会有一点影响,所以在语法分析阶段,就会对 where 条件的树状结构层级进行简化,可以合并的层级就合并...,还请帮忙转发朋友圈,让更多的人看到,大家一起进步,谢谢 ^_^ 预告一下,下一篇要写的内容是 MySQL 简单查询语句执行过程分析(五)发送数据,敬请关注!

    3.6K30
    领券