SQL-多表查询

1、多表关系

一对多、多对一:在多的一方建立外键,指向一的一方。

多对多:至少两个外键,通过中间表维护。

一对一

2、多表查询概述

3、内连接

4、外连接

5、自连接

6、联合查询

7、子查询

8、多表查询案例

# 1、多表关系
# 多对多
# 建立学生表和课程表进行多对多连接
create table student_score(id int auto_increment primary key  comment '主键',studentid int not null comment '学生Id',courseid int not null comment '课程Id',constraint  fk_courseid foreign key (courseid) references  course(id),constraint  fk_studentid foreign key (studentid) references  student (id)
)comment '学生课程中间表';
insert  into student_score values(null,1,1),(null,1,2),(null,1,3),(null,2,2),(null,2,3),(null,3,4);create table  student (id int auto_increment primary key comment '主键id',name varchar(10) comment '姓名',no varchar(10) comment '学号'
)comment '学生表';
insert into student values(null,'momo1','2019001'),(null,'momo2','2019002'),(null,'momo3','2019003'),(null,'momo4','2019004');create table course(id int auto_increment primary key  comment '主键id',name varchar(10) comment '课程名称'
)comment '课程表';
insert into course values(null,'c'),(null,'r'),(null,'sql'),(null,'hadoop');# 一对一
create table edu (id int auto_increment primary key comment '主键id',degree varchar(20) comment '学历',major varchar(20) comment  '专业',primaryschool varchar(20) comment '小学',middleschool varchar(20) comment '中学',university varchar(20) comment '大学'
)comment '学生教育背景表';
insert into edu values(2019001,'本科','医学','翻斗小学','翻斗中学','翻斗大学'),(2019002,'本科','教育学','翻斗小学','翻斗中学','翻斗大学'),(2019003,'本科','物理学','翻斗小学','翻斗中学','翻斗大学'),(2019004,'本科','数学','翻斗小学','翻斗中学','翻斗大学');alter table  studentmodify no int unique comment '学号';
alter table  studentadd constraint fk_no foreign key (no) references edu(id);# 2、多表查询概述
select * from dept,user;# 笛卡尔积,返回全部组合情况
select * from dept,user where dept.id =user.dept_id;# 消除无效笛卡尔积.若id为null,不满足条件,不会被删选出来# 3、内连接
# 内连接
# 隐式内连接
select user.name , dept.name from user,dept where dept.id =user.dept_id;
select u.name , d.name from user u,dept d where d.id =u.dept_id;
# 显示内连接
select user.name , dept.name from user inner join dept on dept.id =user.dept_id;
select user.name , dept.name from user join dept on dept.id =user.dept_id;
select u.name , d.name from user u join dept  d on d.id =u.dept_id;# 4、外连接
# 左连接
select u.* ,d.name from user u left outer join dept d on d.id = u.dept_id;
select u.* ,d.name from user u left  join dept d on d.id = u.dept_id;# outer可省略
# 右连接
select d.*,u.*  from user u right join dept d on d.id = u.dept_id;
select d.*,u.*  from dept d left join user u on d.id = u.dept_id;# 等价上一个语句# 5、自连接
ALTER TABLE useradd managerid int comment '上级id';
select u1.name,u2.name from user u1 join user u2 on u1.id=u2.managerid;# 无领导不显示
select u1.name '员工',u2.name '领导' from user u1 left join user u2 on u1.id=u2.managerid;# 无领导也显示# 6、联合查询
select * from user where age>=19
union all
select * from user where gender='男';# 直接拼接,含有重复数据select * from user where age>=19
union
select * from user where gender='男';# 去重# 7、子查询
# 标量子查询
select  id from  dept where name='人事部';
select  * from user where dept_id=(select  id from  dept where name='人事部');# 人事部的员工信息
select  * from employee where entrydate>(select  entrydate from  employee where name='人1');# 人1入职之后入职的人# 列子查询
select  * from user where dept_id in (select  id from  dept where name='人事部'or name='业务部' );# 人事部和业务部的员工信息
select  name,age
from user where age > all (select age from  user where dept_id=(select id from dept where name='人事部') );# 比人事部年龄都大的员工信息
select  name,age
from user where age > any (select age from  user where dept_id=(select id from dept where name='业务部') );# 比业务部任意一个年龄大的员工信息# 行子查询
select age,managerid from user where name='Tom4';
select * from user where (age,managerid)=(select age,managerid from user where name='Tom4');#与Tom4同年龄同领导的员工# 表子查询
select age,managerid from user where name='Tom4'or name='Tom5' ;
select * from user where (age,managerid) in (select age,managerid from user where name='Tom4'or name='Tom5');# 与这两个人同年龄同领导的员工select * from user where age>20;
select * from (select * from user where age>20) e ,dept d where e.dept_id=d.id;# 查询大于20岁的员工和部门信息,不显示null
select * from (select * from user where age>20) e left join dept d on e.dept_id=d.id;# 显示null# 7、多表查询案例ing

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

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

相关文章

语音测试(一)ffmpeg视频转音频

视频转音频 下载ffmpeg工具进入bin目录cmd进入控制台输入命令 ffmpeg.exe -i ./视频.mp4 ./音频.wav命令说明 ffmpeg -i input.mp4 output.mkv FFmpeg 可能会尝试自动选择合适的编码器对视频和音频进行重新编码,以便适应 MKV 格式的要求ffmpeg -i input.mp4 -c c…

linux 内核代码学习(八)

总体目标:由于fedora10 linux发行版中自带的linux2.6.xx内核源码规模太庞大了,对于想通读内核源码的爱好者来说太困难了,因此选择了linux2.4.20内核来进行测试(最终是希望能够实现linux1.0内核的源码完全编译和测试)。…

Rust的数据类型

【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com) Rust到底值不值得学,之一 -CSDN博客 Rust到底值不值得学,之二-CSDN博客 3.5 数据类型的定义和分类 在Rust…

亚马逊逆袭:我是怎么让店铺从平庸到高增长的

今年的亚马逊Prime会员大促即将到来,对于各位卖家来说,这不仅代表着提升店铺主推商品排名、加速商品销量增长的机会,还意味着为年末其他大促活动提前引流获客的大好时机,绝对不容错过! 如果你的亚马逊店铺还是表现平平…

DNN学习平台(GoogleNet、SSD、FastRCNN、Yolov3)

DNN学习平台(GoogleNet、SSD、FastRCNN、Yolov3) 前言相关介绍1,登录界面:2,主界面:3,部分功能演示如下(1)识别网络图片(2)GoogleNet分类&#xf…

【基础】Three.js 自定义几何体和复制几何体

通过自定义顶点数据,可以创建任意的几何体。像threejs的长方体BoxGeometry、球体SphereGeometry等几何体都是基于BufferGeometry类构建的,它表示一个没有任何形状的空几何体。 1. 自定义点模型 通过javascript 类型化数组 Float32Array创建一组xyz坐标…

pycharm破解教程

下载pycharm https://www.jetbrains.com/pycharm/download/other.html 破解网站 https://hardbin.com/ipfs/bafybeih65no5dklpqfe346wyeiak6wzemv5d7z2ya7nssdgwdz4xrmdu6i/ 点击下载破解程序 安装pycharm 自己选择安装路径 安装完成后运行破解程序 等到Done图标出现 选择Ac…

IMU腕带评估轮椅用户运动健康

近期,美国的研究团队利用惯性测量单元(IMU)和机器学习来准确评估手动轮椅使用者的运动健康状况,这在康复训练和慢性病管理领域具有广阔的应用前景。 研究小组将运用高性能的IMU传感器固定到轮椅使用者佩戴的手腕带上,用…

分享一套外链系统,付费进群系统

本系统特点,活码系统以及卡片系统,付费进群系统 分享一套外链系统其中带付费进群系统插件,前端做了美化

第90集《大佛顶首楞严经》

《大佛顶如来密因修正了义诸菩萨万行首楞严经》。监院法师慈悲,诸位法师,诸位同学,阿弥陀佛! 请大家打开讲义197面 子一、现化表法 诵持『楞严神咒』在整个修学《首楞严王三昧》的过程,它所扮演的角色有两个&#x…

记录一下idea的一些使用技巧和遇到的异常(持续更新)

技巧 自己的模板——live template 有些代码在项目中通常会被用到或会被重复使用,可以自己写一个模板存起来,要用的时候用快捷键生成就可以了。 在这里选择生效范围 现在,就有我们自己的模板了,一回车就自动生成 idea的全局配置…

蓄水池漂浮物识别摄像机

蓄水池是重要的水资源储备设施,但常常会受到漂浮物的影响,影响水质和使用效果。为了及时监测和清理蓄水池中的漂浮物,蓄水池漂浮物识别摄像机 被广泛应用于各类水库、湖泊等场所。这种摄像机结合了图像识别技术和人工智能算法,能够…

照片信息的读取与分类(1)

通过Python的各种模块我们可以很方便的获取到文件的各种属性数据,比如文件修改时间、文件大小或是本节课获取到的照片拍摄时间等。获取到了这些数据后,我们就可以对文件按照需求进行移动、改名甚至删除等操作。配合Python批量处理文件的优势,…

elementUI table 给表头添加气泡显示(鼠标悬浮显示注释)

elementUI table 给表头添加气泡显示(鼠标悬浮显示注释) 前言:文档显示:(使用插槽,我看看到底是怎么个事儿)文档代码:修改后的效果:页面效果: 前言: 公司出现…

【ACM出版】2024年第四届工商管理与数据科学国际学术会议 (BADS 2024,10月25-27)

2024年第四届工商管理与数据科学国际学术会议(BADS 2024)将于2024年10月25-27日在中国重庆召开,大会由喀什大学支持。 在当今全球化与数字化迅速发展的时代,工商管理与数据科学作为推动经济增长和技术进步的重要力量,正以前所未有的速度交叉融…

骨传导耳机哪款好?精选五款热门骨传导耳机分享让你避免踩雷

目前在市面当中,骨传导耳机被称之为是黑科技耳机,骨传导耳机拥有很多优势,在听歌时不需要入耳,不会伤耳朵。随着骨传导耳机品牌的不断发展,人们在选购骨传导耳机时,也会觉得非常困难,可能一不小…

【知识图谱】4、LLM大模型结合neo4j图数据库实现AI问答的功能

昨天写了一篇文章,使用fastapi直接操作neo4j图数据库插入数据的例子, 本文实现LLM大模型结合neo4j图数据库实现AI问答功能。 废话不多说,先上代码 import gradio as gr from fastapi import FastAPI, HTTPException, Request from pydantic…

STM32CubeMX软件配置及点灯操作(基于STM32F4系列+HAL库)

注:本文主要记录一下STM32CubeMX软件的使用流程。 01 软件安装 1.keil 需要安装以下支持包(keil在线安装里没有对应芯片支持包)。 2.STM32CubeMX 安装库: 3.串口助手 02 硬件连接 该原理图来源于学益得在线课堂教学项目《RTOS项目实战:从PCB到Free…

STM32F407ZGT6单片机HAL库——DAC输出

一、输出直流电压 1.cubemax的配置(通道1) 2.直流电压大小计算 3.主函数加入初始化的程序 float DAC_voltage1.5;HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, DAC_voltage*4095/3.3);//HAL_DAC_Start(&hdac,DAC_CHANNEL_1); 二、…

(一)模式识别——基于SVM的道路分割实验(附资源)

写在前面:本报告所有代码公开在附带资源中,无法下载代码资源的伙伴私信留下邮箱,小编24小时内回复 一、实验目的 1、实验目标 学习掌握SVM(Support Vector Machine)算法思想,利用MATLAB的特定工具箱和库函…