【MySQL】——数据查询操作

news/2024/9/25 2:32:17/

💻博主现有专栏:

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

                Y小夜-CSDN博客

目录

🎯语句格式

🎯单表查询

🎃查仅涉及一个表

✨选择表中若干列

✨选择表中的若干元组

🎃Order 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


http://www.ppmy.cn/news/1437579.html

相关文章

SSL证书在HTTP与HTTPS中的角色差异是什么?

在互联网的广泛应用背景下&#xff0c;随着网络攻击和数据泄露事件频发&#xff0c;保障用户的数据安全已成为至关重要的议题。传统的HTTP协议在传输数据时不进行加密处理&#xff0c;导致数据在传输过程中暴露于潜在的窃听和篡改风险中&#xff0c;安全性薄弱。而通过引入SSL/…

笔记:Python 循环结构练习题

文章目录 前言一、Python 循环结构是什么&#xff1f;二、选择题2.填空题 总结 前言 欢迎来到Python循环结构的练习题目录&#xff01;本系列旨在帮助您巩固和提升您对Python循环结构的理解和应用能力。循环结构是编程中的重要概念之一&#xff0c;通过它&#xff0c;您可以轻…

CentOS即将停服,国产化系统替代参考

国产化替代CentOS的产品有多个选择&#xff0c;主要包括以下几种&#xff1a; Alibaba Cloud Linux&#xff1a;阿里云提供的Linux操作系统&#xff0c;旨在为用户提供稳定、安全、高性能的云服务器环境。此外&#xff0c;阿里云还发布了“龙蜥”&#xff08;Anolis OS&#x…

Gather:基于 DePIN 体系构建的 Web3 社交生态

“Gather 通过搭建一套基于 DePIN 的 Web3 社交体系&#xff0c;正在成为 SocialFi 革命的早期推动者。” 基于互联网的社交&#xff0c;正在为人们提供了远距离沟通和连接的便利&#xff0c;打破了地理障碍&#xff0c;这种具备包容性、广泛性的线上连接&#xff0c;加速了信息…

Redis学习(二)|深入学习Redis 持久化

文章目录 什么是 Redis 的持久化**RDB 持久化**工作原理特点优点缺点 使用场景配置和调优 **AOF 持久化**工作原理特点优点缺点 使用场景配置和调优 RDB vs AOFAOF vs 幂等Redis 的持久化功能配置RDB or AOF设置 RDB 持久化设置 AOF 持久化重启 Redis 服务 RDB 持久化配置AOF 持…

Rime 如何通过 iCloud 实现词库多端同步,Windows、iOS、macOS

Rime 如何通过 iCloud 实现词库多端同步&#xff0c;Windows、iOS、macOS 一、设备环境 最理想的输入环境就是在多端都使用同一个词库&#xff0c;这样能保持多端的输入习惯是一致的。 以我为例&#xff0c;手头每天都要用到的操作平台和对应的输入法&#xff1a; 操作系统设…

网络安全(黑客)—-2024自学手册

一、什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试”等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面性…

HTTP接口调用时报错 java.io.IOException: Connection reset by peer解决办法

问题描述 在接口调用时,遇到如下报错:Caused by: java.io.IOException: Connection reset by peer at sun.nio.ch.FileDispatcherImpl.write0(Native Method) ~[?:1.8.0_241] at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47) ~[?:1.8.0_…