SQL 语言:数据操作

news2024/10/6 20:40:52

文章目录

    • SELECT 基本结构
    • 简单查询
    • 连接查询
    • 子查询
    • 聚集函数和更名操作
    • 分组查询
    • 字符串操作
    • 集合操作
      • UNION 运算
      • INTERSECT 运算
      • EXCEPT 运算
    • 视图查询和更新
    • WITH 子句
    • 其他语句
    • 总结

SQL 的数据操作包括 SELECT(查询)、INSERT(插入)、DELETE(删除)和 UPDATE(修改)四条语句。

SELECT 基本结构

数据库查询是数据库的核心操作,语法格式如下:

SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]...
FROM <表名或视图名>[,<表名或视图名>]
[WHERE <条件表达式>]
[GROUP BY <列名> [HAVING<条件表达式>]]
[ORDER BY <列名>[ASC|DESC]...]

SQL 查询中的子句顺序为SELECT、FROM、WHERE、GROUP BY、HAVING 和 ORDER BY。其中,SELECT、FROM 是必须的,HAVING 条件子句只能与 GROUP BY 搭配起来使用。

(1)SELECT 子句对应的是关系代数中的投影运算,用来列出查询结果中的属性。其输出可以是列名、表达式、函数集(AVG、COUNT、MAX、MIN、SUM),DISTINCT 选项可以保证查询的结果集不存在重复元组。

(2)FROM 子句对应的是关系代数中的笛卡尔积,它列出的表达式求值过程中需扫描的关系,即在 FROM 子句中出现多个基本表或视图时,系统首先执行笛卡尔积操作。

(3)WHERE 子句对应的是关系代数中的选择谓词。WHERE 子句的条件表达式可以使用的运算符如下:

image

简单查询

SQL 最简单的查询是找出关系中满足特定条件的元组,这些查询与关系代数中的选择操作类似,通常只需要使用三个关键字 SELECT、FROM 和 WHERE。

示例10. 查询所有员工信息;查询员工号为1088的员工的姓名和参加工作时间。

SELECT *
FROM 员工;

SELECT 姓名,参加工作时间
FROM 员工
WHERE 员工号 = 1088;

连接查询

如果查询涉及两个以上的表,则称为连接查询。

示例11. 关系模式:员工(员工号,姓名,性别,参加工作时间,部门号);部门(部门号,名称,电话,负责人);

# 查询部门名为“企业信息部”,且在2010年1月1日后入职的员工工号、姓名和性别
SELECT 员工号,姓名,性别
FROM 员工,部门
WHERE 员工.部门号 = 部门.部门号
AND 部门.名称 = '企业信息部'
AND 参加工作时间 > '2010-01-01';

连接查询相同字段需要带上表名点前缀,字符类型,日期类型的数据需要使用单引号。

子查询

子查询也称嵌套查询。嵌套查询是指一个 SELECT-FROM-WHERE 查询块可以嵌入另一个查询块之中。在 SQL 中允许多重嵌套。

示例12. 查询部门名为“企业信息部和行政部”,所有员工的工号、姓名和性别。

SELECT 员工号,姓名,性别
FROM 员工
WHERE 部门号 IN (SELECT 部门号
								FROM 部门
								WHERE 名称 IN ('企业信息部','行政部'));

聚集函数和更名操作

聚集函数是一个值的集合输入,返回单个值的函数。

SQL提供了5个预定义集函数:平均值AVG、最小值MIN、最大值MAX、求和SUM以及计数COUNT;

image

使用ANY和ALL谓词必须同时使用比较运算符,其含义及等价的转换关系如下:

image

使用聚合函数实现子查询比直接用 ALL 或 ANY 查询效率要高。

更名操作:SQL提供可为关系和属性重新命名的机制,可以使用 AS 来操作。as 子句可以出现在SELECT 子句中,也可出现在FROM子句中

示例13. 查询课程C1的最高分和最低分以及高低分之间的差距。

SELECT MAX(Grade) AS MAX_Grade
			,MIN(Grade) AS MIN_Grade
			,MAX(Grade)-MIN(Grade) AS GAP
FROM SC AS X
WHERE Cno='C1';

示例14. 查询其他系比计算机系CS所有学生年龄都要小的学生姓名及年龄。

## 方法一
SELECT Sname,Sage
FROM S 
WHERE Sage < ALL(SELECT Sage
								 FROM S
								 WHERE SD='CS')
			AND SD <> 'CS';
## 方法二		
SELECT Sname,Sage
FROM S
WHERE Sage < (SELECT MIN(Sage)
							FROM S 
							WHERE SD = 'CS')
			AND SD <> 'CS';

分组查询

在 WHERE 子句后面加上 GROUP BY 子句可以对元组进行分组,关键字 GROUP BY 后面跟着一个分组属性列表。如元组在分组后需要过滤,可以在后面加 HAVING 子句即可。

当元组含有空值时,应该记住以下两点:

(1)空值在任何聚集操作中都会被忽视。它对求和、求平均值和计数都没有影响。它也不能是某列的最大值或最小值。例如,COUNT(*)是某个关系中所有元组数目之和,但 COUNT(A) 却是A属性非空的元组个数之和。

(2)NULL 值又可以在分组属性中看作是一个一般的值。例如,SELECT A,AVG(B) FORM R 中,当A的属性值为空时,就会统计A=NULL的所有元组中B的均值。

示例15. 供应商数据库中的S、P、J、SPJ关系,查询某工程至少用了三家供应商(包含三家)供应的零件的平均数量,并按工程号的降序排列

SELECT Jno,AVG(QTY)
FROM SPJ 
GROUP BY Jno
HAVING COUNT(DISTINCT(Sno)) > 2
ORDER BY Jno DESC

字符串操作

谓词 LIKE 可以用来进行字符串匹配,通常也称模糊查询,语法格式如下:

[NOT] LIKE '<匹配串>'[ESCAPE'<换码字符>']

可以使用通配符%_,其中:%匹配任意字符串;_匹配任意一个字符。例如,_ _匹配只含两个字符的字符串;_ _ %匹配至少包含两个字符的字符串。

NULL 操作,通常使用 IS NULL、IS NOT NULL。

示例16. 学生关系模式为(Sno,Sname,Sex,SD,Sage,Addr),其中,Sno为学号,Same为姓名,Sex为性别,SD为所在系,Sage为年龄,Addr为家庭地址。请查询:

(1) 家庭地址包含“科技路”的学生姓名。

(2)名字为“晓军”的学生姓名、年龄和所在系。

# (1)
SELECT Sname FROM S WHERE Addr LIKE '%科技路%';
# (2)
SELECT Sname,Sage,SD FROM S WHERE Sname LIKE '_ _晓军';

为了使模式中包含特殊模式字符(即%和_),在SQL中允许使用 ESCAPE 关键词来定义转义符。转义字符紧靠着特殊字符,并放在它的前面,表示该特殊字符被当成普通字符。例如,在LIKE比较中使用ESCAPE关键词来定义转义符,例如使用反斜杠\作转义符。

LIKE 'ab\%cd%'ESCAPE '\',匹配所有以阿宝%cd开头的字符串。
LIKE 'ab\\cd%'ESCAPE '\',匹配所有以ab\cd开头的字符串。

集合操作

在关系代数中可以用集合的并、交和差来组合关系。SQL也提供了对应的操作,但是查询的结果必须具有相同的属性和类型列表。保留字UNION、INTERSECT和EXCEPT分别对应 ∪ 、 ∩ \cup、\cap 和—。保留字用于两个查询时,应该将每个查询分别用括号括起来。

UNION 运算

示例17. 假设查询所有客户的集合的语句1为:SELECT Customer-no FROM depositor;查询有贷款客户的集合的语句2为:SELECT Customer-no FROM borrower。查询在银行有账户、有贷款或两者都有的所有客户身份证号。

# 1和2 取并集,使用 UNION 运算会自动去除重复
SELECT Customer-no FROM depositor
UNION 
SELECT Customer-no FROM borrower;
# 1和2 取并集,使用 UNION ALL 运算会保留重复
SELECT Customer-no FROM depositor
UNION ALL
SELECT Customer-no FROM borrower;

INTERSECT 运算

示例18. 学生关系模式为Students (Name, Sno, SEX, SD, Type, Address),教师关系模式为Teachers (Name, Eno, SEX, Salary, Address),查询既是女研究生,又是教师且工资大于等于2600元的名字和地址。

(SELECT Name, Address 
 FROM Students
 WHERE SEX='女' 
			 AND rype='研究生') 
INTERSECT
(SELECT Name, Address 
 FROM Teachers
 WHERE Salary>=2600);

EXCEPT 运算

示例19.查询不是教师的学生姓名。

(SELECT Name, Address FROM Students) 
 ЕХСЕРТ
(SELECT Name, Address FROM Teachers);

视图查询和更新

查询视图表时,系统先从数据字典中取出该视图的定义,然后将定义中的查询语句和对该视图的查询语句结合起来,形成一个修正的查询语句。

# 创建视图
CREATE VIEW V_ITEmp
AS SELECT 员工号,姓名,性别
   FROM 员工,部门
   WHERE 员工.部门号 = 部门.部门号
   AND 部门.名称 = 'IT部';
# 查询IT部性别为‘女’员工的姓名工号
SELECT 员工号,姓名
FROm V_ITEmp
WHERE 性别 = '女';

视图更新

SQL 对视图更新必须遵循以下规则:

(1) 从多个基本表通过连结操作导出的视图不允许更新。

(2) 对使用了分组、聚集函数操作的视图则不允许进行更新操作。

(3) 如果视图是从单个基本表通过投影、选取操作导出的则允许进行更新操作,且语法同基本表。

WITH 子句

With 子句是在SQL99中引入的,目前只有部分数据库支持这一子句。如果我们将一个复杂查询分解成一些小视图,然后将它们组合起来,就像将一个程序按其任务分解成一些过程一样,使得复杂查询的编写和理解都会简单得多。

示例20. 假定教师关系模式为Teachers(TName,Eno,Tdept,SEX,Salary,Address),利用With子句查询工资最高的教师姓名。此时,如果具有同样工资最高的教师有多个,他们都会被选择。

with max-Salary (value) AS (SELECT max (Salary)
FROM Teachers)
SELECT Tname
FROM Teachers, max-Salary
WHERE Teachers.Salary = max-Salary.value;

其他语句

插入语句语法如下:

INSERT INTO 表名(列名[,...n])
VALUES (常量[,...n]);

INSERT INTO 表名(列名[,...n])
SELECT 查询语句;

删除语句语法如下:

DELETE 
FROM 表名
WHERE 条件表达式;

更新语句语法如下:

UPDATE 表名
SET 列名=值表达式(,列名=值表达式)
[WHERE 条件表达式];

总结

SQL语言,作为数据库操作的核心语言,提供了强大的数据操作能力。在SQL中,数据操作主要涉及数据的插入、更新、删除和查询,这些操作共同构成了数据库日常管理和使用的基础。掌握这些数据操作技巧对于任何希望建立有效数据管理系统的信息技术人员来说是至关重要的。随着数据驱动决策在现代业务中的地位日益提升,精通SQL数据操作成为了获取洞察力、做出快速决策、并最终推动业务增长的关键。无论是分析师、数据库管理员还是应用程序开发者,都应不断深化对SQL数据操作的理解和实践,从而确保他们能够有效地利用数据资源,为企业带来更大的价值。

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

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

相关文章

大坝安全位测设备:位移监测站

TH-WY1大坝安全位移监测设备是用于监测水库大坝位移变化的设备&#xff0c;旨在确保大坝的安全运行。以下是关于大坝安全位移监测设备的一些重要信息&#xff1a; 作用&#xff1a;大坝位移监测设备能够实时监测大坝的位移情况&#xff0c;包括水平位移和垂直位移。通过对这些…

【数据结构与算法】七大排序算法(上)

【数据结构与算法】七大排序算法(上) &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;数据结构与算法&#x1f345; &#x1f33c;文章目录&#x1f33c; 1. 排序的概念及应用 1.1 排序的概念 1.2 排序的应用 1.3 常见排序算法 2. 常…

使用 Django 显示表中的数据

1、问题背景 当我们使用 Django 进行 Web 开发时&#xff0c;经常需要在 Web 页面上显示数据库中的数据。例如&#xff0c;我们可能需要在一个页面上显示所有用户的信息&#xff0c;或者在一个页面上显示所有文章的标题和作者。那么&#xff0c;如何使用 Django 来显示表中的数…

SSDReporter for Mac:守护您硬盘健康的守护者

SSDReporter for Mac是一款专为Mac用户设计的固态硬盘&#xff08;SSD&#xff09;健康状况检测工具。以下是关于这款软件的详细介绍&#xff1a; SSDReporter for Mac的主要功能是全面检测、监控Mac设备中SSD的工作状态&#xff0c;以确保数据的完整性和设备的稳定性。它能够…

常见的数据分析方法

1.周期性分析法 一个指标的观察时间拉长,看它是否有周期变化规律。周期性分析常见的有两者:自然周期和生命周期。自然周期,指业务指标会随着时间自然变化,如节假日用户/业绩出现下滑、产品销售额随季节变动等;生命周期,譬如“商品生命周期”、“APP生命周期”、“用户生…

卤菜销售|基于SSM+vue的智能卤菜销售平台的设计与实现(源码+数据库+文档)

智能卤菜销售平台 目录 基于SSM&#xff0b;vue的智能卤菜销售平台的设计与实现 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3用户功能模块 4商家功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八…

力扣63 不同路径Ⅱ Java版本

文章目录 题目描述代码 题目描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish”&#xff09;。 现在考虑网格…

媒体发布会怎么邀请媒体,到场采访报道?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体发布会的邀请和组织是一个需要精心策划的过程&#xff0c;以下是一些基本步骤和建议&#xff0c;以确保媒体发布会能够吸引媒体到场并进行有效的采访报道&#xff1a; 明确宣传目的和…

leetCode. 85. 最大矩形

leetCode. 85. 最大矩形 部分参考上一题链接 leetCode.84. 柱状图中最大的矩形 此题思路 代码 class Solution { public:int largestRectangleArea( vector<int>& h ) {int n h.size();vector<int> left( n ), right( n );stack<int> st;// 求每个矩形…

特定车型专属AI模型解决方案,高清图像,稳定输出

美摄科技凭借其对人工智能领域的深刻理解和技术积累&#xff0c;为企业带来了一项革命性的解决方案——特定车型专属AI模型。这一方案以专属车型照片为基础&#xff0c;通过先进的AI生成模型训练&#xff0c;为企业提供个性化、高清、稳定的车辆图像和视频生成服务&#xff0c;…

【招聘帖】资深数通专家 ,薪资最高3.5W

资深数通专家 薪资&#xff1a;25000-35000 元/月 工作职责 岗位职责&#xff1a; 1、负责统筹管理客户全网问题&需求跟踪管理及汇报、日常数通团队工作的每日分解协调、人员技能内训及跟踪闭环&#xff1b; 2、负责统筹对架构基线梳理评估、软件版本管理、应急方案可执行…

2024年第七届管理、经济和社会科学国际会议(ICMESS 2024)

2024年第七届管理、经济和社会科学国际会议(ICMESS 2024) 会议简介 2024年第七届管理、经济和社会科学国际会议&#xff08;ICMESS 2024&#xff09;将为“管理、经济与社会发展”等最新研究领域的研究人员、专家、学者和行业专家提供一个平台&#xff0c;介绍他们的最新研究…

【区块链】fisco网络运维之添加节点黑名单

基于已完成的区块链系统与管理平台搭建工作&#xff0c;开展区块链节点的黑名单工作&#xff0c;具体操作如下 以node3为例子 1查看node0节点的连接状态日志&#xff08;现有4个节点连接&#xff09; 注意&#xff1a;如果查询不到连接状态&#xff0c;修改node0的配置文件中…

同时安装python2 和python3

最近的项目因为工具的原因 需要同时安装python2 和python3 我又想学着使用python 写东西 导致遇到了很多问题 记录下来 1 同时安装 python2 和python 1.1 安装完把/确认 Path 环境变量里 同时有python2,python2\Scripts和python3 ,python3\Scripts四个环境变量 修改python3…

前端本地项目启动供后端或者测试调试

目录 1、项目本地启动的地址 2、打开终端输入 ifconfig 查找ip 3、将localhost替换成ip即可供他人测试 1、项目本地启动的地址 http://localhost:8100/?module220&webRoutevpc-gray&backRoutevpc-gray........................... 2、打开终端输入 ifconfig 查找i…

文件IO(一)

文件IO&#xff08;一&#xff09; 文件IO文件的分类在文件IO下&#xff0c;文件分类按存储的内容分按照操作分 标准IO和文件IO的区别系统调用和库函数的区别 文件IO 把程序暂存在内存的数据&#xff0c;存储到本地外存上 文件的分类 在Linux系统下&#xff0c;文件共分为7类…

一套saas模式云MES系统源码,基于springboot+vue.js+uniapp开发

一套saas模式云MES系统源码&#xff0c;基于springbootvue.jsuniapp开发 MES系统简介 MES系统&#xff0c;即制造执行系统&#xff08;Manufacturing Execution System&#xff09;&#xff0c;是一种面向制造企业车间执行层的生产信息化管理系统。它位于上层的企业资源规划&a…

3步骤找回丢失文件!EasyRecovery让你轻松应对数据灾难!

EasyRecovery&#xff1a;数据丢失的终结者&#xff0c;您的数字世界守护神 在数字化时代&#xff0c;数据已经成为我们生活的一部分。无论是个人照片、重要文件还是企业资料&#xff0c;数据都扮演着重要的角色。然而&#xff0c;意外删除、格式化、系统崩溃或病毒攻击等原因导…

【Linux】权限的理解之权限掩码(umask)

目录 前言 一、利用八进制数值表示文件或目录的权限属性 二、系统默认的权限掩码和权限掩码的作用原理 三、分析权限掩码改变文件或目录的权限属性 前言 权限掩码是由4个数字组合而成的&#xff0c;默认的第一位数字是0&#xff1b;后三位数字分别由八进制位数字组成。权限…

Web服务器部署

简介 学习Liunx中Apache-web服务器的环境搭建及基础配置。 实验内容 实验准备 初始化yum&#xff0c;并安装httpd yum clean all #清理yum缓存 yum makecache #创建新缓存 yum install httpd #下载并安装web服务器 关闭防火墙、…