【SQL】关系模型与查询和更新数据

news2024/12/25 13:31:42

一、关系模型

1.1 主键

主键是关系表中记录的唯一标识。主键的选取非常重要:主键不要带有业务含义,而应该使用BIGINT自增或者GUID类型。主键也不应该允许NULL。

可以使用多个列作为联合主键,但联合主键并不常用。

1.2 外键 FOREIGN KEY

关系数据库通过外键可以实现一对多、多对多和一对一的关系。外键既可以通过数据库来约束,也可以不设置约束,仅依靠应用程序的逻辑来保证。

1.3 索引

  • 可以对一张表创建多个索引。索引的优点是提高了查询效率,缺点是在插入、更新和删除记录时,需要同时修改索引,因此,索引越多,插入、更新和删除记录的速度就越慢。
  • 对于主键,关系数据库会自动对其创建主键索引。使用主键索引的效率是最高的,因为主键会保证绝对唯一。
  • UNIQUE关键字我们就添加了一个唯一索引。
  • 通过对数据库表创建索引,可以提高查询速度。通过创建唯一索引,可以保证某一列的值具有唯一性。数据库索引对于用户和应用程序来说都是透明的。

二 、查询数据

附录:表-students

id

class_id

name

gender

score

1

1

小明

M

90

2

1

小红

F

95

3

1

小军

M

88

4

1

小米

F

73

5

2

小白

F

81

6

2

小兵

M

55

7

2

小林

M

85

8

3

小新

F

91

9

3

小王

M

89

10

3

小丽

F

88

2.1 基本查询

SELECT * FORM

查询一个表的所有行和所有列的数据,SELECT查询的结果是一个二维表。

2.2 条件查询

  • SELECT * FROM WHERE
  • 条件表达式可以:AND、OR、NOT
  • 优先级:NOT、AND、OR,加括号可以改变优先级。

2.3 投影查询

Select 列1,列2,列3,则可以进返回指定列,这种称为投影。

SELECT id, score points, name FROM students WHERE gender = 'M';

2.4 排序

  • ORDER BY:SELECT id,name,FROM studentS ORDER BY score;
  • DESC 倒序:SELECT id,name,FROM studentS ORDER BY score DESC;
  • ASX 升序,从小到大:

SELECT id, name, gender, score FROM students WHERE class_id = 1 ORDER BY score DESC;

使用ORDER BY可以对结果进行排序,可以对多列进行升序、倒序排序。

2.5 分页查询

  • 使用LIMIT OFFSET 可以对结果集进行分页,每次查询返回结果集的一部分
  • LIMIT总是设定为pageSize;
  • OFFSET计算公式为pageSize * (pageIndex - 1)。这样就能正确查询出第N页的记录集。

案例:

--查询第4页 SELECT id, name, gender, score FROM students ORDER BY score DESC LIMIT 3 OFFSET 9;

2.6 聚合查询

除了COUNT()函数外,SQL还提供了如下聚合函数:

函数

说明

SUM

计算某一列的合计值,该列必须为数值类型

AVG

计算某一列的平均值,该列必须为数值类型

MAX

计算某一列的最大值

MIN

计算某一列的最小值

注意,MAX()和MIN()函数并不限于数值类型。如果是字符类型,MAX()和MIN()会返回排序最后和排序最前的字符。

-- 使用聚合查询计算男生平均成绩: SELECT AVG(score) average FROM students WHERE gender = 'M';

要特别注意:如果聚合查询的WHERE条件没有匹配到任何行,COUNT()会返回0,而SUM()、AVG()、MAX()和MIN()会返回NULL:

-- WHERE条件gender = 'X'匹配不到任何行: SELECT AVG(score) average FROM students WHERE gender = 'X';

分组

GROUP BY

-- 查出每个班级的平均分,结果集应当有6条记录: SELECT class_id, gender,AVG(score) FROM students GROUP BY gender,class_id;

class_id

gender

AVG(score)

1

M

89

1

F

84

2

F

81

2

M

70

3

F

89.5

3

M

89

2.7 连接查询

  • 是一种多表查询,JOIN运算,简单的说就是先确定一个主表作为结果集,然后把其他表的性有选择地“连接”在主表结果集上。
  • INNER JOIN是最常用的一种JOIN查询,它的语法是SELECT ... FROM INNER JOIN ON ;
  • JOIN查询仍然可以使用WHERE条件和ORDER BY排序
  • 其他的语法如下:

三、修改数据

3.1 INSERT 一次向一个表中插入1条或者多条记录

语法: INSERT INTO (字段1,字段2) VALUES (值1,值2,值N...)

添加一条记录

insert into students(class_id,name,gender,score)values (2,'daniu','M',80)

添加多条记录

insert into students(class_id,name,gender,score)values (2,'daniu','M',80),(3,'xxx','M',90)

3.2 UPDATE 一次向一个表中更新1条或者多条记录

语法: update 表名 set 字段1=值1,字段2=值2 where ...;

eg: update students set name=‘大牛’,score=66 where id=6;

  • update的where和select的where条件是一样的
  • update可以使用表达式,如update students set score=score+10
  • where条件没有匹配到任何记录,update也不会报错,也不会有任何记录被更新,如update students set score=1000 where id=999;
  • UPDATE后面可以没有WHERE,,如

UPDATE students SET score=60;

这时,整个表的所有记录都会被更新。所以,在执行

UPDATE语句时要非常小心,最好先用SELECT语句来测试WHERE条件是否筛选出了期望的记录集,然后再用UPDATE更新。

  • 注意 MYSQL中的更新方式:update语句会返回更新的行数以及where条件匹配行数。eg:mysql> UPDATE students SET name='大宝' WHERE id=1;

Query OK, 1 row affected (0.00 sec)

Rows matched: 1 Changed: 1 Warnings: 0

3.3 DELETE 删除一条或多条记录

语法

delete from 表名 where..;

  • 删除1条记录:eg:delete from students where id=1;
  • 删除多条记录,可以使用条件表达式:delete from students where id>=5 and id
  • 如果没有匹配结果,那么也不会报错。
  • 最后,要特别小心的是,和UPDATE类似,不带WHERE条件的DELETE语句会删除整个表的数据:

DELETE FROM students;

这时,整个表的所有记录都会被删除。所以,在执行DELETE语句时也要非常小心,最好先用SELECT语句来测试WHERE条件是否筛选出了期望的记录集,然后再用DELETE删除。

  • MYSQL中的使用:delete语句可以已返回删除的函数以及where条件匹配的行数。如:mysql> DELETE FROM students WHERE id=1;

Query OK, 1 row affected (0.01 sec)

四、参考资料

关系模型

查询数据

修改数据

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

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

相关文章

Nginx详解之Nginx高级配置

Nginx详解之Nginx高级配置 1、网页的状态页2、Nginx第三方模块2.1echo模块 3、变量3.1内置变量3.2自定义变量 4、自定义访问日志4.1 自定义访问日志的格式4.2自定义json 格式日志 5、Nginx压缩功能(重要)6、https 功能6.1Nginx的HTTPS工作原理的详解6.2启…

【QT】信号和槽(15)

前面的内容说了很多不同的控件如何使用,今天来看下QT的核心,信号与槽(Signals and slots)! 简单理解一下,就是我们的信号与槽连接上了之后,发射一个信号给到槽,槽函数接收到了这个信…

项目教程视频入口集合

题记:视频在b站,下面是入口 1.如何在gitlab创建项目 如何在gitlab创建项目_哔哩哔哩_bilibili如何在gitlab创建项目, 视频播放量 2、弹幕量 0、点赞数 0、投硬币枚数 0、收藏人数 0、转发人数 0, 视频作者 刘横川丶春秋, 作者简介 ,相关视频…

XSS漏洞复现(CVE-2017-12794)

文章目录 搭建环境启动环境漏洞复现漏洞原理 前提条件: 1.安装docker docker pull medicean/vulapps:j_joomla_22.安装docker-compose docker run -d -p 8000:80 medicean/vulapps:j_joomla_23.下载vulhub 搭建环境 进入vulhb目录下的joomla,复现CVE-20…

半年营收下滑20%,阅文集团还有AI新故事?

新增长难寻,新故事难讲。阅文集团(下称“阅文”,00772.HK)承压的困局,都写在最新的半年报里。 8月10日,阅文交出侯晓楠接棒后的首份成绩单,尽管上半年阅文的净利有所扭转,但其营收持续下滑。 财报公布当天&#xff0…

结算日-洛谷

结算日 - 洛谷 解释&#xff1a; 1.用sum记录贝西走到某位置的累计的总钱&#xff0c;flag标记是否有欠债还不了的情况&#xff08;1为有&#xff09;&#xff0c;ans记录步数。 2.若sum<0&#xff0c;则欠债无法还&#xff0c;flag标记为1&#xff0c;并记录下此刻的位置…

Maven的profiles多环境配置

一个项目通常都会有多个不同的运行环境&#xff0c;例如开发环境&#xff0c;测试环境、生产环境等。而不同环境的构建过程很可能是不同的&#xff0c;例如数据源配置、插件、以及依赖的版本等。每次将项目部署到不同的环境时&#xff0c;都需要修改相应的配置&#xff0c;这样…

表观遗传学变异的西红柿

写在前面 最近在捣鼓表观遗传学&#xff0c;处理了一批Bulk RNA-Seq和WGBS(Whole Genome Bisulfite Sequencing)的数据。熟悉我风格的粉丝都知道&#xff0c;我一般会读几篇文献再下手&#xff0c;遂于PubMed中检索了几篇文章&#xff0c;发现一个2022年发表的题为"Compa…

1.8.6 练习 本科生学平均分绩点GPA计算(堆数组的应用)

C自学精简教程 目录(必读) 上大学要考试 我们读大学也要上课&#xff0c;上课也要考试的。 基本上每门课也都是满分100分。 虽然选择一个专业要上很多门课&#xff0c;每门课也都是100分&#xff0c;但是这些课程的“价值”却是不一样的。 有的课程是核心专业课&#xff1…

【python爬虫案例】用python爬豆瓣电影TOP250排行榜!

文章目录 一、爬虫对象-豆瓣电影TOP250二、python爬虫代码讲解三、同步视频四、获取完整源码 一、爬虫对象-豆瓣电影TOP250 前几天&#xff0c;我分享了一个python爬虫案例&#xff0c;爬取豆瓣读书TOP250数据&#xff1a;【python爬虫案例】用python爬豆瓣读书TOP250排行榜&a…

图像缩放、翻转、拼接的介绍与使用

目录 &#xff08;1&#xff09;图像缩放&#xff1a;resize() &#xff08;2&#xff09;图像翻转&#xff1a; flip() &#xff08;3&#xff09;图像拼接&#xff1a;hconcat() 和vconcat() &#xff08;1&#xff09;图像缩放&#xff1a;resize() 使用 cv2.resize() 函…

Next.js基础语法

Next.js 目录结构 入口App组件&#xff08;_app.tsx&#xff09; _app.tsx是项目的入口组件&#xff0c;主要作用&#xff1a; 可以扩展自定义的布局&#xff08;Layout&#xff09;引入全局的样式文件引入Redux状态管理引入主题组件等等全局监听客户端路由的切换 ts.config…

1.7 完善自定位ShellCode

在之前的文章中&#xff0c;我们实现了一个正向的匿名管道ShellCode后门&#xff0c;为了保证文章的简洁易懂并没有增加针对调用函数的动态定位功能&#xff0c;此类方法在更换系统后则由于地址变化导致我们的后门无法正常使用&#xff0c;接下来将实现通过PEB获取GetProcAddre…

手写RPC——数据序列化工具protobuf

手写RPC——数据序列化工具protobuf Protocol Buffers&#xff08;protobuf&#xff09;是一种用于结构化数据序列化的开源库和协议。下面是 protobuf 的一些优点和缺点&#xff1a; 优点&#xff1a; 高效的序列化和反序列化&#xff1a;protobuf 使用二进制编码&#xff0c…

QTableWidget实现鼠标悬停整行高亮显示

一、最终效果 二、 重写QTableWidget类 mytablewidget.h #ifndef MYTABLEWIDGET_H #define MYTABLEWIDGET_H#include <QTableWidget>class MyTableWidget : public QTableWidget { public:explicit MyTableWidget(QWidget* parent nullptr);protected:void leaveEve…

一页纸吃透PMP常考知识点!

我是胖圆~需要文档可留言 或者移步公众号【胖圆说PM】找我

根据身高重建队列【贪心算法】

根据身高重建队列 假设有打乱顺序的一群人站成一个队列&#xff0c;数组 people 表示队列中一些人的属性&#xff08;不一定按顺序&#xff09;。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi &#xff0c;前面 正好 有 ki 个身高大于或等于 hi 的人。 请你重新构造并返…

色温曲线坐标轴的选取:G/R、G/B还是R/G、B/G ?

海思色温曲线坐标 Mstar色温曲线坐标 高通色温曲线坐标 联咏色温曲线坐标 查看各家白平衡调试界面&#xff0c;比如海思、Mstart、高通等调试资料&#xff0c;白平衡模块都是以R/G B/G作为坐标系的两个坐标轴&#xff0c;也有方案是以G/R G/B作为坐标系的两个坐标轴。 以G/R G…

考生作弊行为分析算法

考生作弊行为分析系统利用pythonyolo系列网络模型算法框架&#xff0c;考生作弊行为分析算法利用图像处理和智能算法对考生的行为进行分析和识别&#xff0c;经过算法服务器的复杂计算和逻辑判断&#xff0c;算法将根据考生行为的特征和规律&#xff0c;判定是否存在作弊行为。…