mysql 基础(三)

一、多表设计

数据库设计范式

  1. 第一范式(确保每列保持原子性)
    第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。
  2. 第二范式就是要有主键,要求其他字段都依赖于主键。
    • 没有主键就没有唯一性,没有唯一性在集合中就定位不到这行记录,所以要主键。
    • 其他字段为什么要依赖于主键?
      因为不依赖于主键,就找不到他们。更重要的是,其 他字段组成的这行记录和主键表示的是同一个东西,而主键是唯一的,它们只需要依 赖于主键,也就成了唯一的
  3. 第三范式,确保每列都和主键列直接相关,而不是间接相关,要求一个数据库表中不包含 已在其它表中包含的非主关键字信息

外键 

外键引用另外一个数据表的某条记录。
外键列类型与主键列类型保持一致
数据表之间的关联/引用关系是依靠具体的主键(primary key)和外键 (foreign key)建立起来的

约束名改则(约定俗成):

注: 

  • 当主表中没有对应的记录时,不能将记录添加到从表。
  • 不能更改主表中的值而导致从表中的记录孤立。
  • 从表存在与主表对应的记录,不能从主表中删除该行。
  • 删除主表前,先删从表

代码示例如下:

/*
   数据库概念
   mysql数据库
   安装
   
   sql
     ddl
      创建数据库
      创建表 
     dml
       insert into 
       update 
       delete
     dql  
      select 结果 from 表 where 条件  [group by 条件  order by 列  limit ]
      
      函数 单行函数  字符 逻辑  日期 数学函数
           分组函数
           
           
   数据库设计范式(数据库设计规则) 如何将多个信息合理的进行组织]
   
   设计3范式
    第一范式: 满足列的原子性(不可拆分)
                联系范式-->邮箱,电话,qq 可以拆分
                
    第二范式: 数据库表中必须要有主键,能唯一的表示某条记录的列(有些表中可以没有主=键)
    
    第三范式: 一张表中存储一类信息, 在一张表中关联其他表中的数据时,只需要关联主键列即可.
    
    
    专业信息表
       专业编号(主键)
       专业名称
     
     
    学生与专业是有关系的,如何建立学生和专业表的关系.
           
*/
   DROP TABLE stu
   
   CREATE  TABLE major(
        id INT PRIMARY KEY AUTO_INCREMENT,
        NAME VARCHAR(20)
   )

-- 修改表  为表添加一个列  一对多 多对一
   ALTER TABLE student ADD majorid INT

-- 外键  在一个表中外键是用来与另一个表的主键关联的
-- 主键 不能为空  唯一 检查 
-- 外键有两种情况:
-- 1.不加外键约束
--     可以任意的对表数据进行操作,即使两个表中的数据对应不上也没有问题 

-- 2.添加外键约束
--  添加外键约束后,两张表操作时,不能导致外键列和主键列对应关系不成立
  ALTER TABLE student  ADD CONSTRAINT fk_student_major_majorid FOREIGN KEY(majorid) REFERENCES major(id)

 -- 删除外键约束
 ALTER TABLE student DROP FOREIGN KEY fk_student_major_majorid
  
  -- 学生选课   一个学生至少选择2个课程
  -- 课程信息表  多对对关系设计
  
  CREATE TABLE course(
    id INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(20)  
  )
  
  
  -- 添加一个学生选课表   学生和课程关系表   放一个学生学号外键, 放一个课程外键
  CREATE TABLE student_course(
     stunumber INT,
     courseid INT
  )

ALTER TABLE student_course  ADD CONSTRAINT fk_student_course_student_stunumber FOREIGN KEY(stunumber) REFERENCES student(number)
ALTER TABLE student_course  ADD CONSTRAINT fk_student_course_course_courseid FOREIGN KEY(courseid) REFERENCES course(id)

 二、关联查询

内连接(inner join)

  • 把满足了条件的两张表中的交集数据查询出来
  • 语法:

左外关联(left join) 

  • 把左表的全部元素和满足左表中的右表元素查询出来
  • 语法:

右外关联(right join) 

  • 把右表的全部元素和满足右表中的右表元素查询出来
  • 语法:

子查询 

含义:出现在其他语句中的select语句,称为子查询或内查询;外部的查询语句,称为主查询或外查询。 

分类:

  • 按子查询出现的位置:
    • from后面:支持表子查询
    • where:支持标量子查询,列子查询
  • 按功能、结果集的行列数不同:
    • 标量子查询(结果集只有一行一列)
    • 列子查询(结果集只有一列多行)
    • 表子查询(结果集一般为多行多列

代码示例如下:

-- 关联查询  多表关联在一起查询
-- 学号 姓名 性别  电话 专业名称   -- 信息来自于两张表中

 -- 关联时没有任何的限制,会产生笛卡尔乘积现象 ,这是我们不想要的结果
 SELECT * FROM student,major

-- 关联查询  内关联  左外关联  右外关联

-- select number,name,gender,phone,name from student inner join major on majorid = id

 SELECT 
   s.number,s.name,s.gender,s.phone,m.name  mname
 FROM student s 
 INNER JOIN major m ON s.majorid = m.id   -- 把满足条件关联在一起
 
 SELECT 
   s.number,s.name,s.gender,s.phone,m.name  mname 
 FROM student s,major m 
 WHERE s.majorid = m.id   -- 先产生一个笛卡尔乘积  然后在条件筛选
 
 
 
 -- 左外连接   特点  即使不满足连接条件,也会把左边表中的所有数据查询出来
 
 SELECT 
   s.number,
   s.name,
   s.gender,
   s.phone,
   m.name  mname
 FROM 
   student s LEFT JOIN major m ON s.majorid = m.id
 
 
 -- 右外连接  即使不满足连接条, 也要把右边表中的所有数据查询出来
 SELECT 
   s.number,
   s.name,
   s.gender,
   s.phone,
   m.name  mname
 FROM 
   student s RIGHT JOIN major m ON s.majorid = m.id
  
 -- 统计每个专业下有多少学生
 SELECT 
   COUNT(number),
   m.name  mname
 FROM 
   student s RIGHT JOIN major m ON s.majorid = m.id
  GROUP BY m.name

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

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

相关文章

知识产权实缴注册资金的流程

随着新《公司法》的出台,很多企业老板几乎睡不着,都在为实缴注册资本苦恼。前文有谈到目前比较靠谱的实缴方式是知识产权实缴。那么知识产权实缴的流程是怎么样的?需要准备哪些资料? 下面用一张图为各位企业老板们解读知识产权实…

ios上架缺少info.plist文件

app打包ios提示修改info.plist文件,在iOS原生开发中提供了配置 Info.plist 和 资源文件(Bundle Resources)。uni-app中对常用项进行了封装,提供了manifest.json。 但manifest.json不能包含所有iOS的配置。需要自定义一个Info.plis…

掌握大语言模型技术: 推理优化

掌握大语言模型技术_推理优化 堆叠 Transformer 层来创建大型模型可以带来更好的准确性、少样本学习能力,甚至在各种语言任务上具有接近人类的涌现能力。 这些基础模型的训练成本很高,并且在推理过程中可能会占用大量内存和计算资源(经常性成…

【本科生机器学习】【北京航空航天大学】课题报告:支持向量机(Support Vector Machine, SVM)初步研究【上、原理部分】

说明: (1)、仅供个人学习使用; (2)、本科生学术水平有限,故不能保证全无科学性错误,本文仅作为该领域的学习参考。 一、课程总结 1、机器学习(Machine Learning, ML&am…

【9.DAC数模转换器】蓝桥杯嵌入式一周拿奖速成系列

系列文章目录 蓝桥杯嵌入式系列文章目录(更多此系列文章可见) DAC数模转换器 系列文章目录一、STM32CUBEMX配置二、项目代码1.main.c --> DACProcess 总结 一、STM32CUBEMX配置 STM32CUBEMX PA4 -> DAC1_OUT1 ; PA5 -> DAC1_OUT2DACProcess 二、项目代码 1.main.c -…

司铭宇老师:销售人员心态激励培训:销售心态调整与情绪压力管理

销售人员心态激励培训:销售心态调整与情绪压力管理:迈向成功的关键要素 导语:在竞争激烈的销售行业中,心态调整与情绪压力管理成为销售人员至关重要的能力。如何在这场博弈中保持良好的心态,有效应对压力,…

C++的关键字,命名空间,缺省参数,函数重载以及原理

文章目录 前言一、C关键字(C98)二、命名空间命名空间介绍命名空间的使用 三、C输入【cin】& 输出【cout】四、缺省参数缺省参数概念缺省参数分类缺省参数的使用小结一下 五、函数重载函数重载介绍函数重载类型 六、C支持函数重载的原理--名字修饰(name Mangling)【重点】 前…

科普栏目|负氧离子水壁炉低能耗的背后的原因与生活优势

科普栏目|负氧离子水壁炉低能耗的背后的原因与生活优势 在当今追求绿色生活和能源高效利用的潮流中,负氧离子水壁炉以其低能耗的特性成为了家庭装饰领域的一颗明珠。究竟是什么原因使得这项技术在能耗方面脱颖而出呢?而低能耗又能为生活带来…

freeswitch智能外呼系统搭建流程

1.获取实时音频数据 media_bug (好多mrcp方式也崩溃所以用以下方式) 可以参考 方式可以通过socket或者webscoket freeswitch[1.05]用websocket发送mediabug语音流到ASRProxy实现实时质检和坐席辅助 - 知乎 2.webscoket 好多c的库放模块容易崩溃 可以…

适合孩子读书用什么的落地灯?落地护眼灯测评推荐

现代人用眼负荷极大,不仅白天要办公,晚上更是玩手机、刷短视频或是晚间看书阅读,所以营造一个健康的照明环境很重要! 如何营造一个健康的照明环境呢?那就不得不提起最近就很火的落地护眼灯。不同于其他台灯灯具&#…

flutter极光推送配置厂商通道(华为)笔记--进行中

一、基础集成按照下面官方文档进行 厂商通道相关参数申请教程 集成厂商 集成指南 官方文档:厂商通道回执配置指南 注意:不同厂商对app上架的要求不同,华为、荣耀 对app上架没有硬性要求 遇到问题 1、引入apply plugin: com.huawei.agconn…

Java玩转《啊哈算法》排序之桶排序

过去心不可得,现在心不可得,未来心不可得 目录在这里 楔子代码地址桶排序代码核心部分优缺点 完整代码演示 升级版核心代码完整代码演示 楔子 大家好!本人最近看了下《啊哈算法》,写的确实不错,生动形象又有趣&#x…

k8s的安全机制

k8s是分布式集群管理工具,k8s作用是容器编排 1、安全机制核心:API server。API server作为整个集群内部通信的中介,也是外部控制的入口,所有的安全机制都是围绕api sserver来进行设计的。请求api server资源要满足3个条件&#x…

Garbage First收集器(简称G1)

概述:Garbage First(简称G1)收集器是垃圾收集器技术发展历史上的里程碑式的成果,它开创了收集器面向局部收集的设计思路和基于Region的内存布局形式。 G1开创的基于Region的堆内存布局是它能够实现这个目标的关键。虽然G1也仍是遵…

开始学习Vue(路由)

一、什么是路由 SPA 指的是一个 web 网站只有唯一的一个 HTML 页面,所有组 件的展示与切换都在这唯一的一个页面内完成。 此时,不同组件之间的切换需要通过前端路由来实现。 结论:在 SPA 项目中,不同功能之间的切换&#xff0…

无人机航迹规划(六):七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划(提供MATLAB代码)

一、七种算法(DBO、LO、SWO、COA、LSO、KOA、GRO)简介 1、蜣螂优化算法DBO 蜣螂优化算法(Dung beetle optimizer,DBO)由Jiankai Xue和Bo Shen于2022年提出,该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁…

LP-AM243x EtherNet/IP 连接施耐德 M241 EIP主站测试

硬件环境:LP-AM243x 开发板 施耐德 Modicon M241 软件环境: INDUSTRIAL-COMMUNICATIONS-SDK-AM243X MCU-PLUS-SDK-AM243X — MCU SDK for AM243x 调试过程: 首先,让AM243x能够运行 Null Boot, Starting NULL Boo…

力扣hot100 除自身以外数组的乘积 前后缀积

Problem: 238. 除自身以外数组的乘积 文章目录 思路前后缀积 思路 前后缀积 ⏰ 时间复杂度: O ( n ) O(n) O(n) 🌎 空间复杂度: O ( n ) O(n) O(n) class Solution {public int[] productExceptSelf(int[] nums){int n nums.length;int[] p new int[n];//除…

Obsidian - 使用小记(Typora切换过来)

文章目录 关于 Obsidian打开已有的 文件夹将图片改为 Typora 的保存文件夹 关于 Obsidian 官网 https://obsidian.md/github : https://github.com/obsidianmd 个人版免费 一直习惯用 Typora 编写markdown git 记录笔记,多次被安利 Obsidian 后,今天尝…

解决TortoiseGit软件Git Show log时显示Too many files to display的问题

1 问题描述 有时代码提交修改的文件比较多,当查看log时无法显示出来修改的文件列表,如下所示: 2 解决方法 将LogTooManyItemsThreshold尽可能配置得大一些。 三 参考资料 https://gitlab.com/tortoisegit/tortoisegit/-/issues/3878