【MySQL】——数据查询操作

💻博主现有专栏:

C51单片机(STC89C516),c语言,c++,离散数学,算法设计与分析,数据结构,Python,Java基础,MySQL,linux,基于HTML5的网页设计及应用,Rust(官方文档重点总结),jQuery,前端vue.js,Javaweb开发,Python机器学习等
🥏主页链接:

Y小夜-CSDN博客

目录

🎯语句格式

🎯单表查询

🎃查仅涉及一个表

✨选择表中若干列

✨选择表中的若干元组

[🎃Order by子句](#🎃Order by子句)

🎃聚集函数

[🎃group by字句](#🎃group by字句)

🎯连接查询

🎃等值与非等值连接查询

🎃自身连接

🎃外连接

🎃多表连接

🎯嵌套查询

🎯集合查询

🎯基于派生表的查询

🎯SELECT语句的一般形式

🎃目标列表达式的可选格式


🎯语句格式

SELECT ALL\|DISTINCT <目标列表达式>,\<目标列表达式\>

FROM <表名或视图名>,\<表名或视图名\> ...|(SELECT 语句)

AS<别名>

WHERE \<条件表达式\>

GROUP BY \<列名1\> \[ HAVING \<条件表达式\> \]

ORDER BY \<列名2\> \[ ASC\|DESC ];

  • SELECT子句:指定要显示的属性列
  • FROM子句:指定查询对象(基本表或视图)
  • WHERE子句:指定查询条件
  • GROUP BY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用聚集函数。
  • HAVING短语:只有满足指定条件的组才予以输出
  • ORDER BY子句:对查询结果表按指定列值的升序或降序排序

🎯单表查询

🎃查仅涉及一个表

✨选择表中若干列

查询全部列

选出所有属性列:

  • 在SELECT关键字后面列出所有列名
  • 将<目标列表达式>指定为 *

查询经过计算的值:

  • SELECT子句的<目标列表达式>不仅可以为表中的属性列,也可以是表达式

✨选择表中的若干元组

消除取值重复的行

  • 如果没有指定DISTINCT关键词,则缺省为ALL
  • 指定DISTINCT关键词,去掉表中重复的行

确定集合:

  • 谓词:IN <值表>, NOT IN <值表>

字符匹配:

  • 谓词: NOT LIKE '<匹配串>' ESCAPE ' \<换码字符\>'

涉及到控制查询:

  • 谓词: IS NULL 或 IS NOT NULL "IS" 不能用 "=" 代替

多重条件查询

  • 逻辑运算符:AND和 OR来连接多个查询条件
  • AND的优先级高于OR
  • 可以用括号改变优先级

🎃Order by子句

  • 可以按一个或多个属性列排序
  • 升序:ASC;降序:DESC;缺省值为升序
  • 对于空值,排序时显示的次序由具体系统实现来决定

🎃聚集函数

统计元组个数 :

  • COUNT(*) 统计一列中值的个数
  • COUNT(DISTINCT\|ALL <列名>)

计算一列值的总和(此列必须为数值型):

  • SUM(DISTINCT\|ALL <列名>)

计算一列值的平均值(此列必须为数值型):

  • AVG(DISTINCT\|ALL <列名>)

求一列中的最大值和最小值 :

  • MAX(DISTINCT\|ALL <列名>)
  • MIN(DISTINCT\|ALL <列名>)

🎃group by字句

GROUP BY子句分组:

细化聚集函数的作用对象

  • 如果未对查询结果分组,聚集函数将作用于整个查询结果
  • 对查询结果分组后,聚集函数将分别作用于每个组
  • 按指定的一列或多列值分组,值相等的为一组

HAVING短语与WHERE子句的区别:

  • 作用对象不同 WHERE子句作用于基表或视图,从中选择满足条件的元组
  • HAVING短语作用于组,从中选择满足条件的组。

🎯连接查询

连接查询:同时涉及两个以上的表的查询

连接条件或连接谓词:用来连接两个表的条件

  • 一般格式: \<表名1\>.<列名1> <比较运算符> \<表名2\>.<列名2>
  • \<表名1\>.<列名1> BETWEEN \<表名2\>.<列名2> AND \<表名2\>.<列名3>

连接字段:连接谓词中的列名称

连接条件中的各连接字段类型必须是可比的,但名字不必相同

🎃等值与非等值连接查询

等值连接:连接运算符为=

方法:

  • 嵌套循环法(NESTED-LOOP)
  • 排序合并法(SORT-MERGE)
  • 索引连接(INDEX-JOIN)

自然连接:

一条SQL语句可以同时完成选择和连接查询,这时WHERE子句是由连接谓词和选择谓词组成的复合条件。

执行过程:

  • 先从SC中挑选出Cno='2'并且Grade>90的元组形成一个中间关系
  • 再和Student中满足连接条件的元组进行连接得到最终的结果关系

🎃自身连接

  • 自身连接:一个表与其自己进行连接
  • 需要给表起别名以示区别
  • 由于所有属性名都是同名属性,因此必须使用别名前缀

🎃外连接

外连接与普通连接的区别:

  • 普通连接操作只输出满足连接条件的元组
  • 外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出

左外连接:

  • 列出左边关系中所有的元组

右外连接:

  • 列出右边关系中所有的元组

🎃多表连接

多表连接:两个以上的表进行连接

在建立数据表时,如果一个表与多个表联接,那么这一个表中的字段必须是"数字"数据类型,而多个表中的相同字段必须是主键,而且是"自动编号"数据类型。 否则,很难联接成功。 代码嵌套快速方法:如,想连接五个表,则只要在连接四个表的代码上加一个前后括号(前括号加在FROM的后面,后括号加在代码的末尾即可),然后在后括号后面继续添加"INNER JOIN 表名X ON 表1.字段号=表X.字段号"代码即可,这样就可以无限联接数据表了。

🎯嵌套查询

嵌套查询概述:

  • 一个SELECT-FROM-WHERE语句称为一个查询块
  • 将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询
  • 上层的查询块称为外层查询或父查询
  • 下层查询块称为内层查询或子查询
  • SQL语言允许多层嵌套查询:即一个子查询中还可以嵌套其他子查询
  • 子查询的限制:不能使用ORDER BY子句

嵌套查询可分成不相关子查询和相关子查询两类。

  • 不相关子查询的查询条件不依赖于父查询,一般使用谓词IN。
  • 相关子查询的查询条件依赖于外层父查询的某个属性值,一般使用谓词EXISTS。

同样一个查询,既可以用不相关子查询实现,也可以用相关子查询实现,也可以用连接查询实现。

🎯集合查询

集合操作的种类

  • 并操作UNION
  • 交操作INTERSECT
  • 差操作EXCEPT
  • 参加集合操作的各查询结果的列数必须相同;对应项的INTERSECT

数据类型也必须相同,列名可以不同

UNION:将多个查询结果合并起来时,系统自动去掉重复元组

UNION ALL:将多个查询结果合并起来时,保留重复元组

🎯基于派生表的查询

子查询不仅可以出现在WHERE子句中,还可以出现在FROM子句中,这时子查询生成的临时派生表(Derived Table)成为主查询的查询对象

例子:

查询所有选修了1号课程的学生姓名,可以用如下查询完成:

SELECT Sname

FROM Student,

(SELECT Sno FROM SC WHERE Cno=' 1 ') AS SC1

WHERE Student.Sno=SC1.Sno;

🎯SELECT语句的一般形式

SELECT ALL\|DISTINCT

<目标列表达式> 别名 ,\<目标列表达式\> \[别名] ... FROM

<表名或视图名> 别名

,\<表名或视图名\> \[别名] ...

|(<SELECT语句>)AS<别名>

WHERE \<条件表达式\>

GROUP BY \<列名1\>\[HAVING\<条件表达式\>]

ORDER BY \<列名2\> \[ASC\|DESC];

🎃目标列表达式的可选格式

目标列表达式格式

(1) *

(2) <表名>.*

(3) COUNT(DISTINCT\|ALL* )

(4) \<表名\>.<属性列名表达式>,\<表名\>.<属性列名表达式>]...

其中<属性列名表达式>可以是由属性列、作用于属性列 的聚集函数和常量的任意算术运算(+,-,*,/)组成的 运算公式

🎃聚集函数的一般形式

COUNT

SUM

AVG ------------------》(DISTINCT\|ALL <列名>)

MAX

MIN

相关推荐
步十人1 小时前
【Redis】持久化机制
数据库·redis·缓存
Quincy_Freak2 小时前
银河麒麟aarch64如何高效做数据分析?分享一款内网离线数据分析利器
大数据·数据库·数据挖掘·数据分析·aarch64
香气袭人知骤暖2 小时前
PG数据库 Docker 容器自动备份方案
数据库·docker·容器
me8323 小时前
【Linux】Linux 目录命名规范溯源(Linux各个目录究竟是干嘛的)
linux·运维·数据库
土狗TuGou3 小时前
SQL内功笔记 · 第2篇:列的约束
数据库·笔记·sql
java_cj3 小时前
MySQL 执行原理深度剖析:查询成本计算与优化器内幕
数据库·后端·mysql
java_cj3 小时前
数据库范式化设计与性能优化全攻略
数据库·后端·性能优化·架构·开源
Noushiki3 小时前
MySQL索引优化实战:高效查询的黄金法则
数据库·sql·mysql
TDengine (老段)3 小时前
TDengine Commit 与 Flush 机制 — 从内存到磁盘的数据落盘全流程
大数据·数据库·物联网·架构·时序数据库·iot·tdengine
Dxy12393102164 小时前
Python 操作 MySQL 事务:从入门到避坑
android·python·mysql