首页 > 试题广场 >

有两张数据表存在于SQLServer中定义如下: CREA

[单选题]
有两张数据表存在于SQLServer中定义如下:
CREATE TABLE [dbo].[Customers](
 [customerid] [char](5) NOT NULL PRIMARY KEY ,
 [city] [varchar](10) NOT NULL,
)
CREATE TABLE [dbo].[Orders](
 [orderid] [int] NOT NULL PRIMARY KEY,
 [customerid] [char](5) NULL references
Customers(customerid),
)
以下的SQL-查询来自上海且订单少于3个的客户以及他们的订单数,查询结果按订单数从小到大的顺序排列

select c.customerid,count(o.orderid)as numorders

② from [Customers] as C  left outer join [Orders] as O on C.customerid=O.customerid

③ where C.city='Shanghai'

④ group by c.customerid

⑤ having count(O.orderid)<3

⑥ order by numorders

该SQL逻辑查询处理顺序应该是
  • ②①③④⑤⑥
  • ①②③④⑤⑥
  • ②③④⑤①⑥
  • ②③④⑤⑥①
having的用法 :大白话就是先通过sql语句把所有数据查询出来,再用 group by 进行分组,然后把分完组的数据用聚合函数进行统计,只不过查询语句和聚合函数之间需要用having连接;(group by 、having、聚合函数通常一起使用)
结构:查询语句+group by+ having +聚合函数统计

直接上栗子:
SELECT emp_no, count(salary) t # 在工资表里查找员工编号、统计发工资的次数(取别名t)
from salaries   # 工资表
where creat_date between '2020-01-01' and '2020-12-31'  
group by emp_no    # 通过员工编号编组
HAVING t>15      # 查询发工资次数大于15次的
常用聚合函数是sum()、avg()、count();
(聚合函数是用来统计每个分组的统计信息,它们要跟 group by 一起使用,用来将每个分组所有数据聚合成一条统计数据。聚合函数: max() min() count() avg() sum() 等。

语句执行的顺序
select 语句执行顺序大致是:
where(数据查询) -> group by(数据编组) -> having(结果过滤) -> order by(排序)
发表于 2023-07-16 22:20:38 回复(0)