MySQL:JOIN 多表查询

多表查询

在关系型数据库中,表与表之间是有联系的,它们通过 外键 联系在一起,所以在实际应用中,经常使用多表查询。多表查询就是同时查询两个或两个以上的表

MySQL多表查询是数据库操作中非常重要的一部分,它允许你从多个相关联的表中检索信息。这种查询通常通过 JOIN 语句来实现,包括 INNER JOINLEFT JOINRIGHT JOINFULL OUTER JOIN(MySQL中通过 UNION JOIN 模拟。全连接,返回左右两个表中的所有记录,无论是否满足连接条件)等。

ON

在 SQL 查询中,ON 是用来指定连接条件的子句。它用于在连接两个表时,明确指定参与连接的列或表达式之间的关系,以确定哪些记录应该被匹配和返回。

连接通常需要基于某些共享的列或条件来进行,而ON子句则用于指定这些连接条件

INNER JOIN table_2
ON join_condition;

join_condition 可以是以下类型之一:

  • 使用相等运算符 =表1.连接列 = 表2.连接列
  • 使用其他比较运算符:如 表1.连接列 < 表2.连接列

连接列可以是两个表中的任何列,它们应该具有相似的数据类型。

USING

在 SQL 查询中,USING 是一种指定连接条件的简洁方式,特别适用于连接具有相同列名的两个表。它可以明确指定连接列,而无需在连接条件中重复列出表名。

INNER JOIN table_2
USING column_name;

连接列应该在两个表中都存在,并且具有相同的名称和数据类型。使用 USING 的主要优点是省略了重复的列名,并且使连接条件更加简洁和清晰。

但是需要注意的是,USING 只能用于内连接和自然连接,并且它不支持其他类型的连接(如左连接、右连接或完全外连接)。

JOIN

JOIN 是在 SQL 查询中用于连接两个或多个表的操作。通过 JOIN 操作,我们可以将多个表中的数据按照指定的连接条件进行关联,并获取到相关联的数据。

SELECT column_list
FROM table_1
JOIN table_2 ON join_condition;

通过 JOIN 操作,我们可以根据需要将多个表中的数据进行组合或筛选,实现复杂的数据查询和分析

内连接 INNER JOIN

INNER JOIN 是一种连接两个表的方式,用于将两个表的数据进行关联查询,它返回两个表中满足连接条件的匹配记录。

SELECT column_list  FROM table_1
INNER JOIN table_2 ON join_condition;
  • 内连接主要通过设置连接条件的方式,来移除查询结果中某些数据行的交叉连接简单来说,就是利用条件表达式来消除交叉连接的某些数据行。

  • 如果没有连接条件INNER JOINCROSS JOIN 在语法上是等同的,两者可以互换

  • 当对多个表进行查询时,要在 SELECT 语句后面指定字段是来源于哪一张表,可以为表指定别名,alias.column 访问目标字段。

  • INNER JOIN 也可以使用 WHERE 子句指定连接条件,但在某些时候会影响查询性能。

**![[INNER JOIN diagram.png]]**

内连接的结果是两个表中连接列值匹配的记录组合。这样的组合形成一个新的临时表,结果集中包含了两个表中符合连接条件的记录。

内连接的优点是只返回匹配的记录,可以有效地过滤不需要的数据。

然而,需要注意的是,如果连接条件不正确或者连接列中有 NULL 值,可能会导致结果集不完整

外连接 OUTER JOIN

外连接是 SQL 中的一种表连接操作,它能够返回连接条件匹配的记录,同时还可以返回未匹配到的记录

外连接会先将连接的表分为基表和参考表,再以基表为依据返回满足和不满足条件的记录

外连接分为左外连接 LEFT OUTER JOIN、右外连接 RIGHT OUTER JOIN 和全外连接 FULL OUTER JOIN (MySQL不支持)

LEFT JOIN

LEFT JOIN(左外连接)是 SQL 中的一种表连接操作,是一种单向连接,它返回左表中的所有记录,以及满足连接条件的右表中的匹配记录。如果右表中没有匹配记录,则返回 NULL 值补足。

SELECT column_list
FROM left_table
LEFT [OUTER] JOIN right_table ON join_condition;

左外连接是以左表为基准,右表为参考表,保留左表中的所有记录,包括与右表匹配的记录

LEFT JOIN 常用于 需要获取左表中所有记录以及与之相关联的右表数据 的情况。

RIGHT JOIN

RIGHT JOIN(右外连接)是 SQL 中的一种表连接操作,是一种单向连接,是 LEFT JOIN 的反向连接,它返回右表中的所有记录,以及满足连接条件的左表中的匹配记录。如果左表中没有匹配记录,则返回 NULL 值补足。

SELECT column_list
FROM left_table
RIGHT [OUTER] JOIN right_table ON join_condition;

右外连接是以右表为基准,以左表为参考表,保留右表中的所有记录,包括与左表匹配的记录

RIGHT JOIN 常用于 需要获取右表中所有记录以及与之相关联的左表数据 的情况

交叉连接 CROSS JOIN

CROSS JOIN(交叉连接)是 SQL 中的一种表连接操作,它返回两个表的笛卡尔积,即将左表的每一行与右表的每一行进行组合,返回的结果集将包含左表和右表中所有记录之间的所有可能的组合。

若 table_1 有 N 行,table_2 有 M 行,则交叉连接返回的结果为 N*M 行,当表中的数据较多时,得到的运行结果会非常长,而且得到的运行结果也没太大的意义。所以,通过交叉连接的方式进行多表查询的这种方法并不常用。

不同于内连接和外连接 CROSS JOIN 操作不需要指定任何连接条件,它会返回所有可能的组合。

SELECT column_list
FROM table_1
CROSS JOIN table_2 [WHERE ];

多个表交叉连接时,在 FROM 后连续使用 CROSS JOIN 或 , 即可

SELECT column_list
FROM table_1, table_2, ..., table_n

'''官方建议语法'''
SELECT column_list
FROM table_1
CROSS JOIN table_2
...
CROSS JOIN table_n

Self Join

自连接(Self Join)是指在同一表中使用表与自身进行连接操作。它是一种常见的数据库查询技术,用于解决需要比较同一表中不同行的情况。自连接通常涉及使用别名来引用同一表的不同实例

若不使用别名来指代同一个字段,可能会引起错误。

自连接可用于处理具有层次结构、网络结构、关联关系的数据,可以有不同的用途和复杂度,取决于具体的业务需求和数据结构。

  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值