返回

MySQL 基础多表查询案例分析

后端

案例 1:简单连接

需求:查询所有客户及其对应的订单信息。

SELECT *
FROM customers
INNER JOIN orders
ON customers.customer_id = orders.customer_id;

案例 2:使用别名

需求:查询所有客户及其对应的订单信息,并使用别名简化列名。

SELECT c.customer_id, c.name AS customer_name, o.order_id, o.total_amount
FROM customers c
INNER JOIN orders o
ON c.customer_id = o.customer_id;

案例 3:使用 LEFT JOIN

需求:查询所有客户及其对应的订单信息,如果客户没有订单,则显示 NULL。

SELECT c.customer_id, c.name AS customer_name, o.order_id, o.total_amount
FROM customers c
LEFT JOIN orders o
ON c.customer_id = o.customer_id;

案例 4:使用 RIGHT JOIN

需求:查询所有订单及其对应的客户信息,如果订单没有客户,则显示 NULL。

SELECT c.customer_id, c.name AS customer_name, o.order_id, o.total_amount
FROM orders o
RIGHT JOIN customers c
ON c.customer_id = o.customer_id;

案例 5:使用 FULL JOIN

需求:查询所有客户和订单,即使客户没有订单或订单没有客户,也显示 NULL。

SELECT c.customer_id, c.name AS customer_name, o.order_id, o.total_amount
FROM customers c
FULL JOIN orders o
ON c.customer_id = o.customer_id;

案例 6:使用 WHERE 子句

需求:查询所有订单金额大于 100 美元的订单信息。

SELECT *
FROM orders
WHERE total_amount > 100;

案例 7:使用 GROUP BY 子句

需求:统计每个客户的订单数量。

SELECT c.customer_id, c.name AS customer_name, COUNT(o.order_id) AS order_count
FROM customers c
LEFT JOIN orders o
ON c.customer_id = o.customer_id
GROUP BY c.customer_id, c.name;

案例 8:使用 HAVING 子句

需求:统计订单金额大于 100 美元的客户的订单数量。

SELECT c.customer_id, c.name AS customer_name, COUNT(o.order_id) AS order_count
FROM customers c
LEFT JOIN orders o
ON c.customer_id = o.customer_id
GROUP BY c.customer_id, c.name
HAVING COUNT(o.order_id) > 1;

案例 9:使用 ORDER BY 子句

需求:按订单金额降序排列所有订单信息。

SELECT *
FROM orders
ORDER BY total_amount DESC;

案例 10:使用 LIMIT 子句

需求:查询前 10 个订单信息。

SELECT *
FROM orders
LIMIT 10;

案例 11:使用 OFFSET 子句

需求:查询从第 11 个订单开始的 10 个订单信息。

SELECT *
FROM orders
LIMIT 10 OFFSET 10;

案例 12:使用子查询

需求:查询所有订单金额大于子查询中平均订单金额的订单信息。

SELECT *
FROM orders
WHERE total_amount > (
    SELECT AVG(total_amount)
    FROM orders
);

总结

通过这 12 个案例分析,我们对 MySQL 中的多表查询有了更深入的理解和掌握。多表查询是数据查询中的一个重要部分,可以帮助我们从不同表中提取相关数据,从而获得更全面的信息。希望这些案例能够帮助您在实际开发中熟练应用多表查询,提高数据查询效率和准确性。