SQL 入门教程:使用带聚集函数的联结

目录汇总:SQL 零基础入门教程

聚集函数 所述,聚集函数用来汇总数据。虽然至今为止我们举的聚集函数的例子都只是从一个表中汇总数据,但这些函数也可以与联结一起使用。

我们来看个例子,要检索所有顾客及每个顾客所下的订单数,下面的代码使用 COUNT() 函数完成此工作:

输入▼

1
2
3
4
5
SELECT Customers.cust_id,
       COUNT(Orders.order_num) AS num_ord
FROM Customers
 INNER JOIN Orders ON Customers.cust_id = Orders.cust_id
GROUP BY Customers.cust_id;

输出▼

cust_id        num_ord
----------     --------
1000000001     2
1000000003     1
1000000004     1
1000000005     1

分析▼

这条 SELECT 语句 使用 INNER JOINCustomersOrders 表互相关联。GROUP BY子句 按顾客分组数据,因此,函数调用 COUNT(Orders.order_num) 对每个顾客的订单计数,将它作为 num_ord 返回。

聚集函数也可以方便地与其他联结一起使用。请看下面的例子:

输入▼

1
2
3
4
5
SELECT Customers.cust_id,
       COUNT(Orders.order_num) AS num_ord
FROM Customers
 LEFT OUTER JOIN Orders ON Customers.cust_id = Orders.cust_id
GROUP BY Customers.cust_id;

输出▼

cust_id        num_ord
----------     -------
1000000001     2
1000000002     0
1000000003     1
1000000004     1
1000000005     1

分析▼

这个例子使用左外部联结来包含所有顾客,甚至包含那些没有任何订单的顾客。结果中也包含了顾客 1000000002,他有 0 个订单,这和使用 INNER JOIN 时不同。

使用联结和联结条件

在总结讨论联结的这两个部分前,有必要汇总一下联结及其使用的要点。

  • 注意所使用的联结类型。一般我们使用内联结,但使用外联结也有效。
  • 关于确切的联结语法,应该查看具体的文档,看相应的 DBMS 支持何种语法(大多数 DBMS 使用这两课中描述的某种语法)。
  • 保证使用正确的联结条件(不管采用哪种语法),否则会返回不正确的数据。
  • 应该总是提供联结条件,否则会得出笛卡儿积。
  • 在一个联结中可以包含多个表,甚至可以对每个联结采用不同的联结类型。虽然这样做是合法的,一般也很有用,但应该在一起测试它们前分别测试每个联结。这会使故障排除更为简单。

请参阅

(完)

comments powered by Disqus