MySQL 多表查询
1- union 关联查询
用于关联两个表查询结果集
-
两个表查询的结果集中的 字段个数必须一样,字段类型不要求
-
两个表的查询 where 条件需要分别写上才生效
-
union 后默认省略了 distinct,默认不显示重复数据,显示重复数据需要写成
union all
-
union 执行级别比 order by 级别要低,所以排序只需要写在union后面的字句后
-
如果两个表需要实现不同的排序规则,需要将 union 前后两个子句用()包裹,且每个子句 使用 order by 排序后都需要使用 limit 关键字
-- t01,t02 为两张表表名
-- 语法 : select 字段1,..字段n from 表1 [where 条件] union [distinct/all] select 字段1,..字段n from 表2 [where 条件];
-- 将表一结果 按照年龄倒序,表二结果按照年龄正序 limit 后面跟的数据比需要展示的数字大即可
(select `name`,`age` from `t01` order by limit 3306)
union all
(select `score`,`tel` from `t02` order by limit 3306);
2-连接查询
2.1-内连接
-- 语法 : select 字段名1,...字段名n from 表1 [inner] join 表2 on 条件;
select `t01`.`name`,`t01`.`age`,`t02`.`score` from `t01` inner join `t02` on `t01`.`id` = `t02`.`stuid`;
- 内连接是严格连接
- 内连接的 inner 关键字可以不写
- 内连接条件的 关键字 on 可以用where 替代(不推荐)
2.2-外连接
-
左外连接
-- 语法:select 字段名1,...字段名n from 表1 left join 表2 on 条件; select `t01`.`name`,`t01`.`age`,`t02`.`score` from `t01` left join `t02` on `t01`.`id` = `t02`.`stuid`;
左外连接以左边的表作为主表,主表的内容会展示,副表匹配不上的字段信息用null表示
-
右外连接
-- 语法:select 字段名1,...字段名n from 表1 right join 表2 on 条件;
select `t01`.`name`,`t01`.`age`,`t02`.`score` from `t01` right join `t02` on `t01`.`id` = `t02`.`stuid`;
右外连接以右边的表作为主表,主表的内容会展示,副表匹配不上的字段信息用null表示
2.3 - 自然连接
-- 语法:select 字段名1,...字段名n from 表1 natural join 表2;
-- 自然连接,会自动选择字段名和值一样的 字段作为连接条件
-- 对数据表的结构要求极高,实际开发中几乎不使用