mysql 多表查询or_MySQL 多表查询
前期准备
#建表
create table dep(
id int,
name varchar(20)
);
create table emp(
id int primary key auto_increment,
name varchar(20),
sex enum('male','female') not null default 'male',
age int,
dep_id int
);
#插入数据
insert into dep values
(200,'技术'),
(201,'人力资源'),
(202,'销售'),
(203,'运营');
insert into emp(name,sex,age,dep_id) values
('jason','male',18,200),
('egon','female',48,201),
('kevin','male',38,201),
('nick','female',28,202),
('owen','male',18,200),
('jerry','female',18,204)
;
按照之前的思路,如果我们想要查表是不是应该这样写,那我们看下结果。
select * from emp,dep;
mysql> select * from emp,dep;
+----+-------+--------+------+--------+------+--------------+
| id | name | sex | age | dep_id | id | name |
+----+-------+--------+------+--------+------+--------------+
| 1 | jason | male | 18 | 200 | 200 | 技术 |
| 1 | jason | male | 18 | 200 | 201 | 人力资源 |
| 1 | jason | male | 18 | 200 | 202 | 销售 |
| 1 | jason | male | 18 | 200 | 203 | 运营 |
| 2 | egon | female | 48 | 201 | 200 | 技术 |
| 2 | egon | female | 48 | 201 | 201 | 人力资源 |
左表一条记录与右表所有记录都对应一遍叫笛卡尔积,将所有的数据都对应了一遍,虽然不合理但是其中有合理的数据,现在我们需要做的就是找出合理的数据。
内连接
内连接:只取两张表有对应关系的记录:只取两张表有对应关系的记录 关键字inner join
查询员工及所在部门的信息
select * from emp inner join dep on emp.dep_id = dep.id;
查询部门为技术部的员工及部门信息
select * from emp inner join dep on emp.dep_id = dep.id where dep.name = "技术";
左连接
在内连接的基础上保留左表没有对应关系的记录
select * from emp left join dep on emp.dep_id = dep.id;
+----+-------+--------+------+--------+------+--------------+
| id | name | sex | age | dep_id | id | name |
+----+-------+--------+------+--------+------+--------------+
| 1 | jason | male | 18 | 200 | 200 | 技术 |
| 5 | owen | male | 18 | 200 | 200 | 技术 |
| 2 | egon | female | 48 | 201 | 201 | 人力资源 |
| 3 | kevin | male | 38 | 201 | 201 | 人力资源 |
| 4 | nick | female | 28 | 202 | 202 | 销售 |
| 6 | jerry | female | 18 | 204 | NULL | NULL |
+----+-------+--------+------+--------+------+--------------+
右连接
在内连接的基础上保留右表没有对应关系的记录
select * from emp right join dep on emp.dep_id = dep.id;
+------+-------+--------+------+--------+------+--------------+
| id | name | sex | age | dep_id | id | name |
+------+-------+--------+------+--------+------+--------------+
| 1 | jason | male | 18 | 200 | 200 | 技术 |
| 2 | egon | female | 48 | 201 | 201 | 人力资源 |
| 3 | kevin | male | 38 | 201 | 201 | 人力资源 |
| 4 | nick | female | 28 | 202 | 202 | 销售 |
| 5 | owen | male | 18 | 200 | 200 | 技术 |
| NULL | NULL | NULL | NULL | NULL | 203 | 运营 |
+------+-------+--------+------+--------+------+--------------+
全连接
在内连接的基础上保留左、右面表没有对应关系的的记录
select * from emp left join dep on emp.dep_id = dep.id
union
select * from emp right join dep on emp.dep_id = dep.id;
+------+-------+--------+------+--------+------+--------------+
| id | name | sex | age | dep_id | id | name |
+------+-------+--------+------+--------+------+--------------+
| 1 | jason | male | 18 | 200 | 200 | 技术 |
| 5 | owen | male | 18 | 200 | 200 | 技术 |
| 2 | egon | female | 48 | 201 | 201 | 人力资源 |
| 3 | kevin | male | 38 | 201 | 201 | 人力资源 |
| 4 | nick | female | 28 | 202 | 202 | 销售 |
| 6 | jerry | female | 18 | 204 | NULL | NULL |
| NULL | NULL | NULL | NULL | NULL | 203 | 运营 |
+------+-------+--------+------+--------+------+--------------+
子查询
就是将一个查询语句的结果用括号括起来当作另外一个查询语句的条件去用
查询部门是技术或者人力资源的员工信息
思路:先获取技术部和人力资源部的id号,再去员工表里面根据前面的id筛选出符合要求的员工信息
select * from emp where dep_id in (select id from dep where name = "技术" or name = "人力资源");
查询每个部门最新入职的员工
思路:先查每个部门最新入职的员工,再按部门对应上联表查询
select t1.id,t1.name,t1.hire_date,t1.post,t2.* from emp as t1
inner join
(select post,max(hire_date) as max_date from emp group by post) as t2
on t1.post = t2.post
where t1.hire_date = t2.max_date
;
记住一个规律,表的查询结果可以作为其他表的查询条件,也可以通过其别名的方式把它作为一张虚拟表去跟其他表做关联查询
mysql 多表查询or_MySQL 多表查询相关推荐
- mysql模糊查询 or_mysql的模糊查询
mysql模糊查询like/REGEXP (1)like / not like MySql的like语句中的通配符:百分号.下划线和escape %:表示任意个或多个字符.可匹配任意类型和长度的字符. ...
- mysql 快捷查询数据库各表占用空间,mysql查看索引占用空间,mysql查看数据占用空间
先贴一张图! 第一步,"很重要" 在mysql中,有一个创建之初自带的库information_schema,这个库中包含着数据库相关信息,查询数据占用空间就是使用该库,所以首先进 ...
- 使用python对学生表的查询_多表组合查询——Python操作Mysql数据库
前面我们介绍了单张表的查询,包括模糊查询.分组.排序.各种筛选条件等等操作,在实际应用中,查询的数据往往不止局限在一张表里,通常需要多张表在一起进行组合查询,今天我们将会对Mysql当中的多张有关联的 ...
- 100G内存下,MySQL查询200G大表会OOM么?
文章来源:https://sourl.cn/vwDNzn 我的主机内存只有100G,现在要全表扫描一个200G大表,会不会把DB主机的内存用光? 逻辑备份时,可不就是做整库扫描吗?若这样就会把内存吃光 ...
- desc mysql 连表查询_Mysql连表查询
mysql的连接 语法: select 查询列表 rom 表1 别名 连接类型 join 表2 别名 on连接条件 where 筛选条件 group by 分组 having 筛选条件 order b ...
- golang mysql多表查询_MySQL多表查询
一 多表连接查询 #重点:外链接语法 SELECT 字段列表 FROM 表1 INNER|LEFT|RIGHT JOIN 表2 ON 表1.字段= 表2.字段; #建表 create table de ...
- mysql数据库优化课程---16、mysql慢查询和优化表空间
mysql数据库优化课程---16.mysql慢查询和优化表空间 一.总结 一句话总结: a.慢查询的话找到存储慢查询的那个日志文件 b.优化表空间的话可以用optimize table sales; ...
- Linux命令:MySQL系列之五--SELECT单表查询、多表查询升级及删除,插入
SELECT:查询 SELECT select-list FROM tb WHERE qualification 根据标准qualification查找对应的行 查询语句类型: qualifica ...
- mysql union all 别名_MySQL Union合并查询数据及表别名、字段别名用法分析
本文实例讲述了MySQL Union合并查询数据及表别名.字段别名用法.分享给大家供大家参考,具体如下: union关键字 SELECT s_id, f_name, f_price FROM frui ...
最新文章
- 转Java转iOS-第一个项目总结(2):遇到问题和解决方案
- 使用 C# 开发智能手机软件:推箱子(二十)
- OS- -文件系统(二)
- oracle杀死进程时权限不足_如何解决Oracle数据库在迁移过程中的权限不足问题
- android Linkify的用法
- python 学习笔记7(装饰器)
- 软件测试高频面试题真实分享/网上银行转账是怎么测的,设计一下测试用例。
- 十字链表表示矩阵c语言,十字链表法,十字链表压缩存储稀疏矩阵详解
- npm 下载为什么很慢?解决方案来了
- DELMIA人机工程 ---- 二次开发 第一篇:开发指南
- html创建站点文件夹,Dreamweaver站点中新建文件夹和修改/删除/移动文件的操作方法...
- python输出你好_python输出你好
- 阿里云ECS服务器组内网
- 这世上倒底有没有神仙——说“Excel不是数据库,是不是犯了白马非马论的错误??...
- linux系统安全与日志分析
- Mysql索引类型 normal, unique, full text的区别
- 模型选择——子集选择法(Subset Selection)
- 从智能合约的演进看 Move 的架构设计
- Trx-address和交易的address
- 【题目】用下面的无穷级数公式计算π的值:π=4 - 4/3 +4/5 - 4/7 + 4/9 - 4/11+...打印一张表,分别显示前1项到前100项时计算出的π的近似值。
热门文章
- 微信悄然上线了十款新表情,你注意到了吗?
- php函数多个参数_php中,用函数,如果有很多个参数,只使用最后一个参数,有什么优雅的写法?...
- suse 安装mysql5.6_SuSE11安装MySQL5.6.40:RPM安装方式
- error 1309 mysql_MySQ登录提示ERROR 1045 (28000)错误如何解决
- cudart64_101.dll not found
- 突破对银河系的传统认知 大量超高能宇宙加速器被发现
- 加权边界框融合(WBF)
- Transformer LambdaNetworks
- 提升注意力模块性能dcanet
- pix2pix, pix2pixHD, vid2vid