mysql基础之多表查询
概述
项目开发中,在进行数据表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间的相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:
- 一对多(多对一)
- 多对多
- 一对一(拆分大表,做简化的小表,以提升操作效率)
注:mysql关系型数据库,所以肯定会产生关系咯
DCL语法建立对应关系(默认建立关联)
//查询
select * from 表1,表2
! 会产生笛卡尔积(是你想的那个数学家呢)
表示为X×Y(人话就是产生很多,表现为根据表1遍历表2)
解决方法:
select * from 表1,表2 where 表1关联值 = 表2关联值
—需要满足DCL关联条件
- 多表查询分类
- 1.连接查询
- 内连接:相当于查询A,B交集部分数据(中间那坨)
- 内连接:相当于查询A,B交集部分数据(中间那坨)
- 1.连接查询
//隐式内连接[短](上面那个一样的)
SELECT 字段列表 FROM 表1,表2 WHERE 条件 ...;
//显式内连接 [通常连接更高效,看到更清晰]
SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件...;
注:建议在编写MySQL查询时使用显示连接,以提高性能并增强可读性和可维护性。(别名改了就只能用这个咯)
-
外连接:
+ 左外连接:查询左表所有数据,以及两表交集部分数据(就上图片左边A全)SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件...; ```
-
右外连接: 查询右表所有数据以及两张表交集部分数据(就上图片右边B全)
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON
条件 ...;
- 自连接: 当前表与自身的连接查询,自连接必须使用表别名(重)可内[查必须有的]外[查所有]
SELECT 字段列表 FROM 表1 JOIN 表1 ON 条件 ...;
条件 ...;
- 子查询
概念:SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询.
SELECT * FROM t1 WHERE column1 =(SELECT column1 FROM t2);
- 联合查询-union,union all
对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集.
SELECT 字段列表 FROM 表A ...
UNION[ALL]
SELECT 字段列表 FROM 表B ...;
注意:UNION 去重返回
UNION ALL 直接返回
对于联合查询多张表的字段列数必须保持一致,字段类型也需要一致
- 子查询外部的语句可以是INSERT /UPDATE/DELETE/SELECT 的任何一个.
- 标量子查询
SELECT * FROM 表 WHERE 值 = (嵌套查询)
- 列子查询(就数据是列)
子查询返回的结果是一列(可以是多列),这种子查询称为列子查询
常用操作符:IN,NOT IN ,ANY,SOME,ALL
SELECT * FROM 表 WHERE 字符列表 in(嵌套)
相当于多列( 空格 )表信息查询
-行子查询(就数据是行)
子查询返回的结果是一行(可以是多行),这种子查询称为行子查询
常用操作符:=,<>,IN,NOT IN
SELECT * FROM 表 WHERE (字符列表1,字符列表2) =(嵌套)
相当于多行( 空格 )表信息查询