(1)它是在关系型数据库(关系型数据库也就是按照表格的形式增删改查数据)使用 join 关键字可以讲多张表的数据组合到一起,提供全面新的查询。简单来说就是将不同的表格数据进行组合,然后查询到自己想要的数据。
Inner Join:返回两个表中符合条件的记录。
Left Join:返回左表中所有记录以及右表中符合条件的记录。
Right Join:返回右表中所有记录以及左表中符合条件的记录。
Full Outer Join:返回左表和右表中所有记录。
其中 Inner Join 和 Left Join 是使用最广泛的。
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 连接,最终返回连接后的结果。
假设 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。
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、查询公司所有客户是否购买了某种产品,购买了的会匹配到数据,没有购买时没有购买数据的
原理和 left join 是一样的,只是把表放在左边右边的区别
MySQL join 的方式有好多,常用的也就是 inner left right 对于这三种连接有一个认识之后可以举一反三。本文主要从一个 inner join,left join 的 SQL 语句出发,解释了 SQL 语句的意义以及使用测试数据表进行的演示。