MySQL的多表联查和嵌套查询

1.数据准备

### 创建表与插入数据准备

```python
#建表
create table dep2(
id int,
name varchar(20)
);

create table emp2(
id int primary key auto_increment,
name varchar(20),
sex enum(‘male‘,‘female‘) not null default ‘male‘,
age int,
dep_id int
);

#插入数据
insert into dep2 values
(200,‘技术‘),
(201,‘人力资源‘),
(202,‘销售‘),
(203,‘运营‘);

insert into emp2(name,sex,age,dep_id) values
(‘tank‘,‘male‘,17,200),
(‘egon‘,‘female‘,48,201),
(‘kevin‘,‘male‘,38,201),
(‘jason‘,‘female‘,28,202),
(‘owen‘,‘male‘,18,200),
(‘sean‘,‘female‘,18,204);

# PS: 昨天讲了如何根据表关系对字段进行拆分,目的是为了更好的管理,表数据都存放在硬盘中,存不是目的,目的是为了取,所以我们将数据从硬盘读到内存中,接下来我们因应该将他们拼成一张表来查询更加合理;

# 注意: 将拆分的表,再拼接到一起进行查询, 可以通过一张表查另一张表的数据;
```

### 1、关联查询

```mysql
# 左表的一条记录与右表的一条记录都对应一遍称之为 --> "笛卡尔积"   PS: 百度科普
# 将所有的数据都对应了一遍,虽然不合理但是其中有合理的数据,现在我们需要做的就是找出合理的数据

2.

1、inner join
# 1、内连接:只取两张表有对应关系的记录
select * from emp2 inner join dep2 on emp2.dep_id = dep2.id;
select * from emp2 inner join dep2 on emp2.dep_id = dep2.id and dep2.name = ‘技术‘;

2、left join
# 2、左连接: 在内连接的基础上保留左表没有对应关系的记录
select * from emp2 left join dep2 on emp2.dep_id = dep2.id;

3、right join
# 3、右连接: 在内连接的基础上保留右表没有对应关系的记录
select * from emp2 right join dep2 on emp2.dep_id = dep2.id;

4、union
# 4、全连接:在内连接的基础上保留左、右面表没有对应关系的的记录
select * from emp2 left join dep2 on emp2.dep_id = dep2.id
union
select * from emp2 right join dep2 on emp2.dep_id = dep2.id;
```
### 2、子查询

```mysql
# 子查询就是将一个查询语句的结果用括号括起来,当做另一个查询语句的条件去用

# 1.查询部门是技术或者人力资源的员工信息
‘‘‘
先获取技术部和人力资源的id号,再去员工表里根据前面的id筛选出符合要求的员工信息;
‘‘‘
select * from emp2 where dep_id in (select id from dep2 where name=‘技术‘ or name=‘人力资源‘);

# 2.每个部门最新入职的员工 思路:先查每个部门最新入职的员工,再按部门对应上联表查询
# 查第一张emp表
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;

原文地址:https://www.cnblogs.com/bigbox/p/12037233.html

时间: 2024-08-01 11:44:52

MySQL的多表联查和嵌套查询的相关文章

mysql中部门表的自我嵌套查询

SELECT t1.id,t1.deptName,t2.id,t2.parentDept,t2.deptName,t3.id,t3.parentDept,t3.deptName,t4.id,t4.parentDept,t4.deptName,t5.id,t5.parentDept,t5.deptName,t6.id,t6.parentDept,t6.deptName,t7.id,t7.parentDept,t7.deptName FROM users_t_department t1LEFT JO

结合真实的测试实例,记录一次SQL语句辅助功能测试的场景(包含多表联查及子查询)

本文结合实例讲解一下 SQL 语句通过数据库辅助进行功能测试.希望阅读本文的小伙伴,能通过这个场景实例体会到SQL 语句在真实的功能测试时起到的作用 本次功能测试涉及的sql 知识点如下: 1 SELECT 查询 2 where 子句 3 count() 4 to_char() 5 group by 6 order by 7 两表联查(这里涉及left join) 8 子查询嵌套 实例中的需求文档 : 系统的测试界面:(不好意思,写文章的时候,想去截一个好一点的图片,测试环境无法登录了) 前提解

MSSQL 4表联查,子查询,函数统计,分组条件查询综合应用实例

1 SELECT 2 [UserName] 3 ,[Yhxm] 4 ,[Qx] 5 ,[Phone] 6 ,[Number] = COUNT([UserName]) 7 FROM 8 (SELECT 9 [UserName] = A.[username] 10 ,[Yhxm] = B.[xm] 11 ,[Qx] = D.[P_Power] 12 ,[Phone] = B.[dh] 13 ,[DayCount] = (SELECT COUNT(*) FROM [Caihuashun_FuJian_

【Mysql】利用内连接与嵌套查询实现多表查询,主键、外键的基本概念

虽然多表查询,在计算机的必须课,数据库,里面已经大讲特讲,但是这个难点很多老师都没有讲深讲透.跟你净扯一大堆,左连接右连接的东西,让人一头雾水.老师把所有多表查询的方法告诉你,但是到头来一种方法都没有掌握.其实只要记住一种就够了,学会多表查询,除了在你考数据库能够拿到很高分之外,到了实际应用,很多地方都用到多表查询.比如论坛工程中分析回帖发帖的关系,提供该用户发了什么帖子的功能.比如信息管理系统中,分析班级与学生.老师之间的关系,提供该班级中存在多少学生的查询功能.就需要用到多表查询,你总不能把

第二阶段 MySQL函数库 表的修改与查询

一.表结构的修改(DDL) 1.添加表结构的字段 a.ALTER TABLE 表名 ADD 字段名 数据类型 [字段属性|约束条件] [FIRST|AFTER 字段名]: b. 添加多个字段 ALTER TABLE 表名 ADD 字段名 数据类型 [字段属性|约束条件] [FIRST|AFTER 字段名], ADD 字段名 数据类型 [字段属性|约束条件] [FIRST|AFTER 字段名]...: 2 删除字段 ALTER TABLE 表名 DROP 字段名, DROP 字段名...; 3.修

sql:MySQL 6.7 表,视图,存储过程结构查询

#数据库MySQL 6.7 use sakila; #查询表名 show tables; # SELECT TABLE_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='sakila'; select column_name from information_schema.columns where table_schema='sakila' and table_name='actor'; #表结构 字段名, 类

mysql搜索多表多字段模糊查询

select parttime_job_business_assessments.*, u.nick_name, u.mobile, pj.name as job_name, b.name as business_name from `parttime_job_business_assessments` left join `users` as `u` on `u`.`id` = `parttime_job_business_assessments`.`user_id` left join `p

MySQL库和表的管理

MySQL数据库服务配置好后,系统会有4个默认的数据库. information_schema:虚拟对象,其对象都保存在内存中performance_schema:服务器性能指标库mysql:记录用户权限,帮助,日志等信息test:测试库 MySQL数据库及表的管理 1.查询所有数据库 mysql> show databases; 2.创建数据库 语法:CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name 默认指定编码格式为utf-8 mysql>

mysql SQL优化之嵌套查询-遁地龙卷风

(-1) 写在前面 这篇随笔的数据使用的是http://blog.csdn.net/friendan/article/details/8072668#comments里的,里面有一些常见的select查询练习题. 我使用的是mysql自带的命令行 (1)数据准配 student 表 +---------+-----------+------+------+--------------+ | sno     | Sname     | Ssex | Sage | Sdept        | +-