MySQL-3

news2024/12/26 20:57:10

复习

DML操纵数据语句
更新:insert/update/delete
查询:select
 
select 列1 as 别名,列2 as 别名 from 表名 as 对表取别名 where 对行的筛选 group by 分组的列名 having 配合统计函数进行对组的筛选 order by 排序的列 asc/desc limit 偏移量,获得条数
 
嵌套子查询:select中嵌套另一个select
 

1 为何需要外键

例如有一张学生表

学生编号
stu_id
姓名
stu_name
班级编号class_id班级名class_name班级描述class_detail
20320532001张三XM-2021001JJA2101java全栈开发…
20320532002王五XM-2021001JJA2101java全栈开发…
20320532003李四XM-2021002JPH2101PHP开发…
20320532004田七XM-2021002JPH2101PHP开发…


上面这一张存在问题,不满足数据库设计原则三大范式规则,导致如下问题
问题1:  班级信息冗余
问题2:班级信息不便于修改
 
解决问题:将班级信息专门设置一张表,然后学生表和班级表通过外键关联
 
创建班级信息表,班级编号是主键

班级编号class_id班级名class_name班级描述class_detail
XM-2021001JJA2101java全栈开发…
XM-2021002JPH2101PHP开发…


修改学生表结构,学生编号是主键,班级编号是外键。

学生编号
stu_id
姓名
stu_name
班级编号class_id
20320532001张三XM-2021001
20320532002王五XM-2021001
20320532003李四XM-2021002
20320532004田七XM-2021002

2 外键

主键:primary key 简称pk

作用:用于区分同一张表中不同的记录,作为唯一的标识符。保证实体完整性。主键自带非空、唯一约束。
 

外键:foreign key简称fk

作用:建立表之间的联系,保证参照完整性。
例如 A表中的某一个非主键列column1指向B表的主键列。
 
表示A表的非主键列column1的值必须来源于B表的主键列的值。
 
在A表中该column1列称之为A表的外键。
 
A表是从表,B表是主表。
 
添加数据的时候,应该先添加主表,再添加从表。
删除数据的时候,应该先删除从表,再删除主表。
 

3 外键设置:

方式1:物理外键:

表示在定义表的时候将外键关系一同显式设置。可以保证数据的完整性和一致性。

方式2:逻辑外键:

表示在定义表的时候不强行设置表和表之间的外键关系,但是表和表之间仍然有一个关联的列。
 

4 多表,设置物理外键

步骤1:设计表:

图书管理系统中图书类型和图书关系
图书类型:图书–>1:N
一种图片类型对应多本图书
一本图书只属于一个图书类型
 
图书类型表book_type
type_id(PK)  type_name  type_detail
1        玄幻        具体描述…
2        都市言情    具体描述…
3        武侠        具体描述…
4        名著        具体描述…
 
 
 
图书表 book
book_id(PK)   book_name      price  book_type_id(FK)
1        玄幻书第一本         15     1
2        玄幻书第二本         25     1
3        霸道总裁爱上我       10     2
4         神雕侠侣            50     3
  
 

步骤2:创建表、设置外键关系、添加测试数据

方式1:通过可视化操作

可视化工具建表


 

 
 
 

可视化工具为book表设置物理外键关系


可视化添加数据

添加主表数据

添加从表数据

方式2:DDL定义语句


 
 
 
 
 

5多表关联查询

概念:

MySQL支持3种关联查询
①内连接:inner join
根据ON后给出的两表的条件将两表连接起来。结果只显示符合连接条件的行。
即得到的是两张表的关联数据
 
②左连接:left join 
是以左表为基础,根据ON后给出的两表的条件将两表连接起来。
结果会将左表所有的查询信息列出,而右表只列出ON后条件与左表满足的部分。
 
③右连接right join是以右表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将右表所有的查询信息列出,而左表只列出ON后条件与右表满足的部分。

语法:

select 列1,列2,… from 表1  inner/left/right join 表2 on 表1.主键列 = 表2.外键列  where …
 

表内数据:



内连接



左连接


 

右连接


多表关联中对表取别名


 

关联查询练习:

– 1. 查询所有图书的详细信息(图片+类型)
– 2. 查询"玄幻"类型的图书列表
– 3. 查询每种图书类型的图书数量/总价格/平均价格
– 显示格式: 类型编号,类型名,图书数量,总价格,平均价格
– 4. 查询每种图书类型的图书数量/总价格/平均价格,按照图书数量升序
– 显示格式: 类型编号,类型名,图书数量,总价格,平均价格

N张表关联


6 union和union all

如果需要对多个表结果进行合并,可以使用union和union all
 
union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
union all:对两个结果集进行并集操作,包括重复行,不进行排序;
 
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。需要满足以下条件:
1、相同数量的列;
2、列也必须拥有相似的数据类型;
3、同时,每条 SELECT 语句中的列的顺序必须相同。
** **
语法:
select 列 from 表1 where …
union all
select 列 from 表1 where …
union all
select 列 from 表1 where …
 
 
示例:

 

7 where和having区别

1.where可以用于select、update、delete语句,having只能用于select语句中
2.where子句用来筛选 from子句中指定的操作所产生的行(对表的行进行筛选)
3.having子句用来从分组的结果中筛选行
4.having子句可以用集合函数(sum、count、avg、max和min),而where子句不可以。
5.即如果where和having一起用时,where会先执行,having后执行
 

8 drop、truncate、delete的区别

drop: drop table 表名
drop属于DDL定义语句,用于删除表结构,删除操作立即生效,原数据不放到rollback segment中,不能回滚,数据不可以回滚恢复。
 
truncate:truncate table 表名
truncate属于DDL定义语句,用于删除表所有数据,删除操作立即生效,原数据不放到rollback segment中,不能回滚,数据不可以回滚恢复。
 
delete:delete from 表 where 子句
delete属于DML操纵语句,用于删除表内数据,可以带where条件,删除的数据将存储在系统回滚段rollback segment中,需要的时候,数据可以回滚恢复。
 
 

9 物理外键和逻辑外键

物理外键:在定义表结构时显式声明外键关系,保证数据的完整性和一致性。添加和删除的需要注意主从表顺序。
 
逻辑外键:在定义表结构不显式声明外键关系,逻辑上我们知道表和表之间的关联列即可。
 
不管设置逻辑外键还是物理外键,SQL语句进行关联查询不需要做改变。
select  *  from 表 inner/ left/right/ join 表 on 关联关系 
 

10 日期时间函数

·          now()函数返回的是当前时间的年月日时分秒
·          curdate()函数返回的是年月日信息
·          curtime()函数返回的是当前时间的时分秒信息
·          now()与sysdate()类似,只不过now()在执行开始时就获取,而sysdate()可以在函数执行时动态获取。
·          对一个包含年月日时分秒日期格式化成年月日格式,可以使用DATE(time)函数
·          对一个包含年月日时分秒日期格式化成年格式,可以使用YEAR(time)函数
 

示例1:获得当前系统时间


示例2:日期时间格式转换


 
 

 
 

 
 

11 MYSQL中还有很多函数…

针对数学运算、字符串、日期时间等函数
 
 

综合作业

学生表t_student
字段名数据类型说明备注
stu_idint学生编号pk
stu_namevarchar(10)学生姓名
hiredatedate入学年月日
class_idint班级编号FK 和班级表主键关联


班级表t_class
字段名数据类型说明备注
class_idint班级编号pk
class_namevarchar(10)班级名称
teacher_idint老师编号FK 和老师表关联

教师表 t_teacher
字段名数据类型说明备注
teacher_idint教师编号pk
teacher_namevarchar(10)教师姓名
hiredatedate入职年月日


课程表 t_course
字段名数据类型说明备注
course_idint课程编号pk
course_namevarchar(10)课程名

选修课程成绩表 t_score
字段名数据类型说明备注
stu_idint学生编号与course_id作为联合主键,同时外键,和学生表关联
course_idint课程编号与stu_id作为联合主键,同时外键,和课程表关联
scoreint分数


备注:
对于成绩表的解释:
学生和课程成绩关系 N-N ;
一个学生可以考多门课程 ,一门课程可以被多个学生考,需要设置中间表
联合主键就是2个值不重复。 
 
 
使用SQL语句对各表插入数据
对教师表插入数据:
1号 陈老师 入职时间2020-01-01 
2号 黄老师 入职时间2021-05-15 
3号 白老师 入职时间2019-03-18 
 
对班级表插入数据:
班级编号1 班级名:软件1班   授课老师编号:1
班级编号2 班级名:软件2班   授课老师编号:2
班级编号3 班级名:计算机1班 授课老师编号:3
班级编号4 班级名:计算机2班 授课老师编号:1
班级编号5 班级名:自动化1班 授课老师编号:2
 
 
对学生插入数据:
1号学生名: 王五  入学时间2018-01-01  所属班级编号: 1
2号学生名: 田七  入学时间2018-01-02  所属班级编号: 1
3号学生名: 李四  入学时间2018-02-01  所属班级编号: 2
4号学生名: 小八  入学时间2019-08-11  所属班级编号: 2
5号学生名: 小九  入学时间2019-10-01  所属班级编号: 3
6号学生名: 大黄  入学时间2020-06-01  所属班级编号: 4
7号学生名: 张三  入学时间2021-07-01  所属班级编号: 5
8号学生名: 张三  入学时间2021-08-01  所属班级编号: 4
 
对课程表插入数据:
课程编号1 课程名:JAVA基础
课程编号2 课程名:JAVA框架应用
课程编号3 课程名:PHP编程
 
对成绩表插入数据
   让1,2,3,4,5,6,7同学均参加Java基础、JAVA框架应用、PHP编程课程的考试
 
– 1.使用DDL语句或者可视化工具建表,设置物理外键关系。
** **
– 2.通过批量插入SQL语句完成上面的插入数据任务
 
– 3.列出所有班级信息及授课老师的姓名和入职日期
 
– 4.列出陈老师和黄老师所带的班级
 
– 5.查询”软件1班”的学生数量
 
– 6.查询每个班级的班级名和学生数量,并按照学生数量升序显示
 
– 7.列出每门课程的课程号,课程名,选课人数,最高分
 
– 8.列出选修”JAVA基础”课程的学生学号,学生姓名,课程名,分数,并按照分数降序
– 9.列出在今年入学的学生编号,学生名,所在班级号,班级名
 
– 10.列出”软件1”班和”软件2班”的考试信息:学生编号,学生姓名,班级编号,班级名,课程名,分数
 
– 12.列出全校学生的考试信息,学生编号,学生姓名,班级编号,班级名,课程名,课程成绩(包括未选修课程的学生)
 
– 13.列出每个学生选修数量信息:学号,姓名,班级名,选修数量
 
– 14.列出课程平均分大于80分的课程名和平均分,并按平均分降序显示
 
– 15.列出选修人数超过2人的课程名和人数,并按照选修人数升序显示
 
– 16.列出每门课考试都及格的学生学号、学生姓名、班级名(60分为及格)
 

参考答案

公司笔试题:

第一家:


 
 

第二家:




第三家:




第四家:



第五家:


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

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

相关文章

route 路由使用记录

一、路由的基本介绍 路由是计算机网络中的一个重要概念,它用于确定数据包从源地址到目的地址的路径。在网络中,路由器是负责转发数据包的设备。 下面是关于路由的基本知识和使用方法的介绍: 路由表:路由器通过路由表来确定数据包…

配置自定义RedisTemplate 解决redis序列化java8 LocalDateTime

目录 配置自定义RedisTemplate 引入依赖 配置连接redis 编写测试类 出现问题 配置序列化 解决redis序列化java8 LocalDateTime 问题背景 问题描述 问题分析 解决方案一(全局) 解决方案二(单个字段) 配置自定义RedisTe…

某电子文档安全管理系统存在任意用户登录漏洞

漏洞简介 某电子文档安全管理系统存在任意用户登录漏洞,攻击者可以通过用户名获取对应的cookie,登录后台。 资产测绘 Hunter语法:web.icon“9fd216c3e694850445607451fe3b3568” 漏洞复现 获取Cookie POST /CDGServer3/LinkFilterServi…

MySQL 8.0 InnoDB Tablespaces之File-per-table tablespaces(单独表空间)

文章目录 MySQL 8.0 InnoDB Tablespaces之File-per-table tablespaces(单独表空间)File-per-table tablespaces(单独表空间)相关变量:innodb_file_per_table使用TABLESPACE子句指定表空间变量innodb_file_per_table设置…

ESD静电的危害与失效类型及模式?|深圳比创达电子

一、ESD的危害 1、失效的电子设备有60%~75%都是由ESD造成的; 2、对于新兴技术行业,尤其是高科技微电子,半导体,电磁敏感类及光器件的应用,比例将上升到90%。 因静电原因造成的电子行业的损失每年都多达几百亿美元&am…

JavaWeb笔记之前端开发HTML

一、引言 1.1HTML概念 网页,是网站中的一个页面,通常是网页是构成网站的基本元素,是承载各种网站应用的平台。通俗的说,网站就是由网页组成的。通常我们看到的网页都是以htm或html后缀结尾的文件,俗称 HTML文件。 …

【SpringCloud】设计原则之CAP与EDA事件驱动

一、设计原则之CAP CAP 原则又称 CAP 定理,指的是在一个分布式系统中,Consistency(一致性)、Availability(可用性)和 Partition tolerance(分区容错性),三者不可兼得&…

美颜技术详解:深入了解视频美颜SDK的工作机制

本文将深入探讨视频美颜SDK的工作机制,揭示其背后的科技奥秘和算法原理。 1.引言 视频美颜SDK作为一种集成到应用程序中的技术工具,通过先进的算法和图像处理技术,为用户提供令人印象深刻的实时美颜效果。 2.视频美颜SDK的基本工作原理 首…

C#上位机与欧姆龙PLC的通信04---- 欧姆龙plc的存储区

1、存储区概念 欧姆龙PLC将整个数据存储器分为10个区:输入继电器区、输出继电器区、内部辅助继电器区、特殊继电器区、保持继电器区、暂存继电器区、定时/计数器区、数据存储区、辅助存储继电器区、链接继电器区。 输入输出继电器区 CP1E系列PLC输入继电器区有16…

Modbus-ASCII数据帧

Modbus-ASCIl传输模式中,每个字节均以ASCI编码,实际报文中1个字节会以两ASCIl字符发送,因此这种模式比Modbus-RTU模式效率要低。 例如报文数据 x5B "5""B" X35 X42 . 数据帧格式如下: 从ASCI报文帧可以看出&#xff0…

探索 Vue3 (四) keep-alive缓存组件

keep-alive 的作用 官网介绍:KeepAlive | Vue.js keep-alive为抽象组件,主要用于缓存内部组件数据状态。可以将组件缓存起来并在需要时重新使用,而不是每次重新创建。这可以提高应用的性能和用户体验,特别是在需要频繁切换组件时…

java实现回文数算法

判断一个数是否为回文数可以使用以下算法: 将数字转化为字符串;初始化左右两个指针,分别指向字符串的首尾;循环比较左右指针指向的字符,如果相等则继续比较,直到左右指针相遇或者发现不相等的字符为止&…

使用凌鲨辅助学习软件研发

对于新入门的软件研发人员来说,Git和研发环境的搭建确实是一个不小的挑战。Git是一个分布式版本控制系统,用于跟踪代码的更改和协作,而研发环境则是一个专门用于开发和测试应用程序的环境。 在Git方面,新入门的软件研发人员需要了…

升级ChatGPT4的方法

1. 主要流程:先申请一个美区apple id,然后往这个apple id充钱,用这个apple id的钱订阅chatgpt 2. 细节: (1)申请美区apple id: 其实这一步很简单(曾经以为比较复杂)&…

23年12月AI烟火识别系统应用案例-北京梅兰芳故居防火系统

AI烟火识别智能视频分析系统在文化遗产保护领域的应用,尤其是在梅兰芳故居防火系统的部署,是现代科技与传统文化保护结合的典范。这篇文章将详细介绍富维烟火识别系统的设计、实施及其在23年12月在北京梅兰芳故居中的应用。 背景介绍 ● 梅兰芳故居的重要…

php-使用wangeditor实现富文本(完成图片上传)-npm

官网参考连接:快速开始 | wangEditor 样式: 一、新建一个临时文件夹test1和一个文件夹wangeditor 临时文件夹test1:临时存放通过npm下载的文件文件夹wangeditor:用于存放在临时文件夹test1拷贝的css和js 二、安装 editor 在确保有…

mac电池最大充电限制 AlDente Pro中文 for Mac

热保护:在电池温度较高时为电池充电会导致电池老化更快。启用热保护后,当电池温度过高时,充电将自动停止。 航行模式:通常情况下,即使激活了最大电池充电,您的 MacBooks 电池也会始终稍微充电和放电以保持所…

【yolov8系列】 yolov8 目标检测的模型剪枝

前言 最近在实现yolov8的剪枝,所以有找相关的工作作为参考,用以完成该项工作。 先细读了 Torch-Pruning,个人简单记录了下 【剪枝】torch-pruning的基本使用,有框架完成的对网络所有结构都自适应剪枝是最佳的,但这里没…

快速从图中提取曲线坐标数据的在线工具WebPlotDigitizer

快速从图中提取曲线坐标数据的在线工具WebPlotDigitizer 1 介绍2 WebPlotDigitizer在线版的使用2.1 上传图像2.2 点击横纵坐标点:2.3 选择曲线 3 查看数据参考 1 介绍 写论文时要对比别人曲线图、点图、柱形图的数据,但是只有图没有原始数据怎么办&…

JVM调优小结

JVM常见工具介绍 jinfo(查看配置信息) 查看Java应用程序配置参数或者JVM系统属性&#xff0c;相关命令详情我们可以使用-help或者man命令查看&#xff0c;如下所示: [rootxxxxxtmp]# jinfo -help Usage:jinfo [option] <pid>(to connect to running process)jinfo [op…