MySQL基础(八)多表查询

回顾之前学过的

SELECT ....
FROM ...
WHERE ...AND/OR/NOT
ORDER BY ... (ASC/DESC)
LIMIT ...

0.为什么需要多表的查询

1.多表查询如何实现?

1.1错误的方式(笛卡尔积的错误)

错误的原因:缺少了多表的连接条件

笛卡尔积乘积是一个数学运算,假设我有两个集合X和Y,那么X和Y的笛卡尔积就是X和Y的所有可能组合
** 举例:
(a,b,c)和(x,y)
ax,ay,bx,by,cx,cy**

SELECT  xxx,yyy
FROM XXX,YYY;

SQL92中,笛卡尔积也称为交叉连接,英文CROSS JOIN,在SQL99也是使用CROSS JOIN表示连接。它的作用就是可以把任意表进行连接,即使这两张表不相关。在MySQL中如下情况会出现笛卡尔积

1.2多表查询的正确方式:需求有连接条件

SELECT xxx,yyy
FROM XXX,YYY
#两个表的连接条件
WHERE xxx.`department_id`=yyy.department_id;

1.3案例分析与问题解决

  • 笛卡尔积的错误会在下面条件产生:
    省略多个表的连接条件(或关联条件)
    连接条件(或关联条件)无效
    所有表中的所有行互相连接
  • 为了避免笛卡尔积,可以在WHERE加入有效的连接条件
  • 加入连接条件后,查询语法:

建议:从sql优化的角度,建议多表查询时,每个字段前都指明其所在的表

如果给表起了别名,一旦在SELECT或WHERE中使用表名的话,则必须使用表的别名,而不能再使用表的原名,关系到SQL语句执行顺序
结论:如果有n个表实现多表的查询,则需要至少n-1个连接条件

2.多表查询分类

2.1等值连接 vs 非等值连接

2.2自连接 vs 非自连接

2.3内连接vs 外连接

  • 内连接:合并具有同一列的两个以上的表的行,结果集中不包含一个表与另一个表不匹配的行
  • 外连接:两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行,这种连接称为左(或右)外连接,没有匹配的行时,结果表中相应的列为空(NULL)
  • 如果左外连接,则连接条件中左边的表也称为主表,右边的表称为从表
  • 如果右外连接,则连接条件中右边的表也称为主表,左边的表称为从表
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Bruce-li__

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

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

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

打赏作者

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

抵扣说明:

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

余额充值