MySQL查询操作

news2025/1/15 12:53:06

系列文章目录

  • 前言
  • 一、简单查询
    • SELECT子句
      • SELECT后面之间跟列名
      • DISTINCT,ALL
      • 列表达式
      • 列更名
    • WHERE子句
      • WHERE子句中可以使用的查询条件
      • 比较运算
      • BETWEEN...AND...
      • 集合查询:IN
      • 模糊查询LIKE
      • 空值比较:IS NULL
      • 多重条件查询
    • SELECT 的基本结构
      • ORDER BY子句排序
      • 聚集函数
      • 分组查询【GROUP BY和HAVING 子句】
  • 二、嵌套子查询
    • 比较运算中使用子查询
    • 带有IN的子查询
    • SOME(子查询)
    • ALL(子查询)
    • EXISTS子查询
  • 三、多表连接查询
    • 内连接
    • 外连接
      • 左外连接
      • 右外连接
      • 全外连接
  • 四、复杂查询
    • 复杂查询UNION [ALL]

前言

一、简单查询

select 表示查询
from 后接表名,表示查询哪张表
where 是筛选条件,满足条件的会被查询出来

SELECT子句

SELECT后面之间跟列名

【例】:查询 Student 表中的学号、姓名、班级

SELECT 学号、姓名、班级
FROM Student

【例】:查询 Student 表中全部数据

SELECT 学号、年龄、姓名、性别、联系方式、班级
FROM Student

等价于:

SELECT * FROM Student

当想要选取一个表中全部列时,全部列可以用【*】表示

DISTINCT,ALL

如果在结果中重复的数据不想显示出来,可以使用distinct关键字
对比结果:
【例】

SELECT pubilsh FROM Book
对比:
SELECT DISTINCT pubilsh FROM Book

也可以指明不要去除重复元祖,使用ALL关键字

SELECT ALL sex FROM Student

列表达式

【例】查询每一本书九折后的价格

Book表
book_IDnameprice
1A025B1计算机文化基础28.00
2A025B2C语言58.00
3A025B3JAVA25.00
4A025B4Python27.00
SELECT book_ID,name,price*0.9 FROM Book

列更名

SQL 提供了为关系表和属性重新命名的机制。

经过计算的列、函数的列和常量列的显示结果都没有列名,也可以通过这样的方式指定列名。

语法格式:旧列名 | 表达式 [ AS ] 新列名 或:新列名 =旧列名 | 表达式
【例】:

SELECT sno AS 学号、name AS 姓名、bno AS 班级
FROM Student

WHERE子句

语法格式:

SELECT  列名列表  FROM  表名 
WHERE  条件表达式

【例】查询成绩大于90分的学生的全部信息

SELECT * FROM Student 
WHERE Score > 90

WHERE子句中可以使用的查询条件

在这里插入图片描述

比较运算

【例】查询所有的女老师的信息

Select * from Teacher where sex='女'

【例】查询学生成绩在60到90分之间的学生

SELECT * FROM Student 
WHERE Score >= 60 AND Score <= 90

【例】查询“高等教育出版社”或者“清华大学出版社”出版的图书

 SELECT * FROM Book 
 WHERE publish ='高等教育出版社' or publish = '清华大学出版社'

BETWEEN…AND…

用法:BETWEEN<下限值>AND<上限值>

【例】查询学生成绩在60到90分之间的学生

SELECT * FROM Student 
WHERE Score BETWEEN 60 AND 90

等价于

SELECT * FROM Student 
WHERE Score >= 60 AND Score <= 90

它可以查找上限值与下限值之间的元组,也可以查找不在上限值与下限值之间的元组

【例】查询学生成绩不在60到100分之间的学生

SELECT * FROM Student
WHERE Score NOT BETWEEN 60 AND 100

等价于

SELECT * FROM Student
WHERE Score < 60 OR price > 100

集合查询:IN

【例】查找“机械工业出版社”,“清华大学出版社”,“高等教育出版社”出版的全部图书

SELECT * FROM Book 
WHERE publish IN('机械工业出版社','清华大学出版社','高等教育出版社')

【例】查找不是“机械工业出版社”,“清华大学出版社”,“高等教育出版社”出版的全部图书

SELECT * FROM Book 
WHERE publish NOT IN ('机械工业出版社','清华大学出版社','高等教育出版社')

模糊查询LIKE

LIKE的用法
列名 LIKE <字符串>

在字符串中我们可以使用通配符
_代表任意一个字符
%代表任意多个字符

【例】查询姓全部 “张” 的读者的信息。

SELECT * FROM Reader
WHERE name LIKE '张%'

【例】查询1999年出生的学生的信息

SELECT * FROM Student
WHERE birthdate LIKE '%1999%'

空值比较:IS NULL

【例】查询性别为空的学生的信息

SELECT * FROM Student
WHERE sex IS NULL

【例】查询出生日期不为空的学生的姓名

SELECT name FROM Student
WHERE birthdate IS not NULL

多重条件查询

【例】查询1992年以后出生的女学生的姓名

SELECT name FROM Student
WHERE birthdate >= '1992-1-1' AND sex='女'

SELECT 的基本结构

SELECT子句:选择表中列
WHERE子句:筛选表中元组
ORDER BY子句:对查询结果排序
聚集函数:统计
GROUP BY子句:分组查询
HAVING子句:对分组结果筛选

ORDER BY子句排序

ORDER BY <列名> [ASC|DESC][,…n]

ASC表示升序排序;DESC表示降序排序
默认情况为升序排序

• 注:对于空值,若按照升序排序,含空值的元组将最后
显示。若按降序排序,空值的元组将最先显示

【例】查询学生的信息按出生日期的升序显示

SELECT * FROM Student
ORDER BY birthdate ASC

【例】查询老师的信息按出生日期的"降序"显示

SELECT * FROM Teacher
ORDER BY birthdate DESC

【例】查询图书的信息,查询结果按照出版社的名称升序排序,同一出版社的按照价格的降序排序。

SELECT * FROM Book 
ORDER BY publish ASC,price DESC

聚集函数

聚集函数(也叫集合函数),方便用户统计一些数据。
COUNT(*): 统计表中元组个数;
COUNT(列名):统计本列列值个数;
SUM(列名):计算列值总和(必须是数值型列);
AVG(列名):计算列值平均值(必须是数值型列);
MAX(列名):求列值最大值;
MIN(列名):求列值最小值。

【例】统计全部学生的平均成绩

SELECT AVG(Score) FROM Student

【例】查询最高的学生成绩

SELECT MAX(Score) FROM Student

【例】统计老师的总人数

SELECT COUNT(*) FROM Teacher

聚合函数不能出现在 WHERE 子句中

分组查询【GROUP BY和HAVING 子句】

【例】统计每个出版社的出版图书的数目
分析:如果能够将所有的图书,按照出版社的名称进行分组,然后我们在统计每一组的元组的个数,我们就能能到得到期望的数据。如图:

Book_IDNameAuthorPublicPrice
1256B10001数据库原理张三电子工业出版社25.00
2256B10001离散数学NULL高等教育出版社28.00
3256B10001线形数学李四高等教育出版社51.00
4256B10001大学语文张龙机械工业出版社31.00
5256B10001C语言赵虎机械工业出版社22.00
6256B10001JAVA王朝清华大学出版社42.00
7256B10001Python马汉清华大学出版社21.00

可以使用GROUP BY <列名>进行分组

在<列名>上值相同的元组被分在一组,该列称为分组依据列。然后可以使用聚集函数统计每一组的数据。

SELECT COUNT(*) , publish FROM Book
GROUP BY publish

【例】统计每个人所借图书的数目。

SELECT COUNT(book_ID), Reader_id
FROM Borrow 
GROUP BY Reader_id
Having COUNT(book_ID)>2

【例】统计每个出版社出版图书的平均价格,并显示每个出版社的名称

SELECT publish, AVG(price) AS 平均价格
FROM Book
GROUP BY publish

【例】查询出版图书平均价格高于30元的出版社名称,并显示其图书平均价格。
HAVING 子句用于对分组统计后的结果进行筛选。满足HAVING 子句条件将会保留在结果中

SELECT publish,AVG(price) FROM Book 
GROUP BY publish
HAVING AVG(price)>30

【例】查询出版图书多于2本的出版社名称和出版图书数目

SELECT publish, COUNT(*) FROM Book 
GROUP BY publish
HAVING COUNT(*)>2

二、嵌套子查询

在SQL语言中,一个SELECT-FROM语句称为一个查询块。

如果一个SELECT语句嵌套在另一个SELECT、INSERT、UPDATE或DELETE语句中,则称之为子查询或内层查询;而包含子查询的语句则称为主查询或外层查询。

执行顺序:先内层后外层;先子查询后主查询

比较运算中使用子查询

【例】查询成绩最好的学生的姓名

SELECT name FROM Student WHERE Score =(SELECT MAX(Score) FROM Student)

带有IN的子查询

【例】查询与"C语言"在同一出版社的图书信息

SELECT * FROM Book WHERE publish IN (
	SELECT publish FROM Book WHERE name='C语言')

【例】查询王旭所借图书的图书编号

SELECT book_ID FROM Borrow WHERE reader_ID IN (
	SELECT reader_ID FROM Reader WHERE   
		name='王旭')

【例】查询"王旭"所借的图书的名称

SELECT name FROM Book WHERE book_ID IN(
	SELECT book_ID FROM Borrow WHERE reader_ID IN (
		SELECT reader_ID FROM Reader WHERE  name='王旭'))

查询过程:
第1步,查询"王旭"的reader_ID。
第2步,依据reader_ID在Borrow表中找王旭所借图书的book_ID
第3步,依据book_ID在Book表中找到图书名称。

【例】查询借书价格在20-40之间的读者的姓名

select name from reader where reader_id in(
	select reader_id from borrow where book_id in(
		select book_id from book where price between 20 and 40))

查询张三 ‘借阅’ 计算机文化基础’的日期

select borrowdate from borrow 
where reader_id in(
	select  reader_id from reader 
	where name='张三')
	and 
	book_id in(
	select book_id from book 
	where name='计算机文化基础')

查询借书价格在20-40之间的读者的姓名

select name from reader where reader_id in(
	select reader_id from borrow 
    where book_id in(
    select book_id from book 
    where price between 20 and 40))

SOME(子查询)

表示子查询的结果集合中某一个元素

【例】查询除不是最低价格外的所有图书

SELECT * FROM Book WHERE price>SOME(SELECT price FROM Book)

【例】查询价格最低的图书信息

SELECT * FROM Book WHERE NOT(price>SOME(SELECT price FROM Book))

ALL(子查询)

表示子查询的全部结果

【例】查询书价最高的图书的信息

SELECT * FROM Book WHERE price >=ALL(SELECT price FROM Book)

【例】查询评价书价最高的出版社名称

SELECT * FROM Book 
GROUP BY public
HAVING AVG(price)>=ALL(
	SELECT AVG(price) FROM Book
	GROUP BY public)

EXISTS子查询

判断子查询是否存在结果

当子查询存在结果时,EXISTS(子查询)返回值为true,否则返回值为false。

先外层查询,后内层查询;将外层的值代入内层进行查询,根据内层查询是否存在结果,判断外层的元组是否保留在结果集中。

【例】查询借阅了图书的读者的姓名

SELECT name FROM reader WHERE 
EXISTS ( SELECT * FROM borrow WHERE     
borrow.reader_id=reader.reader_id)

【例】查询被借出的图书的信息

SELECT * FROM Book WHERE EXISTS
(SELECT * FROM Borrow WHERE Borrow.book_ID=Book.book_ID)

三、多表连接查询

JOIN 表示连接,inner表示内连接,outer表示外连接,缺省情况就是内连接。
ON后面接<连接条件>

内连接

语句格式FROM 表1 [inner] JOIN 表2 ON <连接条件>
满足连接条件的元组保留到连接的结果中,其中存在不满足连接条件的元组会被舍弃。

在这里插入图片描述
表X和Y内连接结果

SELECT  a, X.b, Y.b, c 
FROM X  
JOIN Y  
ON X.b=Y.b

在这里插入图片描述
一张表和自身连接。必须给表其别名

• 【例】查询与C语言在同一出版社的图书信息
分析:C语言一书在Book表中,与它在同一出版社的图书也在Book表中。二者通过publish相等进行连接

SELECT BookW.* FROM Book BookC JOIN 
Book BookW on 
BookC.publish=BookW.publish WHERE 
BookC.name=‘C语言’ AND BookW.name<> 'C语言'

• 内连接的特点:满足连接条件的元组保留到连接的结果中,其中存在不满足连接条件的元组会被舍弃。

外连接

和内连接相对的就是外连接。
外连接的特点:满足连接条件的元组保留到连接的结果中,其中不满足连接条件的元组也会显示到连接结果中。
外连接分类:

左外连接

语法格式:FROM 表1 LEFT [OUTER] JOIN 表2 ON <连接条件>

LEFT OUTER JOIN表示左外连接, OUTER 可省略

【例】表 X 和 Y 进行左外连接语句及连接结果

SELECT a,X.b,Y.b,c from x left outer join y ON x.b=Y.b

在这里插入图片描述
在连接过程中,左侧表一的元组r 如果不能满足连接条件,r 保留在连接的结果中
在连接结果中,和 r 对应的表二的例值用NULL来代替

右外连接

语法格式:FROM 表1 RIGHT [OUTER] JOIN 表2 ON <连接条件>

【例】表 X 和 Y 进行右外连接语句及连接结果

SELECT a, X.b, Y.b, c FROM X RIGHT JOIN Y ON X.b=Y.b

在这里插入图片描述
右侧表Y的元组(3,Q),虽未能在表X中找到相匹配的元组,单保留在结果当中
同时 a,X.b 的值用NULL填充

全外连接

语法格式:FROM 表1 FULL [OUTER] JOIN 表2 ON <连接条件>

【例】表 X 和 Y 进行右外连接语句

SELECT a, X.b, Y.b, c FROM X FULL OUTER JOIN Y ON X.b=Y.b

【例】查询所有读者借阅情况(包括没借阅图书的读者),显示读者编号,读者姓名,图书编号和书名。

SELECT R.reader_ID, R.name, B.book_ID, B.name 
FROM Reader AS R LEFT JOIN Borrow 
AS BW 
ON R.reader_ID=BW.reader_ID LEFT 
JOIN Book AS B ON B.book_ID=BW.book_ID

四、复杂查询

复杂查询UNION [ALL]

使用UNION语句可以合并两个或多个查询的结果。

UNION语句用第二个查询结果合并第一个查询结果。

它不显示两个查询中的重复的行。

如果想显示所有行(包括重复行)则可以在UNION后面添加ALL谓词

union的语法格式:

SELECT <目标列名序列> 
 FROM <数据源> 
  [WHERE <检索条件表达式>] 
  [GROUP BY <分组依据列>] 
  [HAVING <组提取条件>]
UNION [ALL]
 SELECT <目标列名序列> 
 FROM <数据源> 
  [WHERE <检索条件表达式>] 
  [GROUP BY <分组依据列>] 
  [HAVING <组提取条件>]
  [ORDER BY <排序依据列> [ASC|DESC]]

注意:如果使用使用ORDER BY 字句进行排序,则该子句只出现最后一个查询的后面,如果不希望去除重复的元组,可以使用关键字ALL。

• 【例】

SELECT * FROM Book 
WHERE publish='清华大学出版社'
UNION ALL
SELECT * FROM Book 
WHERE price<25
ORDER BY name

因为使用了关键字ALL,结果中的重复元组被保留
在这个查询中的第二个查询后使用了ORDER BY 子句,使并集结果按书名name排序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/379265.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue导出excel

1、下载依赖 npm install --save xlsx file-saverps&#xff1a;我下载完依赖后再运行会报错&#xff0c;偶尔情况&#xff0c;没找到原因&#xff0c;只需要卸载重新npm install就好 2、新建一个写公共js方法的文件**&#xff0c;如果你有的话 &#xff0c;写在里面就好 然…

Mysql 用户管理、权限管理(含用户密码修改)

和Linux 系统一样&#xff0c;也有着自己独有的用户管理系统&#xff0c;MySQL所有的用户信息都被保存在mysql数据库中的user表中。 目录 1、用户信息 2、用户管理 (1) 创建用户 (2) 删除用户 (3) 修改用户密码 3、用户权限管理 (1) 赋予权限&#xff08;grant&#xff…

Mysql5.7+Orch+proxysql+keepalive

架构设计 通过gtid配置MySQL主从&#xff0c;通过orch实现高可用&#xff0c;orch通过raft实现自身的高可用&#xff0c;通过proxysql实现读写分离&#xff0c;proxysql可自身可以配置集群&#xff0c;通过keepalive实现虚拟IP漂移&#xff0c;keepalive可以自身配置集群 配…

蓝桥杯嵌入式LED流马灯(使用HAL_Delay、操作寄存器、使用定时器)

1.STM32CubeMX的配置 将PC8-PC15设置为GPIO_Output模式&#xff0c;将PD2也设置为GPIO_Output模式。 通过原理图知&#xff0c;LED&#xff08;PC8-PC15&#xff09;低电平有效&#xff0c;锁存器(PD2)高电平有效。 初始化时我将LED设置为高电平&#xff0c;熄灭状态&#xff0…

MyBatis - 09 - 自定义映射resultMap

文章目录1 准备工作1.1 建表1.2 创建实体类1.3 引出一个问题方案1方案2方案32.完整代码项目结构EmpMapper接口Emp类SqlSessionUtils工具类EmpMapper.xmljdbc.propertieslog4j.xmlmybatis-config.xmlResultMapTest完整代码在后面 1 准备工作 1.1 建表 t_emp 添加测试数据&…

AOP在PowerJob中的使用,缓存锁保证并发安全,知识细节全总结

这是一篇简简单单的文章&#xff0c;需要你简简单单看一眼就好&#xff0c;如果有不明白的地方&#xff0c;欢迎留言讨论。 在之前的文章中出现过一次AOP的使用&#xff0c;就是在运行任务之前&#xff0c;需要判断一下&#xff0c;触发该任务执行的server&#xff0c;是不是数…

[神经网络]图神经网络(GNN)

一、概述 1.图 图用来表示一些实体(entities)之间的关系(实体表示为点(node)&#xff0c;关系表示为边(edge))。 关系分为有方向和无方向 2.数据的图表示 以图像文件为例&#xff0c;我们可以用邻接矩阵来表示一张图像。每个点表示一个像素点&#xff0c;若一个像素点有x个相邻…

重生之我是SVG(1)-入门

概述 引用一句来自MDN的一句话&#xff1a; SVG 图像是使用各种元素创建的&#xff0c;这些元素分别应用于矢量图像的结构、绘制与布局。在这里&#xff0c;您可以找到每个 SVG 元素的参考文档。 SVG 文件可以直接插入网页&#xff0c;成为 DOM 的一部分&#xff0c;然后用 Ja…

华三OSPF多区域互访实验

OSPF 实验 实验拓扑 实验需求 按照图示配置 IP 地址按照图示分区域配置 OSPF &#xff0c;实现全网互通为了路由结构稳定&#xff0c;要求路由器使用环回口作为 Router-id&#xff0c;ABR 的环回口宣告进骨干区域 实验解法 1.配置 IP 地址部分 2.按照图示分区域配置 OS…

Zeppelin-0.10.0的安装

目录 1.解压到指定目录 2.修改文件名 3.拷贝配置文件 4.修改IP和端口号&#xff0c;也可以改为8090等端口号 5.修改zeppelin-env.sh文件 6.复制hive-site.xml文件到当前目录下 7.切换目录 8.拷贝hadoop和hive的各种jar包到/opt/soft/zeppelin/interpreter/jdbc目录下 …

SDYY大学普通话考试报名系统说明文档

系列文章目录 健康云平台开发说明文档SD申报系统迭代说明文档漏刻有时物联网传感器API接口对接说明文档Echarts数据分析系统Data Analysis Platform使用说明文档漏刻有时云守护数据可视化v2.0迭代升级说明文档百度地图POI多信息点标注开发说明文档漏刻有时云守护数据可视化画质…

Docker之路(7.DockerFile文件编写、DockerFile 指令解释、CMD与ENTRYPOINT的区别)

1.DockerFile介绍 dockerfile 是用来构建docker镜像的文件&#xff01;命令参数脚本&#xff01; 构建步骤&#xff1a; 编写一个dockerfile文件docker build构建成为一个镜像docker run 运行镜像docker push发布镜像&#xff08;DockerHub、阿里云镜像仓库&#xff09; 2.Dock…

如何使用ADFSRelay分析和研究针对ADFS的NTLM中继攻击

关于ADFSRelay ADFSRelay是一款功能强大的概念验证工具&#xff0c;可以帮助广大研究人员分析和研究针对ADFS的NTLM中继攻击。 ADFSRelay这款工具由NTLMParse和ADFSRelay这两个实用程序组成。其中&#xff0c;NTLMParse用于解码base64编码的NTLM消息&#xff0c;并打印有关消…

SAP 在建工程转固定资产

由固定资产归口采购部门或业务部门提交购置固定资产/在建工程的申请&#xff0c;经审批后&#xff0c;若是需要安装调试&#xff0c;则由财务部固定资产会计建立内部订单收集成本&#xff0c;月末结转在建工程。项目完工后&#xff0c;相关部门&#xff08;公司装备部、分公司装…

Python虚拟环境迁移

使用python开发脚本使用的时候难免会遇到需要更换电脑来运行的问题&#xff0c;但是python不同版本的兼容性较差&#xff0c;在其他电脑使原python脚本运行时经常会发生一些问题&#xff0c;因此就需要python虚拟环境的迁移了。但是&#xff0c;直接将虚拟环境复制到另一台电脑…

Git学习(1)pro git阅读尚硅谷视频

目录 目录&#xff1a; 1. 起步 2. Git 基础 3. Git 分支 4. 服务器上的 Git 5. 分布式 Git 第一章 1.3 Git是什么 1.6运行git前的配置 该开源图书网站 Git - Book (git-scm.com) 目录&#xff1a; 1. 起步 1.1 关于版本控制1.2 Git 简史1.3 Git 是什么&#xff1f;1…

《图机器学习》-GNN Augmentation and Training

GNN Augmentation and Training一、Graph Augmentation for GNNs1、Feature Augmentation2、Structure augmentation3、Node Neighborhood Sampling一、Graph Augmentation for GNNs 之前的假设&#xff1a; Raw input graph computational graph&#xff0c;即原始图等于计算…

产品需求文档需要注意10件事

01什么是完美的产品需求文档&#xff08;PRD&#xff09;&#xff1f;就像产品经理一样&#xff0c;产品需求文档需要同时有效地执行许多不同的角色。该文档将由设计师&#xff0c;营销人员和工程团队使用&#xff0c;并且需要传达他们所需的所有必要信息。参考上面的漫画&…

html,

目录1. html新建1.1 html基本结构1.2 html细节2. 标签2.1 font标签2.2 字符实体2.3 标题标签2.4 超链接标签2.5 列表标签2.6 图片标签2.7 表格标签2.8 表单标签2.8.1基本使用2.8.2表单综合练习2.8.3表单格式化2.8.4表单使用细节2.8.5get请求2.8.6post请求2.9 其它标签2.9.1div标…

【JavaScript】第一章JavaScript入门

第一章 JavaScript入门JavaScript介绍JavaScript的起源JavaScript的应用JavaScript的特点JavaScript是脚本语言支持面向对象编程&#xff0c;面向过程编程/函数式编程支持跨平台执行JavaScript和ECMAScript的关系开发工具编辑器sublime textVisual Studio CodewebstormDreamwea…