MySQL学习笔记------多表查询

news2024/11/27 18:46:44

目录

多表关系

一对多

多对多

一对一

多表查询

概述

 分类

内连接(交集)

隐式内连接

显式内连接

​编辑

外连接(from后为左表,join后为右表)

左外连接

右外连接

自连接 

 联合查询(union,union all)

子查询

分类

标量子查询

列子查询 

行子查询 

表子查询


多表关系

概述

项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在各种联系

基本分为三类:一对多,多对多,一对一

一对多

典型案例:部门与员工

实现:在多的一方建立一个外键,指向一的一方的主键

多对多

典型案例:学生与课程的关系

实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

#建立学生表
create table student(
    id int auto_increment primary key  comment '主键ID',
    name varchar(10) comment '姓名',
    no varchar(10) comment '学号'
)comment '学生表';
insert into student(id, name, no) VALUES (1,'孔明','1000000000'),(2,'士元','1000000001'),(3,'仲达','1000000003'),(4,',孟德','1000000004');
#建立课程表
create table course(
    id int auto_increment primary key comment '主键ID',
    name varchar(10) comment '课程名称'
)comment '课程表';
insert into course(id, name) VALUES (1,'Java'),(2,'MySQL'),(3,'PHP'),(4,'C++');
#建立学生课程表
create table student_course(
    id int auto_increment primary key comment '主键',
    student_id int not null comment '学生ID',
    course_id int not null comment '课程编码',
    constraint fk_courseid foreign key (course_id)references  course(id),
    constraint fk_student_id foreign key (student_id)references student(id)
)comment '学生课程中间表';
insert into student_course(id, student_id, course_id) VALUES (1,1,1),(2,2,2),(3,3,3),(4,4,4);

添加外键后出现蓝色小钥匙 

一对一

案例:用户与用户详情

关系:一对一,用于单表拆分,将表的基础字段放在一张表中,其他详情字段放到另一张表中,提高操作效率

实现:在任意一方加入外键,关联另一方的主键,并且设置外键为唯一的(unique)

多表查询

概述

建表

create table dept(
    id int auto_increment comment 'ID' primary key ,
    name varchar(50) not null comment '部门名称'
)comment '部门表';
insert into dept(id,name) VALUES (1,'研发部'),(2,'市场部'),(3,'财务部'),(4,'销售部'),(5,'总经办'),(6,'人事部');
create table employee(
    #唯一标识,主键,自动增长为auto_increment
    id int primary key auto_increment comment 'ID',
    #不为空且唯一
    name varchar(10) not null unique comment '姓名',
    #大于零小于120
    age int check ( age>0&&age<120 )comment '年龄',
    job varchar(20) comment '职务',
    salary int comment '薪资',
    entrydate date comment '入职时间',
    dept_id int comment '部门id'
)comment '员工表';
insert into employee(id,name,age,job,salary,entrydate,dept_id)values (1,'关羽',22,'开发',3000,'2018-11-1',1),
                                                                     (2,'刘备',34,'经理',10000,'2011-2-11',2),
                                                                     (3,'张飞',18,'程序员鼓励师',8000,'2020-1-2',4),
                                                                     (4,'曹操',30,'董事长',2000000,'1990-3-4',5),
                                                                     (5,'周瑜',16,'财务总监',10000,'2000-3-5',3);

 查询:

#查询---笛卡尔积
select *from employee,dept;

此时查询,会匹配每个人所有部门匹配一次

修改之后

select *from employee,dept where employee.dept_id=dept.id;

 分类

 例如:AB两表

连接查询

    内连接:相当于查询A、B交集部分数据

    外连接:

        左外连接:查询左表所有数据,以及两张表交集部分数据

        右外连接:查询右表所有数据,以及两边交集部分数据

   自连接:当前表与自身的连接查询,自连接必须使用表别名

子查询

内连接(交集)

内连接分为隐式和显式

隐式内连接

select 字段列表 from 表1,表2 where 条件...;

以上面部门表和员工表为例

#查询员工及其关联部门名称
select employee.name,dept.name from employee,dept where employee.dept_id=dept.id;

显式内连接

select 字段列表 from 表1 [inner] join 表2 on 连接条件...;


#显式
select employee.name,dept.name from employee inner join dept on employee.dept_id=dept.id;

外连接(from后为左表,join后为右表)

左外连接

select 字段列表 from 表1 left [outer] join 表2 on 条件...;

相当于查询表1(左表)的所有数据(包含表交集部分)

#左外连接
select e.*,d.name from employee e left outer join dept d on e.dept_id=d.id;

完全包含左表 

右外连接

select 字段列表 from 表1 right [outer] join 表2 on 条件...;

相当于查询表2(右表)的所有数据(包含表交集部分)

#右外连接
select d.*,e.* from employee e right outer join dept d on e.dept_id=d.id;

自连接 

自连接查询语法(必须取别名)

select 字段列表 from 表A 别名A  jion 表A 别名B on 条件...;(join可省略)

自连接查询,可以是内连接查询,也可以是外连接查询。

#自连接
select a.name,b.name from employee a,employee b where a.manageid=b.id;

 给表添加了上司id

 联合查询(union,union all)

对于union查询,就是把多次查询的结果合并,形成一个新的查询结果集

语法:

select 字段列表 from 表A  ...

union[all]

select 字段列表 from 表B......;

#联合查询
select * from employee where age>20
union all
select *from employee where salary>20000;

去掉all可去重

注意事项:对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致

子查询

SQL语句中嵌套select语句,称为嵌套查询,又称子查询

语法:

select * from t1 where column1=(select co;lumn1 from t2);

子查询外部的语句可以是insert/update/delect/select的任何一个

分类

根据子查询结果不同可分为

标量子查询(子查询结果为单个值)

列子查询(子查询结果为1列)

行子查询(子查询结果为1行)

表子查询(子查询结果为多行多列)

根据子查询位置分为:where之后、from之后、select之后。

标量子查询

子查询返回的结果是单个值(数字、日期、字符串等),最简单的形式

#标量子查询
select*from employee where dept_id=(select id from dept where name='财务部');
#()内返回值为销售部id

列子查询 

#列子查询
select *from employee where dept_id in (select id from dept where name='财务部'or name='研发部');
#空格内返回一列

行子查询 

#行子查询
select *from employee where (salary,manageid)=(select salary,manageid from employee where name='周瑜');

表子查询

#表子查询
select e.*,d.*from (select*from employee where  entrydate>'2000-01-01') e left outer join dept d on e.dept_id=d.id;

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

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

相关文章

怎么寻找免费3D模型网站?

无论是建筑设计、产品设计还是动画制作&#xff0c;3D模型都发挥着不可或缺的作用。然而&#xff0c;寻找高质量且免费的3D模型并非易事。那么怎么寻找免费3D模型网站? 1.网络搜索&#xff1a;在搜索引擎中输入“免费3D模型网站”或类似的关键词&#xff0c;可以得到一系列相关…

【GEE】下载研究区的Landsat8去云清晰影像

如果你要绘制研究区概况或者是做一个产品的比较 需要整个研究区的Landsat8影像的话 你可以使用下面代码 // 定义研究区域 var table ee.FeatureCollection("projects/ee-1261423515/assets/EHEimage/EHE"); function rmCloud (image){var qa image.select(pixel_…

顺子日期(StringBuffer)

题目 public class Main {static int[] date new int[] {0,31,28,31,30,31,30,31,31,30,31,30,31};public static boolean res(StringBuffer s) {String ss s.toString();//yyrrfor(int i0;i<2;i) {int x Integer.parseInt(s.charAt(i)"");int y Integer.par…

近期整理的前端面试问题大集合【附带答案版】

目录 1、vue的双向绑定原理是什么&#xff1f;里面的关键点在哪里&#xff1f; 2、实现水平垂直居中的方式&#xff1f; 3、常用伪元素有哪一些&#xff1f; 4、移动端如何适配不同屏幕尺寸&#xff1f; 5、本地存储有哪一些&#xff1f;他们三者有什么区别&#xff1f; …

【网站项目】农业信息管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

配置 施耐德 modbusTCP 分布式IO子站 PRA0100

模块官方介绍&#xff1a;https://www.schneider-electric.cn/zh/product/BMXPRA0100 1. 总体步骤 2. 软件组态&#xff1a;在 Unity Pro 软件中创建编辑 PRA 模块工程 2.1 新建项目 模块箱硬件型号如下 点击 Unity Pro 软件左上方【新建】按钮&#xff0c;选择正确的 DIO …

直播美颜SDK:AI视觉技术在直播平台中的创新与实践

在直播平台里&#xff0c;主播们通过各种形式的内容吸引着观众&#xff0c;而其中一项重要的技术创新便是直播美颜SDK的应用。本文将探讨这一技术在直播平台中的创新与实践。 一、直播美颜SDK的背景 随着社交媒体的兴起&#xff0c;人们对于自己的形象越来越注重&#xff0c;尤…

vlan和vxlan是什么?有什么区别?

VLAN是二层技术&#xff0c;处于同一个广播域&#xff0c;如果2台主机属于同一个VLAN&#xff08;广播域&#xff09;&#xff0c;它们之间可以直接使用MAC地址通信。 主机A、B位于VLAN 10&#xff0c;同一个广播域&#xff0c;主机A可以主机B用MAC地址通信。 主机C位于VLAN 2…

数据挖掘及其近年来研究热点介绍

&#x1f380;个人主页&#xff1a; https://zhangxiaoshu.blog.csdn.net &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️&#xff0c;如有错误敬请指正! &#x1f495;未来很长&#xff0c;值得我们全力奔赴更美好的生活&…

Spring: 后端状态码如何与http状态码保持一致

文章目录 一、背景二、解决方案 一、背景 今天使用postman在做接口测试的时候发现了一个有趣的问题&#xff1a;响应体的status和http的status一样&#xff0c;出于好奇对该现象进行了总结。 二、解决方案 通过拦截器ResponseBodyAdvice&#xff0c;做到统一拦截 Controll…

论文笔记:Detecting Pretraining Data from Large Language Models

iclr 2024 reviewer评分 5688 1 intro 论文考虑的问题&#xff1a;给定一段文本和对一个黑盒语言模型的访问权限&#xff0c;在不知道其预训练数据的情况下&#xff0c;能否判断该模型是否在这段文本上进行了预训练 这个问题是成员推断攻击(Membership Inference Attacks&…

【算法集训】基础算法:二分查找 | 概念篇

二分枚举&#xff0c;也叫二分查找&#xff0c;指的就是给定一个区间&#xff0c;每次选择区间的中点&#xff0c;并且判断区间中点是否满足某个条件&#xff0c;从而选择左区间继续求解还是右区间继续求解&#xff0c;直到区间长度不能再切分为止。 由于每次都是把区间折半&am…

AI图片四季更替解决方案,一键切换,四季美景尽在指尖

随着科技的不断进步&#xff0c;人工智能&#xff08;AI&#xff09;已经渗透到我们生活的方方面面&#xff0c;为各行各业带来了前所未有的变革。在图像处理领域&#xff0c;美摄科技凭借领先的AI技术&#xff0c;推出了一款创新的AI图片四季更替解决方案&#xff0c;让风景图…

php反序列化题目

[NewStarCTF 公开赛赛道]UnserializeOne 分析代码&#xff0c;最终需要调用到 file_get_contents 即可获得flag 从后往前分析 触发 __invoke 需要 以调用函数的方式调用一个对象 可以找到Start类 里的__isset中可以将类当作函数调用 所以需要调用到 __isset 就需要 isset()…

微服务篇面试题

1、SpringCloud的组件有哪些&#xff1f; 2、负载均衡如何实现&#xff1f; 3、什么是服务雪崩&#xff1f;怎么解决&#xff1f; 4、项目中有没有做过限流&#xff1f; Tomcat单体可以&#xff0c;分布式不适合 5、解释一下CAP和BASE P&#xff1a;加入node03这边的网络断了&a…

提示工程中的10个设计模式

我们可以将提示词定义为向大型语言模型(Large Language Model&#xff0c;LLM)提供的一个查询或一组指令&#xff0c;这些指令随后使模型能够维持一定程度的自定义或增强&#xff0c;以改进其功能并影响其输出。我们可以通过提供细节、规则和指导来引出更有针对性的输出&#x…

PostgreSQL入门到实战-第五弹

PostgreSQL入门到实战 PostgreSQL查询语句(二)官网地址PostgreSQL概述PostgreSQL给列取别名理论PostgreSQL给列取别名实操更新计划 PostgreSQL查询语句(二) 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://www.post…

【Labview】虚拟仪器技术

一、背景知识 1.1 虚拟仪器的定义、组成和应用 虚拟仪器的特点 虚拟仪器的突出特征为“硬件功能软件化”&#xff0c;虚拟仪器是在计算机上显示仪器面板&#xff0c;将硬件电路完成信号调理和处理功能由计算机程序完成。 虚拟仪器的组成 硬件软件 硬件是基础&#xff0c;负责将…

【Linux】进程状态僵尸进程和孤儿进程阻塞、挂起和运行

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. 前言2. Linux的进程状态2.1 S状态2.2 R状态2.3 T/t状态2.4 D状态 3. 僵尸进程和孤儿进程3.1 僵尸进程3.2 孤儿进程 4. 进程的阻塞、挂起和运行4.1 运行4.2 阻塞状态4.3 挂起4.4 进程切换 1. 前言 上一篇博客中提到…

Redis: 持久化

文章目录 一、RDB持久化1、概念2、生成、载入RDB文件3、执行时机&#xff08;1&#xff09; 执行save命令&#xff08;2&#xff09;执行bgsave命令&#xff08;3&#xff09;Redis停机时&#xff08;4&#xff09;触发RDB条件 4、bgsave原理5、小结 二、AOF持久化1、概念2、AO…