MySQL篇02-三大范式,多表查询

news/2024/4/28 15:45:10/文章来源:https://blog.csdn.net/qq_54379580/article/details/128925532

数据入库时,由于数据设计不合理,会存在数据重复、更新插入异常等情况, 故数据库中表的设计遵循的设计规范:三大范式

1.第一范式(1NF)

要求数据库的每一列都是不可分割的原子数据项,即原子性。强调的是列的原子性,即数据库中每一列的字段都是单一属性,不可再分的。且这个单一属性必须是由基本数据类型所构成,如整数、字符串等.

例:  users表

uid

username

password

tel

address

u001

tmm

111111

15891xxxxxx

陕西省汉中市汉台区xxx

上面表中address字段,可以按照省、市、区进行分割,因此不满足第一范式。

解决办法:将一个字段分割成多个字段                            

uid

username

password

tel

province

city

area

address

u001

tmm

111111

15891xxxxxx

陕西省

汉中市

汉台区

xxxx

2.第二范式(2NF)

在满足第一范式的前提下,非码属性必须完全依赖于候选码,每张表只描述一件事情。一张表必须有一个主键;非主键类必须完全依赖于主键。

例:   users表

uid

username

password

tel

role

u001

tmm1

111111

15891xxxxxx

管理员

上面表中uid可以作为users表的主键,username,password,tel都依赖于uid,但是 role字段不依赖于uid.

解决办法:将一张表拆分成多张表 ( 将管理关系放在多方上边, 一个角色有多名用户, 故用户的外键为rid)

用户表users

uid

username

password

tel

r_id

u001

tmm1

111111

15891xxxxxx

r1001

u002

tmm2

111111

15891xxxxxx

r1002

角色表roles

rid

username

r001

管理员

r002

普通用户

3.第三范式(3NF)

在第二范式前提下,任何非主属性不依赖于其他非主属性(在2NF基础上,消除传递依赖),非主键列必须直接依赖于主键,不能存在传递依赖。即确保数据表中的每一列数据都和主键直接相关,而不能间接相关.

例: 选课表sc

scid

sname

cname

tname

credit

score

001

tmm1

js

a老师

4

90

002

tmm2

css

b老师

3

95

由于sname,cname,tname,credit,score都不依赖于scid,因此,要进行表的拆分

选课表sc

scid

sid

cid

tname

score

001

s01

c001

t01

90

002

s02

c002

t02

95

学生表 students

sid

sname

s01

tmm1

s02

tmm2

课程表 class

cid

cname

credit

c001

js

4

c002

css

3

老师表 teachers

tid

tname

t01

a老师

t02

b老师

多对多的解决办法: 创建一张新表:teacher_class

tcid

cid (课程编号)

tid (老师id)

tc001

c001

t01

tc002

c002

t02

各表关系如图所示: 

注意:在数据库使用可视化工具建表时, 有时不添加外键, 避免数据处理时, 别处占用无法进行处理

4.多表查询

-- 单表查询
-- 查询所有书籍的作者信息
SELECT * FROM `books_author`;
-- 查询所有书籍的标题
SELECT title FROM books;
-- 给表起别名, b为别名, 作用:使用别名.的方式查找字段时更方便,不易出错
SELECT b.`content` FROM books b;
-- 给列(字段)起别名*/`books`
SELECT b.`imgUrl` AS `iu` FROM books b;
-- 1. 每本书涨价10%,保留两位小数, 涨价完成后更新到数据库中   价格不为空时, is not null,不能使用<>不等于
UPDATE books  SET price = ROUND(price*(1.1),2) WHERE price IS NOT NULL;
-- 2. 查询书所对应的评论 
-- 多表查询
SELECT b.bookname,c.comcontent  FROM books_comment c,books b  WHERE b.bid = c._bid;
-- 使用左外连接,主表内容会完全显示,包括NULL的情况  默认左的内容显示的多
SELECT b.`bid`,b.bookname,c.comcontent FROM books b LEFT JOIN books_comment c ON b.`bid` = c.`_bid`;
-- 使用内连接, 当内容为NULL时, 不显示
SELECT b.`bid`,b.bookname,c.comcontent FROM books b INNER JOIN books_comment c ON b.`bid` = c.`_bid`;
-- 3. 统计评分大于等于4.5的书的评论数,并显示书名   分组聚合   统计评分大于等于4.5的书, 统计评论数
-- 多表查询
SELECT b.bookname,c.`comcontent`, COUNT(c.`comcontent`) AS comnums
FROM books_comment c, books b
WHERE c._bid = b.bid  AND c.score >= 4.5
GROUP BY b.bookname ;
-- 子查询  显示书名
SELECT b.bookname FROM books b
WHERE b.`bid` IN (SELECT c.`_bid` FROM books_comment c WHERE c.`score` >= 4.5GROUP BY c.`_bid` = b.`bid`
)
-- 4. limit 起始索引,查询条数
/* 显示第三页的数据,每页10条,   当前页curPage=3, 每页条数pageSize=10select * from books limit (curPage-1)*pageSize,10   */
SELECT * FROM books LIMIT 10,10;
-- 显示书籍评论信息  (books)书id,书名  (books_author) 作者  (books_comment)评论发布时间,评论内容  (users)评论者
-- (1)显示评论者信息    (books_comment, users表)
SELECT c.`_bid`,c.`comcontent`,c.`comtime`,u.`nickname` FROM books_comment c, users u
WHERE c.`_uid` = u.`uid`;
-- (2)显示作者信息 (books,books_author,books_books_category表)
SELECT b.`bid`,b.`bookname`,a.`aname` FROM books b, books_author a, books_books_author ba
WHERE ba.`ba_bid`= b.`bid` AND ba.`ba_aid`= a.`aid`
-- (3)结果综合
SELECT *
FROM (SELECT b.`bid`,b.`bookname`,a.`aname` FROM books b, books_author a, books_books_author ba WHERE ba.`ba_bid`= b.`bid` AND ba.`ba_aid`= a.`aid`) t1 LEFT JOIN(SELECT c.`_bid`,c.`comcontent`,c.`comtime`,u.`nickname` FROM books_comment c, users u WHERE c.`_uid` = u.`uid` ) t2ON t1.bid = t2._bid-- GROUP_CONCAT([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
-- CONCAT_WS('分隔符', 要合并的字段)   合并列
SELECT t1.bid,t1.bookname,t1.aname,t2.`comtime`,t2.`nickname`,
-- group_concat(concat_Ws(',',t1.bookname,t2.`comcontent`,t2.`comtime`,t2.`nickname`) separator ';')
GROUP_CONCAT(t2.`comcontent` SEPARATOR '=====')
FROM  (SELECT b.`bid`,b.`bookname`,a.`aname` FROM books b, books_author a, books_books_author ba WHERE ba.`ba_bid`= b.`bid` AND ba.`ba_aid`= a.`aid`) t1 
LEFT JOIN(SELECT c.`_bid`,c.`comcontent`,c.`comtime`,u.`nickname` FROM books_comment c, users u WHERE c.`_uid` = u.`uid` ) t2
ON t1.bid = t2._bid 
GROUP BY t1.bid,t1.bookname,t1.aname;

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

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

相关文章

攀升MaxBook P2电脑U盘重装系统方法教学

攀升MaxBook P2电脑U盘重装系统方法教学。攀升MaxBook P2电脑是一款性价比非常高的笔记本。有用户购买了这款电脑后&#xff0c;想要将系统进行重装。今天和大家分享一个U盘重装系统的方法&#xff0c;学会这个方法后以后就可以自己轻松去重装电脑系统了。接下来一起看看具体的…

相机坐标系的正向投影和反向投影

1 、正向投影: 世界坐标系到像素坐标系 世界3D坐标系(x, y, z) 到图像像素坐标(u,v)的映射过程 &#xff08;1&#xff09;世界坐标系到相机坐标系的映射。 两个坐标系的转换比较简单&#xff0c;就是旋转矩阵 平移矩阵&#xff0c;旋转矩阵则是绕X&#xff0c; Y&#xff…

Thread 类及常见方法

Thread 类是 JVM 用来管理线程的一个类&#xff0c;换句话说&#xff0c;每个线程都有一个唯一的 Thread 对象与之关联。用我们上面的例子来看&#xff0c;每个执行流&#xff0c;也需要有一个对象来描述&#xff0c;类似下图所示&#xff0c;而 Thread 类的对象就是用来描述一…

分享111个JS焦点图代码,总有一款适合您

分享111个JS焦点图代码&#xff0c;总有一款适合您 111个JS焦点图代码下载链接&#xff1a;https://pan.baidu.com/s/1GxjW5m9DNOPEQd-Qf_gGSA?pwd4aci 提取码&#xff1a;4aci Python采集代码下载链接&#xff1a;https://wwgn.lanzoul.com/iKGwb0kye3wj jQuery宽屏左右…

没有人能比我快,用Python写一个自动填写答案的脚本

前言 不是标题党&#xff0c;真的就是没有人比我快&#xff0c;今天用Python写了个自动填写答案的脚本&#xff0c;快就算了&#xff0c;准确率还是百分之百 话不多说 咱先看代码 后看效果 不想看全文的 点击文末名片 领取源码 环境使用 Python 3.8Pycharm 模块使用 imp…

Request Method: OPTIONS

节选自https://blog.csdn.net/Amnesiac666/article/details/121105088版权归原作者所有&#xff0c;如有侵权请联系删除Request Method: OPTIONS一些接口在请求时&#xff0c;会自动发送一个的请求&#xff0c;我查了一遍代码&#xff0c;不是代码中写明的。 网上给出的解释涉及…

Pinecone:一款专为红队研究人员设计的WLAN网络安全审计框架

关于Pinecone Pinecone是一款专为红队研究人员设计的WLAN网络安全审计框架&#xff0c;该工具基于模块化开发&#xff0c;允许广大研究人员根据任务需求进行自定义功能扩展。Pinecone设计之初专用于树莓派&#xff0c;可以将树莓派打造为便携式无线网络安全审计工具&#xff0…

java面试题(十六)springBoot

1.1 说说你对Spring Boot的理解 参考答案 从本质上来说&#xff0c;Spring Boot就是Spring&#xff0c;它做了那些没有它你自己也会去做的Spring Bean配置。Spring Boot使用“习惯优于配置”的理念让你的项目快速地运行起来&#xff0c;使用Spring Boot很容易创建一个能独立运…

广告深度学习计算:向量召回索引的演进以及工程实现

问题定义召回操作通常作为搜索/推荐/广告的第一个阶段&#xff0c;主要目的是从巨大的候选集中选出相对合适的条目&#xff0c;交由后链路的排序等流程进行进一步的择优。因此&#xff0c;召回问题本质上就是一个大规模的最值的搜索问题&#xff1a;对于评分 和候选集 &#x…

最短路之Dijkstra(15张图解)

&#x1f33c;多年后再见你 - 乔洋/周林枫 - 单曲 - 网易云音乐 闲来无事听听歌 Dijkstra可解决“单源最短路径”问题 四种最短路算法 Floyd算法 时间复杂度高&#xff0c;但实现容易&#xff08;5行核心代码&#xff09;&#xff0c;可解决负权边&#xff0c;适用于数据范围…

方法的定义与使用详解

我们常用创建一个class修饰的就是一个类 其中有一个main方法&#xff0c;是主要的启动方法 这里写目录标题我们正常修饰的方法是由返回值的&#xff0c;但是用void修饰的没有static的使用方法中形参和实参的使用值传递引用传递类跟对象的关系this构造器--构造方法这个&#xf…

uniapp+java/springboot实现微信小程序APIV3支付功能

微信小程序的支付跟H5的支付和APP支付流程不一样&#xff0c;本次只描述下小程序支付流程。 一.账号准备 1.微信小程序账号 文档&#xff1a;小程序申请 小程序支付需要先认证&#xff0c;如果你有已认证的公众号&#xff0c;也可以通过公众号免费注册认证小程序。 一般30…

自定义input[type=file]上传按钮样式的四种方案,你知道几种?

目录前言方案1 opacity: 0;实现方案2 display:none样式元素选择 &#xff1a;label样式元素选择&#xff1a;其他元素::file-selector-button兼容性用法&#x1f9e8;&#x1f9e8;&#x1f9e8; 大家好&#xff0c;我是搞前端的半夏 &#x1f9d1;&#xff0c;一个热爱写文的前…

二、Linux文件 - Open函数讲解实战

目录 1.Open函数讲解 2.open函数实战 2.1 man 1 ls 查询Shell命令 2.2 man 2 open 查看系统调用函数 2.3项目实战 1.Open函数讲解 高频使用的Linux系统调用&#xff1a;open write read close Linux自带的工具&#xff1a;man手册&#xff1a; man 1是普通的shell…

【树和二叉树】数据结构二叉树和树的概念认识

前言&#xff1a;在之前&#xff0c;我们已经把栈和队列的相关概念以及实现的方法进行了学习&#xff0c;今天我们将认识一个新的知识“树”&#xff01;&#xff01;&#xff01; 目录1.树概念及结构1.1树的概念1.2树的结构1.3树的相关概念1.4 树的表示1.5 树在实际中的运用&a…

全国青少年编程等级考试scratch二级真题2022年9月(含题库答题软件账号)

青少年编程等级考试scratch真题答题考试系统请点击电子学会-全国青少年编程等级考试真题Scratch一级&#xff08;2019年3月&#xff09;在线答题_程序猿下山的博客-CSDN博客_小航答题助手1.数列&#xff1a;1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;6&#xff0c;…

程序的编译与链接(C语言为例) #代码写好后到运行期间要经过怎样的过程呢?# 粗略版 #

编译与链接前言程序的环境程序的编译与链接写在最后前言 每当我们运行一段代码时&#xff0c;编译器都会自动的帮我们编译代码并将代码转换为一个二进制可执行文件&#xff08;.exe&#xff09;&#xff0c; 有了这个可执行文件&#xff0c;便可以执行我们写的程序了。那么编译…

基于风光储能和需求响应的微电网日前经济调度(Python代码实现)【1】

目录 1 概述 2 知识点及数学模型 3 算例实现 3.1算例介绍 3.2风光参与的模型求解 3.3 风光和储能参与的模型求解 3.5 风光储能和需求响应都参与模型求解 3.6 结果分析对比 4 Python代码及算例数据 1 概述 近年来&#xff0c;微电网、清洁能源等已成为全球关注的热点…

数智化转型赋能企业,端看低代码如何发展

随着大数据、云计算、区块链等新兴技术的广泛运用&#xff0c; 现代企业在生产经营中产生的大量数据与信息逐渐成为发展的核心资产。与传统生产要素一起共同创建新的经济范式&#xff0c; 标志着我国经济发展正式迈入数字经济时代。 数字经济的快速崛起促使产业升级不断加速&am…

ASEMI整流模块MDQ75-16封装,MDQ75-16大小

编辑-Z ASEMI整流模块MDQ75-16参数&#xff1a; 型号&#xff1a;MDQ75-16 最大重复峰值反向电压&#xff08;VRRM&#xff09;&#xff1a;1600V 最大RMS电桥输入电压&#xff08;VRMS&#xff09;&#xff1a;1700V 最大平均正向整流输出电流&#xff08;IF&#xff09;…