MySQL——多表查询

本文深入探讨了多表查询的概念,包括笛卡尔积、等值连接、非等值连接、自连接以及内外连接。通过实例解析了如何避免笛卡尔积并有效地在多个表之间进行数据检索。同时,介绍了左连接和右连接在外连接中的应用,帮助读者全面理解数据库查询的复杂性。
摘要由CSDN通过智能技术生成

多表查询

多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。

第一节:笛卡尔积

笛卡尔乘积是一个数学运算。假设我有两个集合 X 和 Y,那么 X 和 Y 的笛卡尔积就是 X 和 Y 的所有可能组合,也就是第一个对象来自于 X,第二个对象来自于 Y 的所有可能。组合的个数即为两个集合中元素个数的乘积数。

比如:a表中2两条数据,b表中两条数据,组合起来就是4条数据。

第二节:多表查询分类

2.1 等值连接

为了避免笛卡尔积, 可以在 WHERE 加入有效的连接条件。比如student表中stu_id(主键),student_info表中有stu_id(外键),语法如下:

Select  * from student,student_info where student.stu_id=student_info.stu_id

规则:

-- 多个条件用and去链接;

-- 区分重复的列名,可在列表前面加上表名;

-- 表可以加别名可以简化查询,如:from student a,student_info b where .....;

2.2 非等值连接

表与表之间没有相同项(或有相同但是不能用),但是表之间某个或某些项直接存在着一定的关系。

比如:学生分数等级表格式(grade):

等级(gra)

最低分(lowest)

最高分(highest)

A

90

100

B

70

89

C

60

69

D

0

59

语句:

Select  b.gra gra,a.name name from stu a,gra b where a.id=b.id and a.score between b.lowest and a.highest;

2.3 自连接

mysql有时在信息查询时需要进行对自身连接(自连接),所以我们需要为表定义别名。

比如:需要查询表中大于“张三的”分数;

步骤一:select  score  from stu where name=’张三’; #返回10

步骤二:select  * from where score>60;

内连接的方式:

Select b.* from stu a,stu b where a.name=’张三’ and a.score<b.score

2.4 内连接

关键词:inner join

组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集(阴影)部分。

语法:select * from info a inner join grade b on a.id=b.id;

2.4 外链接

2.4.1 左外链接 left join

全称是左外连接,是外连接中的一种。 左(外)连接,左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。

语法:select * from info a left join grade b on a.id=b.id;

2.4.2 右连接 right join

全称是右外连接,是外连接中的一种。与左(外)连接相反,右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。

语法:select * from info a right join grade b on a.id=b.id;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Southern Wind

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值