15天学习MySQL计划-多表联查(基础篇)第四天

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: 15天学习MySQL计划-多表联查(基础篇)第四天

15天学习MySQL计划(多表联查)第四天

1.多表查询

1.1概述

指从多张表中查询数据

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


一对多(多对一):在多的一方设置外键,关联一的一方的主键

多对多:建立中间表,中间表包含两个外键,关联两张表的主键

一对一:用于表结构拆分,在其中任何一方设置外键(unique),关联另一方的主键

笛卡尔积:笛卡尔积乘积是指在数学中,两个集合A集合金和B集合的所有组合情况。(在多表查询时,需要消除无效的笛卡尔积)


1.2多表查询分类

  • 连接查询
  • 内连接:相当于查询A,B交集部分数据
  • 外连接:
  • 左外连接:查询左表所有数据,以及两张表交集部分数据
  • 右外连接:查询右表所有数据,以及两张表交集部分数据
  • 自连接:当前表与自身的连接查询,自连接必须使用表别名
  • 子查询

1.3内连接

  • 隐式内连接
select 字段列表 from 表1,表2 where 条件;
• 1
  • 显式内连接
select 字段列表 from 表1 [inner] join 表2 on 连接条件;

1.4连接查询-外连接

  • 左外连接
select 字段列表 from 表1 left [outer] join 表2 on 条件;
• 1

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

  • 右外连接
select 字段列表 from 表1 right [outer] jion 表2 on 条件;
• 1

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

1.5自连接

自连接查询语法:

select 字段列表 from 表A 表名A join 表A 别名B on 条件...;
• 1

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

对一张表起不同的别名,当作两张表处理即可

1.6联合查询

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

select 字段列表 from 表A
union [all]
select 字段列表 from 表B;

注意

  • 对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。
  • union all会将全部的数据之间合并在一起,union会对合并之后的数据去重。

1.7子查询

  • 概念:sql语句中嵌套select语句,称为嵌套查询,又称为子查询。
select * from 表名 where 字段 = (select 表名 from 字段);

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

根据子查询结构不同,分为:

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

列子查询(子查询结构为一列)

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

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

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

1.标量子查询

子查询返回的结果是单个值(数字,字符串,日期等),最简单的形式,这种子查询成为标量子查询

1.标量子查询
子查询返回的结果是单个值(数字,字符串,日期等),最简单的形式,这种子查询成为标量子查询
--获取张三的id号,通过id在第二章表中获取张三的年龄

2.列子查询

子查询返回的结果是一列(可以是多行),这种子查询称为列子查询

常用的操作符:in,not in,any,some,allimage.png例子:

--获取比研发部工资高的人员
1.获取研发部人员
select 名字 from tb1 where 部门='研发部';
2.获取人员的工资
select 工资 from tb2 where 名字=(select 名字 from tb1 where 部门='研发部');
3.获取比研发部工资高的员工
select 姓名,工资 from tb1 where 工资 > all (select 工资 from tb2 where 名字=(select 名字 from tb1 where 部门='研发部'));
--获取比研发部工资高的任意一个人员
1.获取研发部人员
select 名字 from tb1 where 部门='研发部';
2.获取人员的工资
select 工资 from tb2 where 名字=(select 名字 from tb1 where 部门='研发部');
3.获取比研发部工资高的员工
select 姓名,工资 from tb1 where 工资 > any (select 工资 from tb2 where 名字=(select 名字 from tb1 where 部门='研发部'));

3.行子查询

子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。

常用的操作符:=,<>,in,not in

例子:

--查询与张三的薪资及直属领导相同的员工信息
1.查询张三的薪资及直属领导
select 薪资,领导 from tb1 where name='张三';
2.查询与张三的薪资及直属领导相同的员工信息
select * from 表名 where (工资,领导) = (select 薪资,领导 from tb1 where name='张三');

4.表子查询

子查询返回的结果是多行多列,这种子查询称为表子查询

常用的操作符:in

例子:

--查询与张三和李四相同职位和薪资的员工信息
1.查询张三,李四的职位和薪资
select 职位,薪资 from tb1 where name='张三' or name='李四';
2.查询与张三和李四相同职位和薪资的员工信息
select * from tb2 where (职位,薪资) in (select 职位,薪资 from tb1 where name='张三' or name='李四');

张三,李四的职位和薪资

select 职位,薪资 from tb1 where name=‘张三’ or name=‘李四’;

2.查询与张三和李四相同职位和薪资的员工信息

select * from tb2 where (职位,薪资) in (select 职位,薪资 from tb1 where name=‘张三’ or name=‘李四’);

##  
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
12天前
|
SQL 关系型数据库 MySQL
关于MySQL数据库的学习指南总结
【6月更文挑战第17天】MySQL是流行的关系型DBMS,适合各种应用。学习要点包括安装配置、数据类型、SQL(如SELECT、INSERT)、关系模型、表设计、SQL查询(如WHERE、ORDER BY)、事务处理、用户管理、性能优化和高级技术如存储过程、触发器。了解ACID特性,使用索引和内存优化提升性能,通过备份恢复确保数据安全。不断学习新技术以提升技能。
43 3
|
16天前
|
关系型数据库 MySQL
MYSQL-多表操作-外键约束
MYSQL-多表操作-外键约束
|
1月前
|
SQL druid Java
java mysql druid mybatis-plus里使用多表删除出错的一种处理方式
java mysql druid mybatis-plus里使用多表删除出错的一种处理方式
24 0
|
3天前
|
SQL 关系型数据库 MySQL
MySQL基础(二)----DML学习
MySQL基础(二)----DML学习
7 3
|
5天前
|
关系型数据库 MySQL 数据库
关系型数据库MySQL开发要点之多表设计案例详解代码实现
关系型数据库MySQL开发要点之多表设计案例详解代码实现
15 2
|
14天前
|
SQL 关系型数据库 MySQL
MySQL周内训参照3、简单查询与多表联合复杂查询
MySQL周内训参照3、简单查询与多表联合复杂查询
20 1
|
16天前
|
Oracle 关系型数据库 MySQL
MYSQL-多表联合查询汇总
MYSQL-多表联合查询汇总
|
15天前
|
SQL 关系型数据库 MySQL
MySQL多表联合查询+分组+排序
MySQL多表联合查询+分组+排序
14 0
|
15天前
|
SQL 关系型数据库 MySQL
MySQL单表操作学习DDL_DML_DQL语句
MySQL单表操作学习DDL_DML_DQL语句
14 0
|
15天前
|
SQL 关系型数据库 MySQL
MySQL学习必备SQL_DDL_DML_DQL
MySQL学习必备SQL_DDL_DML_DQL
7 0