mysql多表

news/2025/2/28 15:08:00/文章来源:https://www.cnblogs.com/junting/p/18743316

一、表格

员工表
sid:员工编号、name:姓名、age:年龄、woektime_start 入职时间,incoming工资
dept2 部门编号

部门表
dept1 部门编号,dept_name 部门名称

二、建表语句

CREATE table dept(
dept1 VARCHAR(6),
dept_name VARCHAR(20))
default charset=utf8;
INSERT into dept VALUES ('101','财务');
INSERT into dept VALUES ('102','销售');
INSERT into dept VALUES ('103','IT技术');
INSERT into dept VALUES ('104','行政');

CREATE table emp (
sid VARCHAR(6),name VARCHAR(20),
age TINYINT(2),woektime_start VARCHAR(10),
incoming SMALLINT(10),dept2 VARCHAR(6)
)default charset=utf8;

insert into emp VALUES ('1789','张三',35,'1980/1/1',4000,'101');
insert into emp VALUES ('1674','李四',32,'1983/4/1',3500,'101');
insert into emp VALUES ('1776','王五',24,'1990/7/1',2000,'101');
insert into emp VALUES ('1568','赵六',57,'1970/10/11',7500,'102');
insert into emp VALUES ('1564','荣七',64,'1963/10/11',8500,'102');
insert into emp VALUES ('1879','牛八',55,'1971/10/20',7300,'103');
insert into emp VALUES ('1880','老九',55,'1971/10/20',8000,'105');

drop table dept ; drop table emp ; select * from dept; select * from emp ;

三、讲解多表连接

(1)2个表或者更多的表中查询我们要的数据
(2)多表连接的关系
a、内连接
b、左连接
c、右连接
e、左独有数据
f、右独有数据
g、全外连接

比如: a 表:1,2,3 b 表:1,2,4
内连接:两个表相同部分,可以做桥接的部分
显示左边12和右边12关联 显示:12,不显示3,4
左连接:左表为主
显示左边1,2,3,右边12 关联123 4不显示
右连接:右表为主
显示右边1,2,4全部显示,左边12 关联124, 3不显示
左独有数据:显示3
右独有数据:显示4
全外连接:显示1,2,3,4

四、详解讲解连接的关系

1、内连接
(1)隐藏内连接 ,
格式:select * from 表1,表2 where 表1.关联字段=表2.关联字段
案例:select * from dept ,emp where dept.dept1=emp.dept2

(2)普通内连接 inner jion...on...
格式:select * from 表1 INNER JOIN 表2 on 表1.关联字段=表2.关联字
案例:select * from dept INNER JOIN emp on dept.dept1=emp.dept2

3、左连接 left join
格式:select * from 表1 left JOIN 表2 on 表1.关联字段=表2.关联字
案例:select * from dept left JOIN emp on dept.dept1=emp.dept2

4、右连接 right join
格式:select * from 表1 right JOIN 表2 on 表1.关联字段=表2.关联字
案例:select * from dept right JOIN emp on dept.dept1=emp.dept2

5、左独有数据
格式:select * from 表1 left JOIN 表2 on 表1.关联字段=表2.关联字 where 右表字段 is null
案例:select * from dept left JOIN emp on dept.dept1=emp.dept2 where name is null

6、右独有数据
格式:select * from 表1 right JOIN 表2 on 表1.关联字段=表2.关联字 where 左表字段 is null
案例:select * from dept right JOIN emp on dept.dept1=emp.dept2 where dept_name is null

7、全外连接:
==(1)内连接+左独有数据+右独有数据
案例:select * from dept INNER JOIN emp on dept.dept1=emp.dept2
UNION
select * from dept left JOIN emp on dept.dept1=emp.dept2
UNION
select * from dept right JOIN emp on dept.dept1=emp.dept2;
图片

==
(2)左连接+右独有数据
案例:select * from dept left JOIN emp on dept.dept1=emp.dept2
union
select * from dept right JOIN emp on dept.dept1=emp.dept2 where dept_name is null ;

(3)右连接+左独有数据
案例:select * from dept right JOIN emp on dept.dept1=emp.dept2
union
select * from dept left JOIN emp on dept.dept1=emp.dept2 where name is null

四、总结:

多表:
普通内连接:select * from 表1 inner join 表2 on 表 1.关联字段=表2.关联字段
隐藏内连接:select * from 表1,表2 where 表 1.关联字段=表2.关联字段
左连接:select * from 表1 left join 表2 on 表 1.关联字段=表2.关联字段
右连接 :select * from 表1 right join 表2 on 表 1.关联字段=表2.关联字段
左独有数据:select * from 表1 left join 表2 on 表 1.关联字段=表2.关联字where 表2中的字段 is null
右独有数据:select * from 表1 right join 表2 on 表 1.关联字段=表2.关联字
where 表1 中的字段 isnull
全外连接:union
(1)左独有+右独有+内连接
(2)左连接+右独有
(3)右连接+左独有

五、作业

1、It技术部入职员工的员工号

图片
2、财务部门的收入总和;

select sum(incoming) FROM dept a INNER JOIN emp b on a.dept1=b.dept2 where dept_name="财务"

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

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

相关文章

重磅 | Cloud Ace 推出 GenAIOps 服务:加速企业生成式 AI 商业落地

Cloud Ace 宣布推出 GenAIOps 服务,主要业务是面向国内外企业:提供与生成式 AI 运维支持相关的专业服务及运维服务 转售符合客户需求的高度创新产品及咨询服务该服务旨在以尖端技术赋能企业,为客户提供最优的 AI 解决方案,最大化生成式 AI 的商业价值与成果。联系我们—Clo…

SAP 中类的使用

一、事务代码:SE24 二、步骤 2.1、创建类:se24实例化类型public:该类可以在任何地方进行初始化Protected:只能在自身和或类的子类中进行初始化Private: 只能自身的类中进行初始化Abstract: 不可以创建实例。 2.2、创建属性 2.2.1、选择属性 在属性分页签中先按上图填写好属性…

字符串数组指针变量的地址关系

deque是一个指向字符串数组的指针变量(char **deque)。下面我用图示来介绍下,字符串数组的相关概念。 首先定义一个字符串数组指针 char **deque;然后再申请N个数组空间 deque = (char **)malloc(N * sizeof(char *));此时deque就是一个拥有N个字符串指针的数组。然后向第一…

牛客题解 | 斐波那契数列_1

牛客题库题解题目 题目链接 描述 此题是非常经典的入门题了。我记得第一次遇到此题是在课堂上,老师拿来讲“递归”的(哈哈哈)。同样的类型的题还有兔子繁殖的问题。大同小异。此题将用三个方法来解决,从入门到会做。 考察知识:递归,记忆化搜索,动态规划和动态规划的空间…

牛客题解 | 整数中1出现的次数(从1到n整数中1出现的次数)

牛客题库题解题目 题目链接 题目的主要信息:输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数举一反三: 学习完本题的思路你可以解决如下题目: JZ17. 打印从1到最大的n位数 JZ15. 二进制中1的个数 方法一:按位统计法(推荐使用) 思路: 数字都是由位数组成,某…

牛客题解 | 数组中重复的数字

牛客题库题解题目 题目链接 题目的主要信息:一个长度为\(n\)的数组中只有0到\(n-1\)的数字 需要找出其中任意一个重复出现的数字举一反三: 学习完本题的思路你可以解决如下题目: JZ56. 数组中只出现一次的两个数字 JZ50. 第一个只出现一次的字符 JZ75. 字符流中第一个不重复…

牛客题解 | 数据流中的中位数

牛客题库题解题目 题目链接 题目主要信息:寻找数据的中位数 数据量在不断输入增长举一反三: 学习完本题的思路你可以解决如下题目: BM46. 最小的k个数 方法一:插入排序法(推荐使用) 知识点:插入排序 插入排序是排序中的一种方式,一旦一个无序数组开始排序,它前面部分就…

牛客题解 | 数组中出现次数超过一半的数字

牛客题库题解题目 题目链接 题目主要信息:题目给出一个长度为n的数组,其中有一个数字出现次数超过了数组长度的一半,需要我们找出这个数字 输入数组非空,保证有解,这样就不用考虑特殊情况举一反三: 学习完本题的思路你可以解决如下题目: BM52. 数组中只出现一次的两个数字…

牛客题解 | 数值的整数次方

牛客题库题解题目 题目链接 题目的主要信息:求一个浮点数的整数次方 整数有正有负 不可以使用库函数,也不需要判断大数问题举一反三: 学习完本题的思路你可以解决如下题目: JZ83. 剪绳子(进阶版) 方法一:直接运算(推荐使用) 思路: 既然是求次方,那我们做不断累乘就可…

支付宝 IoT 设备入门宝典(下)设备经营篇

本篇会以支付宝 IoT 设备经营为中心,介绍常见的设备相关能力和问题解决方案,帮助商户利用设备进行运营动作,让设备更好的帮助自己上篇介绍了支付宝 IoT 设备管理,但除了这些基础功能外,商户还可以利用设备进行一些运营动作,让设备更好的帮助自己,本篇就会以设备经营为中…

国家能源集团某煤矿办公网与工业网整合运维

北京智和信通智和网管平台通过跨网络的整合监控运维能力,对某煤矿中的办公网和工业网进行管理。在一个平台内根据网络类型进行区分管理,统一监控。 国家能源集团某煤矿是国家能源集团在晋陕蒙区域的典型现代化井工煤矿,具有丰富的煤炭资源和先进的生产管理模式。 项目…

最长公共子序列LCS 笔记

最长公共子序列LCS 笔记 假设存在两个相同长度平凡的序列,我们希望找到它们最长的公共子序列,在没有其他特殊条件的情况下,利用动态规划计算的时间复杂度为 \(O(n^2)\) ,并且可以记录这个子序列 考虑两个指针作用于两个序列上,记 \(dp_{i,j}\) 表示为连续子序列 \([a_1,a_…