0

0

MySQL之SQL语法及SQL解析顺序源码分析

王林

王林

发布时间:2023-05-29 10:34:13

|

1643人浏览过

|

来源于亿速云

转载

sql(structured query language)是一种标准,作为一种访问【关系型数据库的标准语言】。许多数据库产品,如oracle,db2,sql server,postgresql,mysql都支持它。在过去几年中,nosql最初声称不需要sql,但最终不得不修正为"not only sql",以便兼容sql技术。

目前比较典型的版本是 SQL 92标准。包括MySql在内的其他数据库,在SQL 92 或 SQL 99这些标准基础之上,还扩展了一些自己的SQL语句,如 MySQL中的limit关键字。

SQL语言分类

  • DDL

    数据定义语言,用来定义数据库对象,数据库,表,列等。如create,alter,drop等

  • DML

    数据操作语言,用来对数据库中的表的记录进行更新。如insert,update,delete等

  • DCL

    数据控制语言,用来定义数据库的访问权限,安全级别等。如grant等

  • DQL:

    数据查询语言,用来查询。如select,from,where等

 SQL语法顺序和解析顺序

# 语法顺序
SELECT DISTINCT
	
FROM
	 
JOIN  ON 
WHERE
	
GROUP BY
	
HAVING
	
ORDER BY
	
LIMIT 

# 解析顺序
FROM 
ON 
 JOIN   -- 这一步和上一步,会循环执行
WHERE  -- 这一步会循环执行,多个条件从左往右
GROUP BY 
HAVING 
SELECT   -- 分组之后才执行SELECT
DISTINCT 
ORDER BY 
LIMIT  -- 这一步是MySQL独有的语法,前面都是SQL92标准

FROM

对FROM的左表和右表计算笛卡尔积,产生虚表VT1

select * from seller join product;

MySQL之SQL语法及SQL解析顺序源码分析

ON

产生虚表VT1后,通过ON关键字进行筛选,只有符合条件的才会被筛选到虚表VT2

select * from seller s join product p on s.id = p.id;

MySQL之SQL语法及SQL解析顺序源码分析

OUTER JOIN

  • LEFT (OUTER) JOIN : 会返回左表(保留表)中全部记录以及右表中满足ON条件的记录

  • RIGHT (OUTER) JOIN : 同理

  • INNTER JOINT : 只返回左右两表中满足ON条件的记录

 若指定了OUTER JOIN(LEFT JOIN,RIGHT JOIN),那么保留表中未匹配ON条件的行,就会作为外部行,添加到虚表VT2中,形成虚表VT3。

select * from seller s right join product p on s.id = p.id;

MySQL之SQL语法及SQL解析顺序源码分析

PhotoG
PhotoG

PhotoG是全球首个内容营销端对端智能体

下载

若FROM子句,包含不止2个表,则会对上一个join连接产生的结果VT3,和下一个表重复执行上面的步骤

WHERE

根据where条件过滤

GROUP BY

对结果进行分组

-- mysql 8 默认开启了 only_full_group_by
select version(),@@sql_mode;
-- 需要把这个选项关掉,
set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
-- 后执行group by 正常
select * from user group by name;

MySQL之SQL语法及SQL解析顺序源码分析

HAVING

对分组的结果,进行having条件过滤

SELECT

选取指定的列

DISTINCT

针对某列去重
注意DISTINCT 一定要SELECT的第一列,加在后面无效

-- 下面无效
select id, distinct name from user;
-- 下面有效
select distinct name from user;

MySQL之SQL语法及SQL解析顺序源码分析

MySQL之SQL语法及SQL解析顺序源码分析

distinct 后加多列,则是将多列拼接在一起来去重

MySQL之SQL语法及SQL解析顺序源码分析

若想根据某一列去重,并显示出整行的数据,可以用GROUP BY

ORDER BY

排序

LIMIT

分页

注意:对于select中的列的别名,只有在order by中才能使用,由上面的SQL解析顺序可知

MySQL之SQL语法及SQL解析顺序源码分析

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

680

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

320

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

347

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1095

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

357

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

676

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

574

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

416

2024.04.29

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

43

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.8万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 797人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号