分享

MySQL SELECT查询

 坚定前行 2022-11-12

注意事项 - 多条SQL语句以分号(;)结尾 - 代码书写规范 - mysql不区分大小写,但习惯上,关键字用大写,表名等非关键字用小写 - SQL语句中忽略所有空格,可以在同一行写出也可以分多行,一般使用多行

子句执行顺序 

SELECT 

FROM 

WHERE 

GROUP BY 

HAVING 

ORDER BY 

LIMIT

基本SELECT检索

检索所有列(*)

检索并返回不重复结果(DISTINCT)

根据所有字段去重,而不是只针对某一字段,必须放在所有列名前

限制结果返回行数(LIMIT)

筛选条件(WHERE)

多个条件之间可用AND或OR连接,不限个数,但需注意计算顺序,优先计算AND,可以用括号来明确计算顺序创建计算字段

拼接字段

MySQL使用Concat()函数实现拼接,而多数DBMS采用其他方式

删除空格

使用别名

使用中文别名时使用单引号,’别名’

算数计算

可使用 + - * / (),注意,包含NULL的运算结果一定为NULL

聚合排序

分组(GROUP BY & HAVING)

排序(ORDER BY)

GROUPING

GROUP BY同时得到合计行

  • ROLLUP

被汇总的行中如有NULL,展示的结果可能不好区分其是否为合计行,可使用GROUPING函数优化该问题

  • GROUPING

用于判断当前行是否为ROLLUP产生的统计行

CASE所有分支返回值必须一致,因此需使用CAST对日期进行类型转换CUBE

数据n方体,展示出所有可能组合的维度汇总值

  • GROUPING SETS

用于从CUBE中指定汇总结果的组合,极少使用,略

复杂查询

视图

子查询

使用子查询时应设定子查询的名称,在Oracle中不写AS关键字

1)将查询结果用作数据源

2)将子查询做条件
用于条件时,子查询中只能有一个字段,当子查询的结果只有一个值时,where后可以使用比较运算符,结果有多个值时,where后只能用in或not in

关联子查询

函数

用日期做为WHERE条件时,尤其注意判断两侧口径一致,例如,不要用日期时间 = 日期,返回结果很可能不符合预期

日期函数在不同数据库中差异较大

谓词

MySQL仅支持正则表达式中的部分功能,详见正则表达式专题:https://www./anqh/ 0a6f043c133d45e9a5cefbc85afacb51

CASE表达式

可用于任意允许使用表达式的地方,且CASE子句中可以使用谓词、子查询等

CASE各分支返回的数据类型需保持一致

格式

基本用法

CASE分组

注意:在ORACLE等数据库中,不能在GROUP BY中使用字段别名,需使用以下方式

CASE更新

相比于分多条SQL执行,该方式更为准确,且速度更快。避免一笔数据先后被执行两次,造成数据错误,(例如:某人薪资为300000,先执行语句变为270000,又执行语句变为324000)

转二维表

集合运算

纵向运算

并集(UNION)

交集(INTERSECT)

差集(EXCEPT)

Oracle中,使用MINUS关键字

横向运算:联结(JOIN)

等值联结

内联结

外部联结

交叉联结

无需指定ON,直接进行笛卡尔积,形成m*n行

自联结

理解:将同一个表引用两次,以不同别名命名,条件中

窗口函数

对查询到的数据进行分区运算,并生成结果列,只能用于SELECT语句中

基本语法

  • PARTITION BY:指定计算时的分区字段,并非必要子句,不指定时在整个表范围进行运算

  • ORDER BY:指定计算时的顺序,不决定结果展示顺序

专用窗口函数

RANK排序

聚合函数

将聚合函数作为窗口函数使用时,为累计运算,即逐行累加

SUM累加

AVG累计平均

COUNT累计计数

MAX/MIN逐行最值

框架范围

定义窗口函数计算时的行取值范围,可选择当前行之前或之后的n行作为框架范围

全文本搜索(Match & Against)
与like正则表达式的区别 1、全文本搜索速度快,且能智能返回匹配度 2、需先建立全文本索引,才能进行搜索 3、并非所有的数据库引擎均支持全文本搜索,例如,在MySQL中InnoDB引擎不支持,而MyISAM支持全文本索引
本质上,全文本搜索是根本预先创建好的索引,按搜索时的检索条件创建一个表示匹配度的计算字段,因此在进行where时,只返回匹配度不等于0的值

全文本搜索的布尔方式(IN BOOLEAN MODE)
MySQL支持全文本搜索的布尔方式,该方式不需要提前建立索引,可直接使用

用法示例

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多