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

本文详细介绍了MySQL中的多表查询,包括联合查询(union、union all)、表之间的关系(一对一、一对多、多对多)以及各种连接查询(内连接、左外连接、右外连接、交叉连接)。对于联合查询,强调了字段数量一致性和数据类型的对应。在表关系部分,解释了一对一、一对多和多对多的概念,并指出多对多通常需要中间表来管理关系。在连接查询中,阐述了不同类型的连接方式及其应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

六、联合查询(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 on 表1.公共字段 = 表2.公共字段

3、右外连接(right join)

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

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

4、交叉连接 (cross join)

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值