Mysql数据库的多表查询

130 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情

Hello,我是CoderBug,今天我们来讲讲Mysql数据库的查询.

1.MySQL支持多种方式进行多表查询。

其中,常用的有以下几种:

  1. 内连接:内连接又称为等值连接,是将两个表的记录按照相等的条件进行联结。
  2. 左连接:左连接又称为左外连接,是将左表中的所有记录与右表的记录按照相等的条件进行联结,即使右表中没有匹配的记录,左表中的记录也会被返回。
  3. 右连接:右连接又称为右外连接,是将右表中的所有记录与左表的记录按照相等的条件进行联结,即使左表中没有匹配的记录,右表中的记录也会被返回。
  4. 全连接(FULL JOIN):返回左表和右表中的所有行,即使没有匹配的行。
  5. 自然连接(NATURAL JOIN):返回两个表中存在匹配的行,并且只返回具有相同名称的列。

多表查询的案例

假设有两个表 customersorders,其中 customers 表包含客户信息,而 orders 表包含客户的订单信息。要获取所有订单的客户信息,您可以使用以下查询:

使用内连接(返回两个表中存在匹配的行。这是默认的连接类型。)进行查询:查询customers表和orders表中id相同的数据

SELECT customers.name, orders.order_date FROM customers INNER JOIN orders ON customers.id = orders.customer_id;

使用左连接进行查询(返回左表中的所有行,即使右表中没有匹配的行。),

SELECT customers.name, orders.order_date FROM customers LEFT JOIN orders ON customers.id = orders.customer_id;

使用右连接(返回右表中的所有行,即使左表中没有匹配的行。)进行查询:

SELECT customers.name, orders.order_date FROM customers RIGHT JOIN orders ON customers.id = orders.customer_id;

使用全连接(返回左表和右表中的所有行,即使没有匹配的行)进行查询

SELECT customers.name, orders.order_date FROM customers FULL JOIN orders ON customers.id = orders.customer_id;

使用自然连接(返回两个表中存在匹配的行,并且只返回具有相同名称的列。)

SELECT customers.name, orders.order_date FROM customers NATURAL JOIN orders;

自然连接是一种特殊的内连接,它返回两个表中存在匹配的行,并且只返回具有相同名称的列。如果两个表中存在多个相同名称的列,则自然连接会对这些列进行连接。

请注意,自然连接不需要使用 ON 子句,因为它会自动使用具有相同名称的列作为连接条件。但是,如果两个表中没有具有相同名称的列,则自然连接会返回空结果集。

如有帮助,麻烦点个赞,如有错误请指出,我是CoderBug,一个跟你一样追风的少年!