MySQL常用关键字和函数及部分关键字使用场景

世间情动,不过盛夏白瓷梅子汤,碎冰碰壁当啷响。

一,关键字使用顺序

  在使用SQL查询时,关键字的顺序并不是非常重要,SQL解释器可以根据查询的语法结构自动推断其执行顺序。但是,为了使查询更加易读,并且能够避免出现在结果中无法预期的重复数据,建议始终按照以下顺序使用关键字:

  1,SELECT

  2,FROM

  3,JOIN

  4,WHERE

  5,GROUP BY

  6,HAVING

  7,ORDER BY

  8,LIMIT

二,经常使用的函数

  1,聚合函数:COUNT,SUM,AVG,MIN,MAX等。

  2,字符串函数:SUBSTR,CONCAT,LOWER,UPPER,LEFT,RIGHT,TRIM,LENGTH等。

  3,数学函数:ROUND,RAND,CELL,FLOOR,ABS,SQRT,POW,MOD等。

  4,日期和时间函数:NOW,YEAR,MONTH,DAY,HOUR,MINUTE,SECOND,DATE_FORMAT等。

  5,类型转换函数:CONVERT,CASE,COALESCE,IFNULL等。

  6,条件函数:IF,CASE等。

三,LEFT JOIN,RIGHT JOIN,INNER JOIN的区别

  1,LEFT JOIN(左连接)返回包括左表中的所有记录和右表中 联结字段相等(符合条件)的记录。

  2,RIGHT JOIN(右连接)返回包括右表中的所有记录和左表中 联结字段相等(符合条件)的记录。

  3,INNER JOIN(内连接)只返回两个表中 联结字段相等(符合条件)的记录。

四,UNION与UNION ALL的区别

  操作符语法格式:

1 SELECT expression1, expression2, ... expression_n
2 FROM tables
3 [WHERE conditions]
4 UNION [ALL | DISTINCT]
5 SELECT expression1, expression2, ... expression_n
6 FROM tables
7 [WHERE conditions];

  MySQL UNION 用于把来自多个 SELECT 语句的结果组合到一个结果集合中。在多个 SELECT 语句中,对应的列应该具有相同的字段属性,且第一个 SELECT 语句中被使用的字段名称也被用于结果的字段名称。当使用 UNION 时,MySQL 会把结果集中重复的记录删掉,而使用 UNION ALL ,MySQL 会把所有的记录返回,且效率高于 UNION。当使用 UNION 时,MySQL 会把结果集中重复的记录删掉,而使用 UNION ALL ,MySQL 会把所有的记录返回,且效率高于 UNION。因此,当确定查询结果中不会有重复数据或者不需要去掉重复数据的时候,应当使用 UNION ALL 以提高查询效率。

五,IN与EXISTS的区别

  1,IN

  SQL 示例:

1 SELECT * FROM tabA WHERE tabA.x IN (SELECT x FROM tabB WHERE y>0)

  执行过程

    (1)执行 tabB 表的子查询,得到结果集 B,可以使用到 tabB 表的索引 y 。

    (2)执行 tabA 表的查询,查询条件是 tabA.x 在结果集  B 里面,可以使用 tabA 表的索引 x 。

    (IN 查询是从缓存中取数据)

  执行原理

    是把外表和内表做连接,先查询内表,再把内表结果与外表匹配,对外表使用索引(外表效率高,可用大表),而内表多大都需要查询,不可避免,故外表大的使用 IN,可加快效率。

  2,EXISTS

  SQL 示例:

1 SELECT FROM tabA WHERE EXISTS (SELECT FROM tabB WHERE y>0);

  执行过程

    (1)先将 tabA 表所有记录取到。

    (2)逐行针对 tabA 表的记录,去关联 tabB 表,判断 tabB 表的子查询是否有返回数据,(5.5之后的版本)使用 Block Nested Loop(Block 嵌套循环)。

    (3)如果子查询有返回数据,则将 tabA 当前记录返回到结果集。tabA 相当于取全表数据遍历,tabB 可以使用到索引。

    (EXISTS() 查询是将主查询的结果集放到子查询中做验证,根据验证结果是 true 或 false 来决定主查询数据结果是否得以保存)

  执行原理

    对外表做 loop 循环,每次 loop 循环再对内表(子查询)进行查询,那么因为对内表的查询使用的索引(内表效率高,故可用大表),而外表有多大都需要遍历,不可避免(尽量用小表),故内表大的使用 EXISTS,可加快效率;

  3,使用场景

    内表大的适合使用 EXISTS。
    外表结果集合大的适合使用 IN。
    当内表数据与外表数据一样大时,IN与 EXISTS 效率差不多,可任选一个使用。

六,NULL 值处理

  1,IS NULL:当列的值是 NULL,此运算符返回 true。

  2,IS NOT NULL:当列的值不为 NULL,运算符返回 true。

  3,<=>:比较操作符(不同于 = 运算符),当比较的的两个值相等或者都为 NULL 时返回 true。

  关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。在 MySQL 中,NULL 值与任何其它值的比较(即使是 NULL)永远返回 NULL,即 NULL = NULL 返回 NULL 。MySQL 中处理 NULL 使用 IS NULL 和 IS NOT NULL 运算符。

  注意:columnName1,columnName2 为 int 型,当 columnName2 中,有值为 null 时,columnName1+columnName2=null, ifnull(columnName2,0) 把 columnName2 中 null 值转为 0。

1 select * , columnName1+ifnull(columnName2,0) from tableName;

 

posted @ 2023-05-22 15:04  ZZKZS  阅读(202)  评论(0编辑  收藏  举报
/*鼠标跟随效果*/