数据库_MySQL: mysql多表对应关系及多表联查

版权声明:本文为博主原创文章,转载请附上博文链接! https://blog.csdn.net/weixin_43851310/article/details/88174977

六、联合查询(union、union all)

语法:select 字段 from 表a union [选项] select 字段 from 表b;

选项:

all - 显示两个表中所有记录(a表5条,b表10条,其中2条重复=15)

distinct (默认) - 去掉两个表中相同记录(a表5条,b表10条,其中2条重复=13)

注意:

union两边的select语句的字段数必须一致

字段类型可以不一致,但是最终数据一一对应

男生按年龄的降序排列,女生按年龄的升序排列:

#设置编码
set names gbk;
#测试数据
create table u3 (name char(4),age tinyint,sex char(1));
insert into u3 value('tom',79,'男'),('jack',64,'男'),('王五',33,'女'),('赵6',12,'女');
#练习
(select * from u3 where sex = '男' order by age desc limit 999) 
union all 
(select * from u3 where sex = '女' order by age asc  limit 999);

联合查询排序SQL语句必须用小括号包起来并且加limit限制

七、表与表之间的关系

1、一对一(1:1)

一对一关系中,A 表中的一行只能匹配于 B 表中的一行

2、一对多

A 表中的一行可以匹配 B 表中的多行;

3、多对多

A表的一条记录对应另外一张B表的多条记录;同时B表中的一条记录也对应A表中的多条记录。如:一个老师教过多个学生,一个学生也被多个老师教过。

一般多对多都会有一个中间表,来存放多对多的关系

八、多表查询(连接查询)

将多个表按照一定的规则组合起来.(结果列增多)

1、内连接(inner join)

语法: select * from 表1 inner join 表2 o表1.公共字段 = 表2.公共字段

注意:
[表1.公共字段]用于声明字段属于哪个表
内连接查询两个表字段相同的数据

2、左外连接(left join)

以左边的数据为标准,右边的表如果有没有对应的记录用NULL表示

语法: select * from 表1 left join 表2 o表1.公共字段= 表2.公共字段

3、右外连接(right join)

以右边的数据为标准,左边的表如果有没有对应的记录用NULL表示

语法: select * from 表1 right join 表2 o表1.公共字段 = 表2.公共字段

4、交叉连接 (cross join)

语法: select * from 表1 cross join 表2 on 表1.公共字段 = 表2.公共字段

加条件:结果同内连接
不加条件:笛卡尔乘积

猜你喜欢

转载自blog.csdn.net/weixin_43851310/article/details/88174977