文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-04-06 17:31

关注

这篇“MySQL之SQL语法及SQL解析顺序源码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL之SQL语法及SQL解析顺序源码分析”文章吧。

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语言分类

 SQL语法顺序和解析顺序

# 语法顺序
SELECT DISTINCT
	<select_list>
FROM
	<left_table> <join_type>
JOIN <right_table> ON <join_condition>
WHERE
	<where_condition>
GROUP BY
	<group_by_list>
HAVING
	<having_condition>
ORDER BY
	<order_by_condition>
LIMIT <limit_number>

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

FROM

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

select * from seller join product;

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

ON

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

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

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

OUTER JOIN

 若指定了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解析顺序源码分析

若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解析顺序源码分析

以上就是关于“MySQL之SQL语法及SQL解析顺序源码分析”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯