MySQL多表查询

本文将深入讲解多表查询中的笛卡尔积现象,介绍内连接(包括隐式和显示)如何消除多余结果,以及左外连接、右外连接的区别。此外,子查询的三种形式及其在查询条件中的应用也将逐一剖析。无论你是初学者还是进阶开发者,都能在这找到连接查询的精髓和子查询的巧妙用法。

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

多表查询

多表查询会产生笛卡尔积现象
笛卡尔积:
把多张表放在一起,同时去查询,会得到一个结果(左表的每条记录和右表的每条记录会组合起来),而这结果并不是我们想要的数据,这个结果称为笛卡尔积。
内,外连接可以消除笛卡尔积

多表查询分类:

  • 表连接查询
  • 子查询
    表连接查询又分为内连接和外连接

下面详细介绍一下这几种查询方式~

表连接查询

内连接:

内连接查询的结果是两表的公共部分

  • 隐式内连接 :没有JOIN关键字,条件使用WHERE
SELECT 列名,列名..FROM1,2 WHERE 从表.外键=主表.主键;   
  • 显示内连接:使用INNER JOIN ... ON语句, 可以省略INNER
SELECT 列名,列名..FROM1 INNER JOIN2 ON 从表.外键=主表.主键;
外连接:
  • 左外连接: 以左侧的表为主,如果左侧有数据,右侧没有对应的数据,仍然会把左侧数据进行显示。
SELECT * FROM1 LEFT OUTER JOIN2 ON 从表.外键=主表.主键;
-- 表1看作为左表,表2看做为右表
  • 右外连接:用右边表去左边表查询对应记录,不管是否找到,右边表全部记录都将显示。
SELECT * FROM1 RIGHT OUTER JOIN2 ON 从表.外键=主表.主键;
-- 表1为左表,表2为右表

OUTER可以省略
左外连接交换两表位置,就是右外连接

子查询

一条查询语句作为另一条查询语句的一部分

子查询的三种情况:
  • 子查询的结果是单行单列,通常作为父查询的的条件
SELECT 字段名 FROM 表名 WHERE 字段=(子查询);
  • 子查询的结果是多行单列,结果集类似数组,在WHERE后面作为条件,使用IN关键字
SELECT 字段名 FROM 表名 WHERE 字段 IN (子查询);

IN用法:IN(值1,值2,…) 只要满足一个即可,或者的关系

  • 子查询的结果是多行多列,在FROM后面作为表,
SELECT 查询字段 FROM (子查询) 表别名 WHERE 条件;

注意:子查询作为表需要取别名,使用as,可以省略。否则无法访问这个表中的字段

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值