【数据库原理】数据增删改查,DML、单表查询、多表连接查询

DML数据操纵语言,处理对象是数据本身。
DDL数据定义语言,处理对象是数据表的结构。

数据库中数据处理主要包括增删改查。查询属于重点部分。
假设数据库中有表:

student(sno,sname,sex,class);	#学生(学号,姓名,性别,班级);学号为主键
course(cno,cname,teacher);	#课程(课程号,课程名,教师);课程号为主键
sc(sno,cno,score);	#学习(学号,课程号,分数);学号和课程号为主键

1. 增加(INSERT)
向一个表格中插入一条数据。注意非空且无默认值的属性,必须插入数据。
语句格式:

 INSERT INTO <表名> [(<列名>)]VALUES (<数据>);

(1) 插入单条数据:

INSERT INTO student
VALUES ('20240101','张三','男','2024级计算机科学与技术1班');

(2)插入多条数据:

INSERT INTO course
VALUES ('C01','数据库管理','teacher1'),('C02','数据结构','teacher2'),('C03','C语言程序基础','teacher3');

(3)插入子查询结果
把平均成绩大于80分的学生的学号和平均成绩存入另一个的基本表stud_good(sno,avg_score)中。

INSERT INTO stud_good(sno,avg_score)
SELECT sno,AVG(score)
FROM sc
GROUP BY sno
HAVING AVG(scors)>80;

2. 删除(DELETE)

删除现有表或视图中的一行或多行记录。
语句格式:

 DELTET FROM <表名> [WHERE <条件表达式>];

(1)删除单条数据

DELETE FROM student
WHERE sno='20240101';

(2)删除多条数据
删除计算机科学与技术1班所有学生的成绩

DELETE FROM sc
WHERE sno IN (SELECT snoFROM studentWHERE class='计算机科学与技术1班')

4. 修改(UDPATE)

修改数据表中的单个数据或多条数据。通过设置条件进行选定修改的数据。
语句格式:

UPDATE <表名>
SET <列名1>=<表达式1> [,<列名2>=<表达式2>]
[WHERE <条件表达式>];

举个栗子
将计算机科学与技术1班学生成绩全部置0。

UPDATE sc
SET score=0
WHERE sno IN (SELECT snoFROM studentWHERE class='计算机科学与技术1班')

5. 查询(SELECT)

查询语句较多,第一类是单表查询,条件书写比较简单。第二类是多表查询,需要进行连接操作。

(1)单表查询
语法格式:

SELECT [ALL|DISTINCT] <列名1> [AS <显示列名>]
FROM <表名|视图名> [LIMIT [M,] N]
[WHERE <条件表达式>];

ALL和DISTINCT设置显示全部信息,或去重后的信息。
列名必须有,AS后跟显示列名。比如sno表示学号,使用AS后列名显示‘学号’,但是内容是sno中的信息。*表示数据表的全部列。
LIMIT设置结果的前N行,或从M行开始的前N行。
WHERE设置查询满足条件的记录。
注意:数字类型数据可直接写,除此之外的都需要用单引号‘’。

WHERE条件语句运算符

查询条件运算符含义
比较运算符=、<、>、<=、>=、!=、!<、!>数据大小多少
逻辑运算符AND、OR、NOT逻辑或、与、非
范围运算符BETWEEN AND、NOT BETWEEN AND数据是否在某一范围内
字符匹配符LIKE、NOT LIKE字符串是否满足某种格式,通配符:%匹配任意多个字符、_匹配单个字符
列表运算符IN、NOT IN是否在某一查询结果的列表中
空值IS NULL、 IS NOT NULL数据是否为空值

聚集函数----统计数据
COUNT、AVG、SUM、MAX、MIN

分组筛选----按照某一列进行分组

[GOURP BY 列名清单 [HAVING 条件表达式]]

通常结合聚集函数进行使用,比如统计个数,统计平均数。举个栗子,查询超过35人的班级的人数。

SELECT class,COUNT(*) AS 人数
FROM student
GROUP BY class
HAVING COUNT(*)>35;

注意:WHERE条件查询和HAVING条件查询的区别。WHERE作用于被查询的表,HAVING作用于结果组,选择满足条件的组。

结果排序----按照某规则进行排序
对查询结果按照某一列进行排序,ASC表示升序,DESC表示降序。多列排序亦可。

ORDER BY <列名1> [ASC|DESC] [,列名2] [ASC|DESC]

举个栗子,查询全体学生的信息,查询结构按班级进行升序排序,同一个班级内,按照学号进行降序排序。

SELECT *
FROM student
ORDER BY class ASC, sno DESC;

(2)多表连接查询

多表连接查询,在查询的时候涉及到两个或以上的表格。通常分为交叉连接、内连接、自连接和外连接。外连接分为左连接、右连接和全外连接。

交叉连接:笛卡尔连接
两个表做笛卡尔积运算,分别连接,A表有M个数据,B表有N个数据,交叉连接后有MN条记录。

语法格式:

SELECT [ALL|DISTINCT] [别名.]<选项1> [AS <显示列名>]
FROM <表名1> [别名1], <表名2> [别名2];

内连接:交叉连接中选取满足条件的记录

语法格式:

SELECT [ALL|DISTINCT] [别名.]<选项1> [AS <显示列名>]
FROM <表名1> [别名1], <表名2> [别名2]
WHERE <连接条件表达式> [AND  <条件表达式>];
SELECT [ALL|DISTINCT] [别名.]<选项1> [AS <显示列名>]
FROM <表名1> [别名1] INNER JOIN <表名2> [别名2] ON <连接条件表达式>
WHERE <条件表达式>;

两种格式都是可以使用的,连接条件表达式,一般可以设置两个表中的某些数据必须相同,比如学号相同。
条件表达式,可以加以限制其他的,比如成绩高于80分。

自连接

连接操作一般选用两个不同的表格,对于一个表格可以和自身连接,自连接在逻辑上看成两个表。注意必须设置别名。
语法格式:

SELECT [ALL|DISTINCT] [别名.]<选项1> [AS <显示列名>]
FROM <表名1> [别名1], <表名1> [别名2]
WHERE <连接条件表达式> [AND  <条件表达式>];

举个栗子:查询同时选修了C01和C04课程学生的学号

SELECT A.sno
FROM sc A, sc B
WHERE A.sno=B.sno
AND A.cno='C01'
AND B.cno='C04';

外连接

自然连接中,只有在两个表中匹配的行才在结果中显示,在外连接中可以置限制其中一个表格或者两个表格都不加限制。

语法格式:

SELECT [ALL|DISTINCT] [别名.]<选项1> [AS <显示列名>]
FROM <表名1> [别名1] LEFT|RIGHT|FULL [OUTER] JOIN <表名1> [别名2]
ON <表名1.1>=<表名2.2>;

(3)嵌套查询

一个SELECT FROM WHERE语句为一个查询块。将一个查询块嵌套在另一个查询WHERE子句中或HAVING子句中。

嵌套子查询:嵌套子查询的执行不溢利阿语外部嵌套。首先执行子查询,结果不显示出来,作为外层查询的条件来使用。子查询只执行一次,即可作为外层父查询的条件。

举个栗子:查询没有选秀高等数学的学生学号和姓名

SELECT sno,sname
FROM student
WHERE sno NOT IN (SELECT snoFROM scWHERE cno IN (SELECT cnoFROM courseWHERE cname='高等数学');

相关子查询:子查询的执行依赖于父查询。
执行过程:
①子查询为父查询的每一个元组(行)执行一次,父查询将子查询引用列的值传递给子查询。
②如果子查询的任何行与其匹配,则父查询取该行存入结果中
③回到①,直到处理完外部表的每一行。

举个栗子:查询所有选修了C01课程的学生姓名

SELECT sname
FROM student
WHERE EXISTS (SELECT *FROM scWHERE sno=student.snoAND cno='01');

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

领克Z20结合AI技术,革新自动驾驶辅助系统

眼瞅着&#xff0c;再有不到 5 个星期&#xff0c;春节就要热热闹闹地登场啦&#xff01;对于在外辛苦打拼了一整年的打工人而言&#xff0c;回家过年可不就是这一年里心心念念、最最期盼的高光时刻嘛。这不&#xff0c;这几天各地的高速公路愈发熙熙攘攘起来&#xff0c;川流不…

C语言结构体位定义(位段)的实际作用深入分析

1、结构体位段格式 struct struct_name {type [member_name] : width; };一般定义结构体&#xff0c;成员都是int、char等类型&#xff0c;占用的空间大小是固定的在成员名称后用冒号来指定位宽&#xff0c;可以指定每个成员所占用空间&#xff0c;并且也不用受结构体成员起始…

Android--java实现手机亮度控制

文章目录 1、开发需求2、运行环境3、主要文件4、布局文件信息5、手机界面控制代码6、debug 1、开发需求 需求&#xff1a;开发一个Android apk实现手机亮度控制 2、运行环境 Android studio最新版本 3、主要文件 app\src\main\AndroidManifest.xml app\src\main\res\layou…

Modbus数据网关在制造企业的应用与效果

Modbus是一种广泛应用于工业通信的协议&#xff0c;支持多种设备间的数据交换&#xff0c;如传感器、仪器仪表、PLC、工业机器人、数控机床等。Modbus数据网关则是一种网络通信转换设备&#xff0c;它能够将Modbus协议的数据转换为其他主流协议&#xff08;如MQTT、OPC UA、HTT…

秒鲨后端之MyBatis【2】默认的类型别名、MyBatis的增删改查、idea中设置文件的配置模板、MyBatis获取参数值的两种方式、特殊SQL的执行

别忘了请点个赞收藏关注支持一下博主喵&#xff01;&#xff01;&#xff01;! ! ! 下篇更新&#xff1a; 秒鲨后端之MyBatis【3】自定义映射resultMap、动态SQL、MyBatis的缓存、MyBatis的逆向工程、分页插件。 默认的类型别名 MyBatis的增删改查 添加 <!--int insertUs…

从数据仓库到数据中台再到数据飞轮:电信行业的数据技术进化史

前言 大家好&#xff0c;我是一名大数据开发工程师&#xff0c;电信行业作为高度数据驱动的行业&#xff0c;长期以来通过技术创新不断优化服务质量和业务运营。从最早期的数据仓库&#xff0c;到数据中台&#xff0c;再到如今的数据飞轮&#xff0c;电信行业的数据技术经历了几…

【机器学习(九)】分类和回归任务-多层感知机(Multilayer Perceptron,MLP)算法-Sentosa_DSML社区版 (1)111

文章目录 一、算法概念111二、算法原理&#xff08;一&#xff09;感知机&#xff08;二&#xff09;多层感知机1、隐藏层2、激活函数sigma函数tanh函数ReLU函数 3、反向传播算法 三、算法优缺点&#xff08;一&#xff09;优点&#xff08;二&#xff09;缺点 四、MLP分类任务…

【NLP高频面题 - 高效微调篇】什么是提示微调?

【NLP高频面题 - 高效微调篇】什么是提示微调&#xff1f; 重要性&#xff1a;★ NLP Github 项目&#xff1a; NLP 项目实践&#xff1a;fasterai/nlp-project-practice 介绍&#xff1a;该仓库围绕着 NLP 任务模型的设计、训练、优化、部署和应用&#xff0c;分享大模型算法…

基于kraft部署kafka集群

kafka介绍 Apache Kafka 是一个开源的分布式事件流平台&#xff0c;被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用。 Kafka是一个拥有高吞吐、可持久化、可水平扩展&#xff0c;支持流式数据处理等多种特性的分布式消息流处理中间件&#xff0c;采用分布式…

debug diagnostic tool 调试.net的错误

下载安装debug diagnostic tool debug diagnostic tool 设置 因为现在都是多cpu,所以cpu可以设置低一点,就抓去数据 微软教程

京东科技基于 Apache SeaTunnel 复杂场景适配 #数据集成

作者&#xff1a;宁诚、陈伟强 京东科技架构师 技术背景与挑战 技术背景 2023年第一季度&#xff0c;京东科技的营销与数据资产部开始规划数据洞察系统产品&#xff0c;主要服务于京东科技营销体系的业务团队。该系统的分析内容涵盖了京东集团在商城、金融和物流等各个业务系…

基于Spring Boot的工商局商家管理系统

一、系统背景与意义 随着市场经济的不断发展&#xff0c;商家数量日益增多&#xff0c;工商局对商家的管理需求也日益复杂。传统的管理方式存在诸多弊端&#xff0c;如信息不透明、管理效率低下等。因此&#xff0c;开发一种高效、便捷、智能化的工商局商家管理系统显得尤为重…

论文DiffBP: generative diffusion of 3D molecules for target protein binding

研究背景 在药物发现中&#xff0c;生成能与特定蛋白质结合的分子至关重要但极具挑战。以往的工作大多采用自回归方式逐个生成原子的元素类型和三维坐标&#xff0c;但在真实分子系统中&#xff0c;原子间的相互作用是全局性的&#xff0c;基于能量考虑&#xff0c;概率建模应基…

如何在谷歌浏览器中进行网络速度测试

在当今高度依赖互联网的时代&#xff0c;网络速度的快慢直接影响着我们的工作、学习和娱乐等各个方面。因此&#xff0c;了解如何准确测试网络速度成为了每个网民应掌握的基本技能。谷歌浏览器作为一款广泛使用的浏览器&#xff0c;提供了便捷且高效的网络速度测试功能。本文将…

JAVAweb学习日记(三)Ajax

一、Ajax Axios&#xff1a; 入门&#xff1a; 案例&#xff1a; 二、前后端分离开发 介绍&#xff1a; APIfox&#xff1a; Apifox 前端工程化&#xff1a; 环境准备&#xff1a; Vue项目-创建&#xff1a; Vue项目-配置端口&#xff1a; Vue项目-开发流程&#xff1a; Vue…

聊天社交管理系统 Java 源码,构建个性化社交空间

社交网络已经是我们生活中非常重要的一部分&#xff0c;一个高效、个性化的聊天社交管理系统都能极大提升用户体验。 多种消息通知类型&#xff0c;支持新消息通知&#xff0c;图标闪烁、声音提醒和弹窗提醒。 1.音视频&#xff1a; 支持二人聊天&#xff0c;有语音聊天、桌面…

Shion(时间追踪工具) v0.13.2

Shion 是一款多功能的时间追踪软件&#xff0c;旨在帮助用户更好地管理时间。它提供了多种自定义数据卡片&#xff0c;如github风格的一年概览、30天单项数据柱状图和每日24小时活动展示&#xff0c;以便用户清晰地了解自己的日常生活。Shion还具备自动监听程序使用时间的功能&…

USDZ格式轻松转OBJ

USDZ格式简介 USDZ&#xff0c;作为苹果公司与PIXAR工作室联手推出的新型AR文件格式&#xff0c;正逐步成为增强现实&#xff08;AR&#xff09;领域中的佼佼者。USDZ文件不仅支持丰富的3D模型数据&#xff0c;还能嵌入材质、动画及交互信息&#xff0c;为用户带来沉浸式的AR体…

100V宽压输入反激隔离电源,适用于N道沟MOSFET或GaN或5V栅极驱动器,无需光耦合

说明: PC4411是一个隔离的反激式控制器在宽输入电压下具有高效率范围为2.7V至100V。它直接测量初级侧反激输出电压波形&#xff0c;不需要光耦合器或第三方用于调节的绕组。设置输出只需要一个电阻器电压。PC4411提供5V栅极驱动驱动外部N沟道MOSFET的电压或GaN。内部补偿和软启…

Linux的启动流程

目录 1、 加电开机&#xff0c;启动BIOS进行自检。 2、读取MBR(Master Boot Record, 主要启动记录区)。 3、加载GRUB&#xff08;GRand Unified Bootloader&#xff09;菜单。 4、加载内核&#xff08;kernel&#xff09;和驱动程序 5、运行systemd进程&#xff0c;加载如…