MySQL学习-多表查询(五)深入详解表连接技术
2023-11-18 06:21:43
MySQL多表查询是数据库编程中一项必备技能,它可以帮助您从多个表中提取数据并组合成有意义的信息。在这一系列文章中,我们将深入探讨MySQL多表查询技术,从基本概念到高级应用,循序渐进,带您领略多表查询的魅力。
在本文中,我们将重点关注表连接。表连接是将两个或多个表中的数据组合在一起的常用方法。MySQL支持多种类型的表连接,包括INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN。
INNER JOIN
INNER JOIN是最常用的表连接类型。它将两个表中的数据连接起来,仅选择两个表中都存在的行。例如,我们有两个表,customers
表存储客户信息,orders
表存储订单信息。如果我们想要找出购买了特定产品的客户,我们可以使用INNER JOIN来连接这两个表。
SELECT *
FROM customers
INNER JOIN orders
ON customers.customer_id = orders.customer_id
WHERE orders.product_id = 12345;
LEFT JOIN
LEFT JOIN将两个表中的数据连接起来,选择左表中的所有行,以及右表中与左表匹配的行。如果右表中没有与左表匹配的行,则右表中的相应列将显示为NULL。例如,我们有两个表,customers
表存储客户信息,orders
表存储订单信息。如果我们想要找出所有客户,即使他们没有下过订单,我们可以使用LEFT JOIN来连接这两个表。
SELECT *
FROM customers
LEFT JOIN orders
ON customers.customer_id = orders.customer_id;
RIGHT JOIN
RIGHT JOIN将两个表中的数据连接起来,选择右表中的所有行,以及左表中与右表匹配的行。如果左表中没有与右表匹配的行,则左表中的相应列将显示为NULL。例如,我们有两个表,customers
表存储客户信息,orders
表存储订单信息。如果我们想要找出所有订单,即使它们没有对应的客户,我们可以使用RIGHT JOIN来连接这两个表。
SELECT *
FROM orders
RIGHT JOIN customers
ON customers.customer_id = orders.customer_id;
FULL JOIN
FULL JOIN将两个表中的数据连接起来,选择两个表中的所有行,即使它们没有匹配的行。如果一个表中没有与另一个表匹配的行,则相应列将显示为NULL。例如,我们有两个表,customers
表存储客户信息,orders
表存储订单信息。如果我们想要找出所有客户和所有订单,即使它们没有匹配的行,我们可以使用FULL JOIN来连接这两个表。
SELECT *
FROM customers
FULL JOIN orders
ON customers.customer_id = orders.customer_id;
UNION
UNION操作符将两个或多个表的行组合在一起,形成一个新的结果集。UNION操作符只选择不重复的行。例如,我们有两个表,customers
表存储客户信息,orders
表存储订单信息。如果我们想要找出所有客户和所有订单,我们可以使用UNION操作符来组合这两个表。
SELECT *
FROM customers
UNION
SELECT *
FROM orders;
UNION ALL
UNION ALL操作符将两个或多个表的行组合在一起,形成一个新的结果集。UNION ALL操作符选择所有行,包括重复的行。例如,我们有两个表,customers
表存储客户信息,orders
表存储订单信息。如果我们想要找出所有客户和所有订单,包括重复的行,我们可以使用UNION ALL操作符来组合这两个表。
SELECT *
FROM customers
UNION ALL
SELECT *
FROM orders;
EXCEPT
EXCEPT操作符从一个表中选择不包含在另一个表中的行。例如,我们有两个表,customers
表存储客户信息,orders
表存储订单信息。如果我们想要找出没有下过订单的客户,我们可以使用EXCEPT操作符来从customers
表中选择不包含在orders
表中的行。
SELECT *
FROM customers
EXCEPT
SELECT customer_id
FROM orders;
INTERSECT
INTERSECT操作符从两个表中选择同时包含在两个表中的行。例如,我们有两个表,customers
表存储客户信息,orders
表存储订单信息。如果我们想要找出既是客户又是订单的所有行,我们可以使用INTERSECT操作符来从customers
表和orders
表中选择同时包含在两个表中的行。
SELECT *
FROM customers
INTERSECT
SELECT customer_id
FROM orders;
通过本文的学习,您应该已经掌握了MySQL多表查询的基本技术。在下一篇文章中,我们将继续探讨MySQL多表查询的更多高级应用技巧。敬请期待!