create database dbOrder
use dbOrder
create table OrderTb
(
orderid int not null,
)
create table OrderListTb
(
orderListid int identity(1,1) primary key,
orderid int,
orderLine int
)
select * from OrderTb
select * from OrderListTb
/Union 组合查询/
–union 将数值类型对应相同的列 组合查询,且 前后查询数据所包含的列的个数相同
–union 默认合并重复数据,union all 则显示所有查询到的数据
SELECT Orderid FROM OrderTb UNION SELECT OrderID FROM OrderListTb
SELECT Orderid FROM OrderTb UNION ALL SELECT OrderID FROM OrderListTb
SELECT CAST( Orderid AS CHAR(2)) FROM OrderTb UNION SELECT orderLine FROM OrderListTb
/Group By 分组统计/
–Group By 将数据分组,然后进行统计。分组可以理解为将整个数据划分为新的子表,统计只能以子表(使用聚合函数)为基础进行
–Group By 前只能为被分组字段或聚合函数
–Group By 后面是用于分组的依据条件
/**where 与 having区别
*where 子句中不能出现聚合函数
having子句中可以使用聚合函数/
select OrderTb.orderid 订单编号,SUM(OrderListTb.orderLine) 总价 from OrderListTb
join OrderTb on OrderTb.orderid=orderListtb.orderid
group by OrderTb.orderid
/where是对分组前的每列数据进行判断,若不满足则去除该列,并不对之后的分组进行操作/
–对小于等于10的列执行去除操作,大于10的列不进行操作,之后分组,对分组不进行操作
select OrderTb.orderid,SUM(OrderListTb.orderLine) from OrderListTb
join OrderTb on OrderTb.orderid=orderListtb.orderid
where orderLine>10
group by OrderTb.orderid
–对小于等于20的列执行去除操作,大于20的列不进行操作,之后分组,对分组不进行操作
select OrderTb.orderid,SUM(OrderListTb.orderLine) from OrderListTb
join OrderTb on OrderTb.orderid=orderListtb.orderid
where orderLine>20
group by OrderTb.orderid
/having是对分组后的数据进行判断,满足条件的数据组被显示/
select OrderTb.orderid,SUM(OrderListTb.orderLine) from OrderListTb
join OrderTb on OrderTb.orderid=orderListtb.orderid
group by OrderTb.orderid
having sum(orderLine)>20