【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

相关推荐
时差95325 分钟前
【面试题】Hive 查询:如何查找用户连续三天登录的记录
大数据·数据库·hive·sql·面试·database
让学习成为一种生活方式27 分钟前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
秋意钟1 小时前
MySQL日期类型选择建议
数据库·mysql
Dxy12393102162 小时前
python下载pdf
数据库·python·pdf
ac-er88882 小时前
MySQL如何实现PHP输入安全
mysql·安全·php
桀桀桀桀桀桀2 小时前
数据库中的用户管理和权限管理
数据库·mysql
superman超哥3 小时前
04 深入 Oracle 并发世界:MVCC、锁、闩锁、事务隔离与并发性能优化的探索
数据库·oracle·性能优化·dba
用户8007165452003 小时前
HTAP数据库国产化改造技术可行性方案分析
数据库
engchina4 小时前
Neo4j 和 Python 初学者指南:如何使用可选关系匹配优化 Cypher 查询
数据库·python·neo4j
engchina4 小时前
使用 Cypher 查询语言在 Neo4j 中查找最短路径
数据库·neo4j