首页 > 数据库 >MySQL常用关键字和函数及部分关键字使用场景

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

时间:2023-05-22 15:12:14浏览次数:37  
标签:场景 UNION 使用 查询 关键字 MySQL tabA NULL SELECT

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

一,关键字使用顺序

  在使用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;

 

标签:场景,UNION,使用,查询,关键字,MySQL,tabA,NULL,SELECT
From: https://www.cnblogs.com/zhangzhongkun/p/17420428.html

相关文章

  • MySQL 删除后插入 与 插入或更新
    MySQL删除后插入与插入或更新一般操作:查询->判断【(存在更新,不存在插入)或(存在删除插入,不存在插入)】在单条插入/更新的时候这样做是没有问题的,但是在批量导入的环境下由于数据量过大所以这里出现里的严重的性能问题优化方案“插入或更新”INSERTFORUPDATEINSERTFORU......
  • 表单元素验证的几种场景
    表单元素验证的几种场景weixin_30444105于2017-03-2311:15:00发布61收藏版权表单验证在项目中使用还是比较多的,常见的场景我尝试着综合一下,只选取两个例子:1,简单的表单验证://表单验证$inputForm.validate({rules:{consignee:"......
  • mysql事务
    (目录)事务的特性原子性(Atomicity):语句要么全执行,要么全不执行,是事务最核心的特性,事务本身就是以原子性来定义的。实现主要基于undolog日志。持久性(Durability):保证事务提交后不会因为宕机等原因导致数据丢失。实现主要基于redolog日志。隔离性(Isolation):保证事务执行尽......
  • MySQL数据库的一些常见问题
    博主介绍:–我是了凡微信公众号【了凡银河系】期待你的关注。未来大家一起加油啊~前言前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。下面记录一些关于MySQL一些常见的问题文章目录前言1.数据库三大范式2.MySQL存储引擎Mylsam和InnoDB有哪些......
  • 安装mysql服务遇到的问题
    找不到MSVCR120.dll,无继续法执行代码”官方链接MicrosoftVisualC++可再发行的最新下载mysqld:Can'tcreate/writetofile'Drowerdownload\mysql-5.7.19-winx64\mysql-5.7.19-winx64\data\is_writable'(Errcode:2-Nosuchfileordirectory)把my.ini移动到bin目录下......
  • rhel 7.3安装mysql 5.7.21
    文档课题:rhel7.3安装mysql5.7.21安装包:mysql-5.7.21-1.el7.x86_64.rpm-bundle.tar1、上传安装包[root@leo-mysql5721~]#mkdir-p/u01/setup/dbsftp>lcdF:\installmedium\mysql\MySQL-5.7.21sftp>cd/u01/setup/dbsftp>putmysql-5.7.21-1.el7.x86_64.rpm-bundle......
  • Linux MySQL 修改数据和binlog文件目录
    概述系统:CentOS7.6MySQL数据库安装,默认数据库文件和binlog文件都在/var/lib/mysql目录下,若Linux系统安装时,未为根目录分配较大硬盘空间,很容易导致系统根目录硬盘空间不够用,从而导致MySQL服务或系统卡死或挂掉。故需要修改MySQL数据库文件和binlog文件目录。步骤1、停止MySQL服务roo......
  • MySQL 查询数据库表的数量
    MySQL查询数据库表的数量 1.获取指定数据库的表的数量SELECTCOUNT(*)TABLES,table_schemaFROMinformation_schema.TABLESGROUPBYtable_schema; 2.获取mysql下所有数据库表的数量SELECTCOUNT(*)TABLES,table_schemaFROMinformation_schema.TABLESWHEREtable_......
  • MySQL注入点写入WebShell的几种方式
    在工具化日益成熟的今天,手工注入的能力越来越被忽视了。当你掌握了一款工具的使用时,应更深入的去了解工具帮你做了什么,把工具所产生的影响控制在自己可控的范围内。比如:当面对一个MySQL注入点,通过使用SQLmap的--os-shell命令选项,便可轻松一键获取Webshell,但是非正常退出时,便会在网......
  • 为什么MySQL单表不能超过2000万行?
    摘要:MySQL一张表最多能存多少数据?本文分享自华为云社区《为什么MySQL单表不能超过2000万行?》,作者:GaussDB数据库。最近看到一篇《我说MySQL每张表最好不要超过2000万数据,面试官让我回去等通知》的文章,非常有趣。文中提到,他朋友在面试的过程中说,自己的工作就是把用户操作信息......