SQL SERVER-3-order by|类型转换与日期格式|联合union

 1.order by
--order by在sql语句中位置一定是在最后。。

--select ....3>对筛选出的数据再进行列的筛选,select是对列的筛选
--from ....  1> 从数据源中获取数据
--where .....2> 从获取到的数据中筛选一部分符合要求的数据,where是 进行 行的筛选


--1.请从学生表中查询出每个班的班级Id和班级人数
--从该学生表中统计出每个班的人数。
--当在查询中使用了group by 分组后,则在select中出现的列,必须是group by 中包含的列或者该列必须在聚合函数中
select tsclassid as 组编号,count(*) 该组中的记录条数 from TblStudent group by tsclassid


--2 .请从学生表中查询出每个班的班级Id和班级中男同学的人数
--请统计学生表中的每个班的男同学的人数
select
    班级Id=tsclassId,
    --这里的count()会对每一组都进行一次汇总。
    男同学人数=count(*) --注意:这里的count是对每一组的数据进行聚合,统计条数。
from TblStudent
where tsgender='男'
group by tsclassId

--根据条件查询
--在分组前对数据筛选使用where
--而分组以后,对于那些组保留,那些组不保留,对于组的筛选则使用另外一个关键字having
--如下,查询出每个班的班级编号和人数,并且只显示出来班级人数大于10的班
select
    tsclassId as 班级编号,
    count(*) as 人数
from TblStudent
group by tsclassId
having count(*)>10

--having是对分组后的,组进行筛选。
select
    tsclassId as 班级编号,
    count(*) as 人数
from TblStudent
--where ...
group by tsclassId
having 人数>10
--在这里不能使用别名"人数",因为sql语句的执行顺序是先执行group by 与having然后才执行select,所以
--在执行having的时候select还没执行,所以这里不能用select中的列别名

--下面的写法是错误的,sAge必须包含在group by字句中或者包括在聚合函数中
--select tsclassId, count(tsname),tsage from TblStudent group by TsclassId
--这样的写法是对的
select tsclassId, count(tsname), tsage from TblStudent group by TsclassId,tsage


select
    tsgender,
    tsaddress,
    count(*)
from TblStudent
--where count(*)>..通过where筛选不能用聚合函数
group by tsgender,tsaddress
--having ... >= 通过having进行筛选,只能选择在分组的select中可以写的那些列信息

2.类型转换与日期格式
--两个函数 convert()和 cast()

select '考试人数:'+convert(varchar(3),100)
select '考试人数:'+cast(100 as varchar(3))


create table MyTest1001
(
    autoId int identity(1,1) primary key,
    userName varchar(100),
    number varchar(100)--这里使用的是字符串
)

insert into MyTest1001 values('A','1')
insert into MyTest1001
select 'B','2' union
select 'C','3' union
select 'D','4' union
select 'E','5' union
select 'F','9' union
select 'G','10' union
select 'H','11' union
select 'I','12' union
select 'J','19' union
select 'K','20' union
select 'L','21' union
select 'M','22'

--如果这里不进行转换的话会按照字符串格式来排序
select * from MyTest1001 order by cast(number as int) desc
--数据库中,使用try  catch 来捕获异常
begin try
select * from MyTest1001 order by convert(int,number) asc
end try
begin catch
    --.....
end catch

--获取日期格式
select getdate()
select convert(char(10),getdate(),120)

--Style ID     Style 格式
--100      mon dd yyyy hh:miAM (或者 PM)
--101     mm/dd/yy
--102     yy.mm.dd
--103     dd/mm/yy
--104     dd.mm.yy
--105     dd-mm-yy
--106     dd mon yy
--107     Mon dd, yy
--108     hh:mm:ss
--109      mon dd yyyy hh:mi:ss:mmmAM(或者 PM)
--110     mm-dd-yy
--111     yy/mm/dd
--112     yymmdd
--113      dd mon yyyy hh:mm:ss:mmm(24h)
--114     hh:mi:ss:mmm(24h)
--120      yyyy-mm-dd hh:mi:ss(24h)
--121      yyyy-mm-dd hh:mi:ss.mmm(24h)
--126     yyyy-mm-ddThh:mm:ss.mmm(没有空格)
--130     dd mon yyyy hh:mi:ss:mmmAM
--131     dd/mm/yy hh:mi:ss:mmmAM


Select CONVERT(varchar(100), GETDATE(), 0)  --05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 1)  -- 05/16/06
Select CONVERT(varchar(100), GETDATE(), 2)  -- 06.05.16
Select CONVERT(varchar(100), GETDATE(), 3)  -- 16/05/06
Select CONVERT(varchar(100), GETDATE(), 4)  -- 16.05.06
Select CONVERT(varchar(100), GETDATE(), 5)  -- 16-05-06
Select CONVERT(varchar(100), GETDATE(), 6)  -- 16 05 06
Select CONVERT(varchar(100), GETDATE(), 7)  -- 05 16, 06
Select CONVERT(varchar(100), GETDATE(), 8)  -- 10:57:46
Select CONVERT(varchar(100), GETDATE(), 9)  -- 05 16 2006 10:57:46:827AM
Select CONVERT(varchar(100), GETDATE(), 10)  -- 05-16-06
Select CONVERT(varchar(100), GETDATE(), 11)  -- 06/05/16
Select CONVERT(varchar(100), GETDATE(), 12)  -- 060516
Select CONVERT(varchar(100), GETDATE(), 13)  -- 16 05 2006 10:57:46:937
Select CONVERT(varchar(100), GETDATE(), 14)  -- 10:57:46:967
Select CONVERT(varchar(100), GETDATE(), 20)  -- 2006-05-16 10:57:47
Select CONVERT(varchar(100), GETDATE(), 21)  -- 2006-05-16 10:57:47.157
Select CONVERT(varchar(100), GETDATE(), 22)  -- 05/16/06 10:57:47 AM
Select CONVERT(varchar(100), GETDATE(), 23)  -- 2006-05-16
Select CONVERT(varchar(100), GETDATE(), 24)  -- 10:57:47
Select CONVERT(varchar(100), GETDATE(), 25)  -- 2006-05-16 10:57:47.250
Select CONVERT(varchar(100), GETDATE(), 100)  -- 05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 101)  -- 05/16/2006
Select CONVERT(varchar(100), GETDATE(), 102)  -- 2006.05.16
Select CONVERT(varchar(100), GETDATE(), 103)  -- 16/05/2006
Select CONVERT(varchar(100), GETDATE(), 104)  -- 16.05.2006
Select CONVERT(varchar(100), GETDATE(), 105)  -- 16-05-2006
Select CONVERT(varchar(100), GETDATE(), 106)  -- 16 05 2006
Select CONVERT(varchar(100), GETDATE(), 107)  -- 05 16, 2006
Select CONVERT(varchar(100), GETDATE(), 108)  -- 10:57:49
Select CONVERT(varchar(100), GETDATE(), 109)  -- 05 16 2006 10:57:49:437AM
Select CONVERT(varchar(100), GETDATE(), 110)  -- 05-16-2006
Select CONVERT(varchar(100), GETDATE(), 111)  -- 2006/05/16
Select CONVERT(varchar(100), GETDATE(), 112)  -- 20060516
Select CONVERT(varchar(100), GETDATE(), 113)  -- 16 05 2006 10:57:49:513
Select CONVERT(varchar(100), GETDATE(), 114)  -- 10:57:49:547
Select CONVERT(varchar(100), GETDATE(), 120)  -- 2006-05-16 10:57:49
Select CONVERT(varchar(100), GETDATE(), 121)  -- 2006-05-16 10:57:49.700
Select CONVERT(varchar(100), GETDATE(), 126)  -- 2006-05-16T10:57:49.827
Select CONVERT(varchar(100), GETDATE(), 130)  -- 18 ???? ?????? 1427 10:57:49:907AM
Select CONVERT(varchar(100), GETDATE(), 131)  -- 18/04/1427 10:57:49:920AM


3.联合union
--UN

select '张飞',18,'[email protected]'
union all --通过union all就可以把多个结果集联合到一起,把行联合在一起。
select '关于',19,'[email protected]'


select 18,'林冲',100
union all --通过union all就可以把多个结果集联合到一起,把行联合在一起。
select '武松',19,'[email protected]'
--当使用union或者union all的时候必须保证多个结果集中的列的数目一致,
--并且对应的列的数据类型得一致,至少得兼容。


--使用带from子句的union
select tsname,tsgender,tsage from TblStudent
union all
select ttname,ttgender,ttage from TblTeacher order by tsage desc

--union与union all的区别
--union all 在进行联合的时候不会去除重复数据
--而union在联合的时候会自动去除重复数据
select tsname,tsgender,tsage from TblStudent
union
select tsname,tsgender,tsage from TblStudent


--通过union实现底部汇总

select
    商品名称,
    销售价格=(sum(销售数量*销售价格))
from MyOrders
group by 商品名称
union all   --使用union实现底部汇总
select '所有商品销售总价:',sum(销售数量*销售价格) from MyOrders

猜你喜欢

转载自blog.csdn.net/m0_37532448/article/details/82867659