首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL常用判断函数总结!!看你都用过没

在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函数。

1.7K40

《SQL Cookbook》 - 第三章 多表查询

合并两个行集 表可以没有相同的字段列,但是他们对应列的数据类型必须相同,且具有相同的列个数, select ename, deptno from emp union all select '-----...如果习惯在FROM子句中,而不是WHERE子句中,写连接逻辑,则可以使用JOIN子句。 如果从可阅读性角度来说,表关联的时候,关联条件写在ON子句中,过滤条件写在WHERE子句中,会更让人理解。...EXISTS/NOT EXISTS和关联子查询一起使用时,SELECT中的列,不重要,之所以使用了NULL,是为了让注意力集中在子查询的连接操作上,而不是SELECT的列上。 5. ...从一个表检索和另一个表不相关的行 基于共同列将两个表连接起来,返回一个表的所有行,不论这些行在另一个表中是否存在匹配行,然后,只存储这些不匹配的行即可。...多个表中返回缺少的值 使用全外连接,基于一个共同值从两个表中返回缺少的值,全外连接查询就是合并两个表的外连接查询的结果集。

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

    MySQL查询优化-基于EXPLAIN

    使用 EXPLAIN 分析查询语句,解析每一项的含义,并给出优化建议。 MySQL 版本:10.5.5-MariaDB MariaDB Server。...select_type 分为 simple(简单查询)、subquery(子查询)、drived(衍生表,from 列表中有子查询)、union(联合查询)等。...table 通常是表名,或者表的别名,或者一个为查询产生临时表的标示符(如派生表、子查询、集合)。...如将主键置于where列表中,MySQL就能将该查询转换为一个常量 eqref:出现在要连接几个表的查询计划中,驱动表只返回一行数据,且这行数据是第二个表的主键或者唯一索引,且必须为 not null...给出了一个百分比的值,这个百分比值和rows列的值一起使用,可以估计出那些将要和执行计划中的前一个表(前一个表就是指id列的值比当前表的id小的表)进行连接的行的数目。

    1.6K20

    T-SQL基础(一)之简单查询

    FROM子句用于指定需要查询的数据源,WHERE语句对数据源中的数据做基于行的筛选。通常WHERE子句可以决定查询是否使用索引,及使用哪些索引,对于查询优化有着重要意义。...SELECT语句用于指定返回到查询结果集中的列,生成查询结果表。注意,在SELECT子句之前执行的子句无法使用SELECT子句中的列的别名,否则会返回Invalid column name错误。...如,WHERE子句中的多个表达式的计算并没有确定的顺序。 CASE...WHEN... CASE表达式是标量表达式,返回一个符合条件的值。注意,CASE是表达式,不是语句,与COUNT类似。...CASE表达式有两种使用方式: CASE后面带有列名 这种情况下,WHEN子句中只能使用标量或返回标量的表达式,这种形式称为简单格式。...CASE后面不带列名 这种情况下,WHEN子句中只能使用逻辑表达式,这种形式称为搜索格式。

    4.2K20

    MySQL执行计划(explain)分析

    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

    95840

    【MySQL 系列】MySQL 语句篇_DQL 语句

    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

    19310

    知识点、SQL语句学习及详细总结

    如[^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 使用基于集合测试的嵌套子查询 使用嵌套子查询进行基于集合的测试时

    2K20

    MySQL秘籍之索引与查询优化实战指南

    然后使用HAVING子句过滤出现次数大于1的组,这些组中的行即为重复数据。请注意,上述查询仅检查一个列的重复数据。如果您想要检查多个列的组合是否重复,请在GROUP BY子句中包含这些列的名称。...HASH 索引不是基于树形的数据结构查找数据,而是根据索引列对应的哈希值的方法获取表的记录行。...in和or所在列最好有索引其实数据库索引调优,光靠理论是不行的,需要结合实际情况。MySQL机制复杂,如查询优化策略和各种引擎的实现差异等都会使情况变复杂。...3SUBQUERY在SELECT或WHERE列表中包含了子查询。4DERIVED在FROM列表中包含的子查询被标记为DERIVED(衍生),MySQL会递归执行这些子查询,把结果放在临时表中。...5range只检索给定范围的行,使用一个索引来选择行,key列显示使用了哪个索引,一般就是在你的where语句中出现between、、in等的查询,这种范围扫描索引比全表扫描要好,因为它只需要开始于索引的某一点

    17110

    MySQL面试题

    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

    24660

    Oracle查询优化-02给查询结果排序

    默认情况下 升序排列,因此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

    1.2K20

    Mysql学习笔记,持续记录

    如果在 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

    1.2K50

    分享10个高级sql写法

    本文所讲述 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

    1.3K41

    MySQL 查询专题

    ❑ 大多数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 条件 所谓的连接是有针对性的找出关联关系 全文搜索 用基于文本的搜索作为正则表达式匹配列值的更进一步的介绍

    5K30
    领券