MySQL Join 关键字及其使用

1、为什么需要使用 join 关键字

(1)它是在关系型数据库(关系型数据库也就是按照表格的形式增删改查数据)使用 join 关键字可以讲多张表的数据组合到一起,提供全面新的查询。简单来说就是将不同的表格数据进行组合,然后查询到自己想要的数据。

join关键字的几种使用方式

Inner Join:返回两个表中符合条件的记录。

Left Join:返回左表中所有记录以及右表中符合条件的记录。

Right Join:返回右表中所有记录以及左表中符合条件的记录。

Full Outer Join:返回左表和右表中所有记录。

其中 Inner Join 和 Left Join 是使用最广泛的。

举例之前的示例数据表的假设

Inner Join

示例 SQL

String sql = "SELECT orders.order_id, customers.customer_name "
            + "FROM orders "
            + "INNER JOIN customers "
            + "ON orders.customer_id = customers.customer_id";
"SELECT orders.order_id, customers.customer_name ":表示查询语句中需要返回的列名,orders.order_id 和 customers.customer_name 分别代表两张表中的列名。

"FROM orders ":表示查询语句中需要查询的表名,即 orders 表。

"INNER JOIN customers ":表示 JOIN 操作的类型,这里使用的是 INNER JOIN,也就是内连接。customers 表是需要连接的另一张表。

"ON orders.customer_id = customers.customer_id":表示 JOIN 的条件,也就是 orders 表和 customers 表需要连接的字段。这里使用的是 ON 关键字,表示 orders 表中的 customer_id 列需要和 customers 表中的 customer_id 列进行连接。

综上所述,这段代码的作用是查询 orders 和 customers 两张表中的 order_id 和 customer_name 列,并通过 customer_id 列进行 INNER JOIN 连接,最终返回连接后的结果。

与 SQL 有关的表的示例创建以及结果演示

假设 orders 表中有以下数据:

order_id	customer_id
1			1001
2			1002
3			1003
4			1002
customers 表中有以下数据:

customer_id	customer_name
1001			Alice
1002			Bob
1003			Charlie
执行上述 inner join SQL 语句后,查询结果如下:

order_id	customer_name
1			Alice
2			Bob
3			Charlie
4			Bob

本质解析

orders , customers 两张表进行组合,选出来两行表各自中的 customer_id 列,根据 customer_id 相等这个条件选出来 order_id 对应的 customer_name。

left join

SELECT orders.order_id, customers.customer_name, orders.order_date
FROM orders
LEFT JOIN customers ON orders.customer_id = customers.customer_id;

这个语句将 orders 表和 customers 表进行 left join 操作。在 left join 中,左边的表是 orders 表,右边的表是 customers 表。left join 会返回左边表中所有记录,即使在右边表中没有匹配的记录。如果在右边表中没有匹配的记录,则返回 NULL 值。

测试数据

假设有两个表:

orders 表:

order_id	customer_id	order_date
1			101	2022-01-01
2			102	2022-01-02
3			103	2022-01-03
customers 表:

customer_id	customer_name	city
101			Alice			New York
102			Bob				San Diego
104			Charlie			Los Angeles
在 orders 表中,customer_id 是一个外键,关联到 customers 表中的 customer_id 字段。

这个语句将 orders 表和 customers 表进行 left join 操作。在 left join 中,左边的表是 orders 表,右边的表是 customers 表。left join 会返回左边表中所有记录,即使在右边表中没有匹配的记录。如果在右边表中没有匹配的记录,则返回 NULL 值。

上面的语句会返回以下结果:

order_id	customer_name	order_date
1			Alice			2022-01-01
2			Bob				2022-01-02
3			NULL			2022-01-03
从上面的结果可以看出,左边的表 orders 中的所有记录都被保留了下来,即使在右边的表 customers 中没有匹配的记录。在第三行的记录中,customers 表中没有匹配的记录,因此 customer_name 列显示为 NULL。

需要注意

左连接(left join)会显示出左表中所有的记录,同时匹配右表中与左表关联字段相同的记录,如果右表中没有匹配的记录,则显示 null 值。这样可以确保左表中的所有记录都会被显示出来,而不会因为右表中的匹配问题而丢失一些数据。

应用场景

1、职员表和打卡表查询今天的打卡情况可以使用左连接,打卡成功的会匹配到数据,没有打卡的员工是匹配不到数据的

2、查询公司所有客户是否购买了某种产品,购买了的会匹配到数据,没有购买时没有购买数据的

right join

原理和 left join 是一样的,只是把表放在左边右边的区别

小结

MySQL join 的方式有好多,常用的也就是 inner left right 对于这三种连接有一个认识之后可以举一反三。本文主要从一个 inner join,left join 的 SQL 语句出发,解释了 SQL 语句的意义以及使用测试数据表进行的演示。

你可能感兴趣的:(mysql,数据库,sql)