在MySQL中基于对条件判断的函数又叫“控制流函数”,用于mysql语句中的逻辑判断。本文带大家一起来看一看MySQL中都有哪些常用的控制流函数,以及控制流函数的使用场景都有哪些?...,expr2) 附、一张有故事的照片(九) 一、函数:CASE WHEN … THEN … ELSE … END 在SQL语句中,"CASE WHEN … THEN … ELSE … END"是较常见的用来判断的语句...,适用于增删改查各类语句中,公式如下: CASE expression WHEN if_true_expr THEN return_value1 WHEN if_true_expr THEN return_value2...>= '2020-01-01' 需要注意的点,Case函数只返回第一个符合条件的值,剩下的Case when部分将会被自动忽略 2、用在查询语句的返回值中 给个情景2:有个学生高考分数表,需要将等级列出来...使用场景1:IF函数通常用于真实数据被替代的列;如性别,我们在库中一般用tinyint存储,男 = 1,女 = 2;如查询时需转成字符,该场景就适用于IF函数。
合并两个行集 表可以没有相同的字段列,但是他们对应列的数据类型必须相同,且具有相同的列个数, select ename, deptno from emp union all select '-----...如果习惯在FROM子句中,而不是WHERE子句中,写连接逻辑,则可以使用JOIN子句。 如果从可阅读性角度来说,表关联的时候,关联条件写在ON子句中,过滤条件写在WHERE子句中,会更让人理解。...EXISTS/NOT EXISTS和关联子查询一起使用时,SELECT中的列,不重要,之所以使用了NULL,是为了让注意力集中在子查询的连接操作上,而不是SELECT的列上。 5. ...从一个表检索和另一个表不相关的行 基于共同列将两个表连接起来,返回一个表的所有行,不论这些行在另一个表中是否存在匹配行,然后,只存储这些不匹配的行即可。...多个表中返回缺少的值 使用全外连接,基于一个共同值从两个表中返回缺少的值,全外连接查询就是合并两个表的外连接查询的结果集。
在 SELECT 子句中使用 可以根据某个字段的值返回不同的结果。...AS department 在 WHERE子句中使用 CASE 语句还可以用于在 WHERE 子句中根据不同的条件应用不同的过滤条件。...例如,根据不同的product_type应用不同的过滤条件: SELECT * FROM products WHERE CASE WHEN product_type = 'Electronics...:虽然 CASE 语句可以在 WHERE 子句中使用,但通常建议尽量避免,因为可能会影响查询性能。...更好的做法是使用逻辑运算符(如 AND、OR )来组合条件。 在 ORDER BY 子句中使用 可以根据某个字段的值动态地改变排序顺序。
使用 EXPLAIN 分析查询语句,解析每一项的含义,并给出优化建议。 MySQL 版本:10.5.5-MariaDB MariaDB Server。...select_type 分为 simple(简单查询)、subquery(子查询)、drived(衍生表,from 列表中有子查询)、union(联合查询)等。...table 通常是表名,或者表的别名,或者一个为查询产生临时表的标示符(如派生表、子查询、集合)。...如将主键置于where列表中,MySQL就能将该查询转换为一个常量 eqref:出现在要连接几个表的查询计划中,驱动表只返回一行数据,且这行数据是第二个表的主键或者唯一索引,且必须为 not null...给出了一个百分比的值,这个百分比值和rows列的值一起使用,可以估计出那些将要和执行计划中的前一个表(前一个表就是指id列的值比当前表的id小的表)进行连接的行的数目。
可以使用子查询的有SELECT,INSERT,UPDATE和DELETE语句,与运算符如=,,>=,的规则: 必须用括号括起来的子查询。...子查询只能有一个在SELECT子句中的列,除非多列在主查询的查询来比较其选定的列。 ORDER BY不能使用在子查询中,虽然主查询就可以使用ORDER BY。...使用示例如下: -- SELECT语句中的子查询 SELECT * FROM COMPANY WHERE ID IN (SELECT ID FROM COMPANY WHERE SALARY > 45000...CASE WHEN [condition] THEN result [WHEN ...]...[ELSE result] END 示例如下: SELECT sex, CASE WHEN sex = 0 THEN '女' WHEN sex = 1 THEN '男'
FROM子句用于指定需要查询的数据源,WHERE语句对数据源中的数据做基于行的筛选。通常WHERE子句可以决定查询是否使用索引,及使用哪些索引,对于查询优化有着重要意义。...SELECT语句用于指定返回到查询结果集中的列,生成查询结果表。注意,在SELECT子句之前执行的子句无法使用SELECT子句中的列的别名,否则会返回Invalid column name错误。...如,WHERE子句中的多个表达式的计算并没有确定的顺序。 CASE...WHEN... CASE表达式是标量表达式,返回一个符合条件的值。注意,CASE是表达式,不是语句,与COUNT类似。...CASE表达式有两种使用方式: CASE后面带有列名 这种情况下,WHEN子句中只能使用标量或返回标量的表达式,这种形式称为简单格式。...CASE后面不带列名 这种情况下,WHEN子句中只能使用逻辑表达式,这种形式称为搜索格式。
by字句一般是放在查询语句的最后面,limit字句除外 */ #案列1:查询薪资>=2000的员工信息,按生日进行排序【添加筛选调价】 SELECT * from emp where salary >...DEFAULT:语句n;break; } mysql 中 case 要判断的字段或表达式 when 常量1 then 要显示的值1或语句1; when 常量2 then 要显示的值2或语句2; ......1.4倍 */ SELECT empname,salary 原始工资,deptId, CASE deptId WHEN 1 THEN salary*1.1 WHEN 2 THEN salary*...ELSE{ 语句n; } mysql 中: CASE WHEN 条件1 THEN 要显示的值1或语句1; WHEN 条件2 THEN 要显示的值2或语句2; ........级别 */ SELECT empname,salary, CASE WHEN salary>10000 THEN 'A' WHEN salary>5000 THEN 'B' WHEN salary>1000
3.子查询/any/all./exists 子查询即一个查询语句嵌到另一个查询语句的子句中;可以出现在另一个查询的列中,where子句中,from子句中等。 子查询中的某个值。...[ELSE result] END CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] ...[ELSE result] END SELECT CASE 1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END; SELECT CASE ...WHEN 1>0 THEN 'true' ELSE 'false' END; select a.cgi from ( select case when port=443 then concat('https..., case grade when 1 then '一级' when 2 then '二级' when 3 then '三级' when 4 then '四级' when 5 then '五级' end
UNION DEPENDENT UNION:当UNION作为子查询时,第二或是第二个后的查询的SELECTTYPE值 UNION RESULT:UNION产生的结果集 DERIVED:出现在FROM子句中的子查询...或group by查询中 using index:使用了覆盖索引进行查询 using temporary:MySQL需要使用临时表来处理查询,常见于排序,子查询,和分组查询 using where:需要在...MySQL服务器层使用WHERE条件来过滤数据 select tables optimized away:直接通过索引来获取数据,不用访问表(效率最高) POSSIBLE_KEYS列 指出MySQL能使用哪些索引来优化查询...查询列所涉及到的列上的索引都会被列出,但不一定会被使用 KEY列 查询优化器优化查询实际所使用的索引 如果没有可用的索引,则显示为NULL 如查询使用了覆盖索引,则该索引仅出现在Key列中 KEY_LEN...SELECT COUNT(CASE WHEN IFNULL(total_money,0) >=1000 THEN a.customer_id END) AS '>1000' ,COUNT(CASE
SELECT * FROM departments ORDER BY CASE dept_no WHEN 'Finance' THEN 1 WHEN 'Human Resources'...SELECT * FROM employees LIMIT 60,10; # 限定返回数量 10 ,偏移量 60 2.7、DQL子查询 MySQL 子查询是嵌套一个语句中的查询语句,也被称为内部查询...子查询经常用在 WHERE 子句中。 例如,我前面提到的操作符 EXISTS 就属于子查询的范畴。...但大多数情况下,使用 IN 的自查询的性能不如使用操作符 EXISTS 的性能的。最后,还存在一种在 FROM 中使用子查询的方式,即当一个子查询位于 FORM 子句中时,这个子查询被称为派生表。...会去除重复记录 SELECT statementB 说明:① UNION 为双目操作符,需要两个 SELECT 语句作为操作数;② UNION 中的 SELECT 语句中的列数、列顺序必须相同;③ UNION
如[^abcd]表示不匹配abcd其中任何一个,若是连续的,可以用 - 表示,如[^a-d] 例子 : (查询姓“张”的学生详细信息) SELECT * FROM Student WHERE Sname...在一个查询语句中,可以用多个列进行分组。...when_expression :要与input _expression进行比较的简单表达式。简单表达式中不可包含比较运算法,只需给出被比较的表达式或值。...子查询 如果一个SELECT语句嵌套在另一个SELECT、INSERT、UPDATE或DELETE语句中,则称为子查询或内层查询;而包含子查询的语句称为主查询。...: WHERE 列名 [NOT] IN (子查询) WHERE 列名 比较运算符 (子查询) WHERE EXISTS(子查询) 2.1 使用基于集合测试的嵌套子查询 使用嵌套子查询进行基于集合的测试时
然后使用HAVING子句过滤出现次数大于1的组,这些组中的行即为重复数据。请注意,上述查询仅检查一个列的重复数据。如果您想要检查多个列的组合是否重复,请在GROUP BY子句中包含这些列的名称。...HASH 索引不是基于树形的数据结构查找数据,而是根据索引列对应的哈希值的方法获取表的记录行。...in和or所在列最好有索引其实数据库索引调优,光靠理论是不行的,需要结合实际情况。MySQL机制复杂,如查询优化策略和各种引擎的实现差异等都会使情况变复杂。...3SUBQUERY在SELECT或WHERE列表中包含了子查询。4DERIVED在FROM列表中包含的子查询被标记为DERIVED(衍生),MySQL会递归执行这些子查询,把结果放在临时表中。...5range只检索给定范围的行,使用一个索引来选择行,key列显示使用了哪个索引,一般就是在你的where语句中出现between、、in等的查询,这种范围扫描索引比全表扫描要好,因为它只需要开始于索引的某一点
1NF,原子性,确保每列都是不可再分的最小数据单元 2NF,每个表只做一件事,确保表中的列与主键相关 3NF,减少冗余,确保每个列与主键直接相关 MySQL是什么类型的数据库 关系型数据库,是建立在关系模型基础上的数据库...*返回全部列,不要返回不需要的列 b)索引应该尽量小,在字节数小的列上建立索引 c)Where子句中有多个表达式时,包含索引的表达式应置于其他条件表达式之前 d)避免在ordery by子句中使用表达式...BY sid HAVING AVG(Score)>60 ) --子查询可以用在不同的位置,select子句from子句where子句都可以 --from子句后面作子查询主要起别名!...AS 'Java语言编程', sum(CASE cname WHEN 'MySQL数据库编程' THEN score END) AS 'MySQL数据库编程', sum(CASE cname...Sname,sum(CASE cname WHEN 'Java语言编程' THEN score END) AS 'Java语言编程', sum(CASE cname WHEN 'MySQL
默认情况下 升序排列,因此asc是可选的, 降序排列使用desc. . 不一定要指定排序所基于的列名,也可以给出这列的编号, 编号从1开始。...如果在select列表中使用的数字位置排序,那么这个数值不能大于select列表中项目的数目。 一般情况下都可以按照select列表中没有的列来排序,但必须显示的给出排序的列名。...如果在查询中使用group by 或者distinct,则不能按照select列中 ---- 2.3按子串排序 问题 按照字符串的某一部分对查询结果进行排序。...case表达式 SQL> select ename, job, sal, comm from emp order by case when job =...传递给order by 的值类似这样: select ename, job, sal, comm, case when job = 'SALESMAN' then
如果在 select 中使用表达式,则必须在 group by 子句中指定相同的表达式。不能使用别名。 除聚集计算语句外,select 语句中的每个列都必须在 group by 子句中给出。...SIMPLE 简单的select查询,查询中不包含子查询或者UNION PRIMARY 查询中若包含任何复杂的子部分,最外层查询则被标记为PRIMARY SUBQUERY 在SELECT或WHERE列表中包含了子查询...如将主键置于where列表中,MySQL就能将该查询转换为一个常量。 eq_ref 唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。...impossible where,where子句的值总是false,不能用来获取任何元组 select tables optimized away,在没有GROUPBY子句的情况下,基于索引优化MIN...列中使用子查询 ( SELECT a.id, a.NAME, a.card_id, a.total, a.datetime, (SELECT count(*) FROM wx_users where
本文所讲述 sql 语法都是基于 MySql 8.0 博主github地址:http://github.com/wayn111 欢迎大家关注,点个star 一、ORDER BY FIELD() 自定义排序逻辑...二、CASE 表达式 case when then else end表达式功能非常强大可以帮助我们解决 if elseif else 这种问题,这里继续用 order_diy 表举例,假如我们想在 order_diy...表加一列 level 列,根据money 判断大于60就是高级,大于30就是中级,其余显示低级,sql 如下: SELECT *, case when money > 60 then '高级' when...: 图片 九、with as 提取临时表别名 with as 语法需要 MySql 8.0以上版本,它的作用主要是提取子查询,方便后续共用,更多情况下会用在数据分析的场景上。...这里继续用 order_diy 表举例,这里使用with as给出sql 如下: -- 使用 with as with t1 as (SELECT * from order_diy where money
❑ 大多数SQL实现不允许 GROUP BY 列带有长度可变的数据类型(如文本或备注型字段)。 ❑ 除聚集计算语句外,SELECT 语句中的每一列都必须在 GROUP BY 子句中给出。...这可能会改变计算值,从而影响 HAVING 子句中基于这些值过滤掉的分组。...where item_price >= 10 ) 列必须匹配 在 WHERE 子句中使用子查询(如这里所示),应该保证SELECT语句具有与 WHERE 子句中相同数目的列。..., where 改成 on select xxx列 from 表A inner join 表b on 条件1=xxx 自然版 sql 的一对一, 多对多关系 子查询 有多个 select 关键字 可以出现的位置...很少见, 看上去像对象 多行多列 select * from 表1 别名1 , (select ... ) 别名2 where 条件 所谓的连接是有针对性的找出关联关系 全文搜索 用基于文本的搜索作为正则表达式匹配列值的更进一步的介绍
我没有试过它,但它看起来非常的棒。 4、不要 select 你不需要的 获取想要的数据,一种非常常见的方式就是采用 * 字符,这会列出所有的列。...SELECT * FROM wp_posts; 然而,你应该仅列出你需要的列,如下所示。如果在一个非常小型的网站,譬如,一分钟一个用户访问,可能没有什么分别。...SELECT title, excerpt, author FROM wp_posts LIMIT 10; 6、避免循环中的查询 当在 PHP 中使用 SQL 时,可以将 SQL 放在循环语句中。... SET display_order = CASE id WHEN 1 THEN 3 WHEN 2 THEN 4 WHEN 3 THEN...下面的子查询非常有用: SELECT a.id, (SELECT MAX(created) FROM posts WHERE author_id
='何及'; 5.2.4 基于其他表更新列 update actor set last_update = '2023-8-01' where actor_id in (select actor_id...因此,要定义列标题必须在第一个select语句中定义。要对联合查询结果排序时,也必须使用第一个select语句中的列标题。...6.5、子查询 当查询条件使用的是另一个查询生成的值时,经常会产生新的情况,这是需要用到子查询。 子查询就是一个select查询是另一个查询的附属。就是将一个查询语句嵌套在另一个查询语句中。...3、case 语法1: case when e1 then v1 when e2 then e2 ... ...: case expr when e1 then v1 when e1 then v1 ...
, …, src_columnn]) FROM 源表名 [WHERE condition] 在 INSERT 语句中加入子查询。...子查询中的值列表应与 INSERT 子句中的列名对应。...MySQL8 新特性:计算列 什么叫计算列呢?简单来说就是某一列的值是通过别的列计算得来的。...值为 novel显示小说,law显示法律,medicine显示医药,cartoon显示卡通,joke显示笑话 */ SELECT name AS "书名" ,note, CASE note WHEN...name,num,CASE WHEN num>30 THEN '滞销' WHEN num>0 AND num<10 THEN '畅销' WHEN num=0 THEN '无货' ELSE
领取专属 10元无门槛券
手把手带您无忧上云