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

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常用sql语句(8)- where 条件查询

测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 条件查询应该是作为测试平时用到最多的关键字了!!...它可以用来指定查询条件,减少不必要的查询时间 where的语法格式 WHERE 查询条件 五种查询条件 比较运算符、逻辑运算符 between and 关键字 is null 关键字 in、exist...= 1; select * from yyTest where height > 170; select * from yyTest where height >= 175; select * from...yyTest where age < 20; select * from yyTest where age <= 20; 多条件的查询栗子 多条件的查询都需要使用逻辑运算符,下面的栗子比较简单不展开描述...; select * from yyTest where height 175; select * from yyTest where height < 165 ||

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

    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.5K30

    MySQL WHERE 子句

    昨天介绍了 MySQL 数据库使用 SELECT 语句来查询数据,同时也简单提到了MySQL WHERE 子句,今天详细讲解下。...语法 我们知道从 MySQL 表中使用 SELECT 语句来读取数据,如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中,WHERE 子句用于在 MySQL 中过滤查询结果,...以下是 SQL SELECT 语句使用 WHERE 子句从数据表中读取数据的通用语法: SELECT column1, column2, ......WHERE condition 是用于指定过滤条件的子句。 更多说明 查询语句中你可以使用一个或者多个表,表之间使用逗号, 分割,并使用WHERE语句来设定查询条件。...以上内容即为 MySQL 数据库使用 WHERE 子句来查询数据的简单讲解,下期再见。

    1.3K10

    SQL语句中 where 和 on 的区别

    最近面试时候碰到一道题,关于数据库左连接和内连接中and和where的区别,网上看了看资料,加深一下印象,大家也可以看看。...2、where条件是在临时表生成好后,再对临时表进行过滤的条件。...在使用inner join内连接时,不管是对左表还是右表进行筛选,on and和on where都会对生成的临时表进行过滤。...join过程可以这样理解:首先两个表做一个笛卡尔积,on后面的条件是对这个笛卡尔积做一个过滤形成一张临时表,如果没有where就直接返回结果,如果有where就对上一步的临时表再进行过滤。...where的过滤作用就出来了,右连接的原理是一样的。到这里就真相大白了:inner join中on和where没区别,右连接和左连接就不一样了。 本文转载自: SQL语句中where和 on的区别?

    4.7K20

    MySQL约束

    可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句)。...2.1、主键约束格式 格式1: 字段名 字段类型 primary key #在create table 语句中设置主键 格式2: alter table 数据库表名 add primary key(...唯一约束就是:设计表中的某一个字段不能出现重复的记录 4.1、唯一约束格式 字段名 字段类型 unique #在create table 语句中设置唯一约束 4.2、唯一约束应用 4.2.1、插入相同记录...非空约束就是:数据库表中的字段的值,不能为null 5.1、非空约束格式 字段名 字段类型 not null #在create table 语句中设置字段值不能为null 5.2、非空约束应用 案例...> delete from classes where cid=4; Query OK, 1 rows affected (0.01 秒) mysql> select * from classes;

    8.2K10

    MySQL 约束

    核心目标: 学习如何使用约束来强制执行 MySQL 表中数据的完整性和规则,确保数据的准确性、一致性和可靠性。 什么是约束? 约束是在表的数据列上强制执行的规则。...当插入新行时,如果未指定该列的值,MySQL 会自动为其生成一个比当前最大值大 1 的唯一序列号。...NO ACTION: 同 RESTRICT (标准 SQL 的概念,MySQL 中行为类似)。 SET DEFAULT: 父表记录删除/更新时,将子表中相应的外键列设置为其默认值。...accounts ( user_id INT PRIMARY KEY, username VARCHAR(50), registration_date DATE DEFAULT (CURDATE()), -- MySQL...(MySQL 8.0.16+ 才真正强制执行) 语法 (建表时 - 列级): column_name data_type CHECK (condition) 语法 (建表时 - 表级): CONSTRAINT

    62410

    MySQL约束

    约束 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。...非空约束 (not null 被设置非空约束的字段值不能为空) - 建表时添加非空约束: - create table student( - id int not null, - id_number...唯一约束 (unique 被设置唯一约束的字段值不能重复,但是可以为空) - 建表时添加唯一约束 - create table student( - id int, - id_number...varchar(25) unique -- 给id_number设置唯一约束 - ); 查看唯一约束:show index from 表名; 删除唯一约束:alter table 表名 drop index...字段名; 创建表之后添加唯一约束:alter table 表名 modify 字段名 数据类型 unique; 主键约束 (primary key 同时保证了唯一和非空) - 创建表时添加主键约束

    2.6K20

    MySQL - WHERE优化篇

    日常开发中,编写SQL语句都避免不了使用到 WHERE关键字做条件过滤,细心的朋友就会发现,WHERE的不同表现形式会对数据库性能造成一定影响,本章主要针对 WHERE优化策略进行讨论.......(对于统计型的数据,开启只读事务) 避免将查询转换成比较难以理解的方式,以免 MySQL无法进行优化 熟练掌握 EXPLAIN计划 调整 MySQL用于缓存数据的内存大小 减少锁表的情况 内置优化 在做...MySQL会及时发现无效 SELECT语句,然后不返回数据。 WHERE查询中发现未使用 GROUP BY或者 聚合函数(比如COUNT(),MIN()等),那么 HAVING会与 WHERE合并。...MySQL每次查询时都会检查是否有可用索引,除非 MySQL优化器认为全表扫描性能更快。...虽然 MySQL优化器为我们做了很多事情,但开发过程中改主意还得注意。

    1.6K20

    初识MySQL · 约束

    前言: 对于约束来说,是一种限制数据的方式,这里的约束和生活中的约束是差不多的,比如数据来说,生活中的语文成绩在150以内,0分以上,如果有谁给你说我语文考了151分,那指定是扯淡,同样的,拿我们班级中的学号来举例...在MySQL中就可以通过主键或者是唯一键来约束数据不能重复,等等等等。 说白了,我们学习这里的约束和结合生活中的场景是非常容易理解的,那么话不多说,我们直接进入主题。...对于第三个约束来说,comment,老实说它算不上一个约束,它只是一个列描述,或者说是注释而已,我们在desc的表里面还看不到我们的注释,我们只能通过show create table table_name...zerofill mysql> show create table tt3\G ***************** 1. row ***************** Table: tt3 Create...对于初学MySQL的同学来说看到10肯定是蒙蔽的,我们从数据的大小,int的大小是4字节,和10也没有关系。

    1.4K00

    SQL语句中where 1=1的意义

    我们在看别人项目的时候,很多时候看到这样的SQL语句: select * from user where 1=1 其中这个where1=1是有特殊意义的,包含以下两种情境:动态SQL拼接和查询表结构。...一 动态SQL拼接 适合多条件搜索,当要构造动态sql语句时为了防止sql语句结构不当,所以加上where 1=1 ,这样SQL语句不会报错,例如: String sql="select * from...当我们的SQL语句加上where 1=1的时候,就不报错了,如下: String sql="select * from table_name where 1=1"; if( conditon 1) {...where 1=1是sql语句条件逻辑判断表达式,由于1=1成立,恒为真,该表达式1=1将始终返回"真"。...下面例子将有助于理解有关概念: 1) select * from t1 where 1=1; -- 实际等效于select * from t1 where true;-- 语句将返回t1中所有的记录行

    4.8K51

    sql语句中where与having的区别

    Where 是一个约束声明,使用Where约束来自数据库的数据,Where是在结果返回之前起作用的,Where中不能使用聚合函数。...在查询过程中聚合语句(sum,min,max,avg,count)要比having子句优先执行。而where子句在查询过程中执行优先级高于聚合语句。 下面用一个例子进一步说明问题。...PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; 例1:要查找平均工资大于3000的部门 则 sql 语句应为...一来,我们要使用聚合语句 avg ;二来,我们要对聚合后的结果进行筛选( average > 3000 ),因此使用 where 会被告知 sql 有误。...例2:要查询每个部门工资大于3000的员工个数 sql语句应为: select deparment, count(*) as c from salary_info where salary >

    2.7K20
    领券