1,简单多表查询
select *
from 表1 as 别名1,表2 as 别名1,表3 as 别名1,表4 as 别名1
where 别名1.userid = 别名2.id
2,连接查询
select A.ID, A.NAME, A.AGE, B.GS,B.CLASS
from 表1 as A left join 表2 as B on A .userid = B.id,
表3 as C left join 表2 as D on C .gs .id = D.id
where
GROUP BY A.ID
左连接 LEFT JOIN 右连接 RIGHT JOIN 内连接INNER JOIN
3,一个表分时间段,本日,本月,本年,查询对应数据
可使用case when
例如:case when year (时间字段) = year (getdate()) then 1
when year (时间字段) = year (getdate() and month(时间字段) = month(getdate()) then 0
else 0 end
4, case when 可以给表格增加额外的行来辅助计算或者作为状态判定
例如:case when age<18 then '未成年'
when age>=18 and age<=28 then '青年'
else '中年' end
5,union 和union all
select a,b,c,d,e,f
from A,B,C
WHERE A.ID = B.USERID
UNION
select g,h,i,j,k,l
from D,E,F
WHERE D.ID = E.USERID
UNION和UNION ALL 的作用都是把两个表的数据连接起来,放到一个表,
注意下一个表的数据是接在上一个表的对应列的下方,所以两个表的列要一一对应,
然后区别在于 UNION 会进行去重,UNION ALL 不会去重。
6,将一个表的查询结果作为另一个表的查询表(其实就是生成了个临时表,去查临时表)
例如;
select gs,sum(dnum)AS dnum,sum(mnum)AS mnum,SUM(ynum)AS ynum
from (
select
C.scode AS CODE
,GS.sname AS gs
,case when year(C.qdsj) = year(GETDATE())and month(C.sj) = month(GETDATE())and day(C.sj) = day(GETDATE())
then 1 else 0 end as dnum
,case when year(C.sj) = year(GETDATE())and month(C.sj) = month(GETDATE())
then 1 else 0 end as mnum
,case when year(cast(C.sj as datetime))=year(GETDATE()) then 1 else 0 end as yearnum
from compact as C,gongsi as GS
where C.gsid = GS.id
and year(C.sj)=year(GETDATE())
)C GROUP BY gs
7,over 可用于开窗,例如
select * over()
from A,B
WHERE A.ID = B.UAERID
8, cast万能格式转换器的用法、
标准格式 cast(a,xddate as datetime )或者 cast(a.title as varchar(50))
cast(目标字段 AS 目标数据类型(长度))
9,获取本日,本月,或者本年日期
方法一:
select CONVERT(varchar(10),DATEADD(DAY,-1,GETDATE()),120) /** 本天 **/
select CONVERT(varchar(10),DATEADD(DAY,-day(GETDATE()),GETDATE()),120)/** 本月 **/
select CONVERT(varchar(10),DATEADD(MONTH,-MONTH( CONVERT(varchar(10),DATEADD(DAY,-day(GETDATE()),GETDATE()),120)),
方法二
CONVERT(varchar(10),DATEADD(DAY,-day(GETDATE()),GETDATE()),120)),120) /** 本年 **/
and YEAR(A.sj) = year(cast(GETDATE()as datetime))
and month(A.sj)=month(CONVERT(datetime,DATEADD(DAY,-day(GETDATE()),GETDATE()),120))
select month(CONVERT(datetime,DATEADD(DAY,-day(GETDATE()),GETDATE()),120))
方法三
and A.sj = cast( CONVERT(date,DATEADD(DAY,-0,GETDATE()),120) as datetime)
and A.sj >cast(CONVERT(date,DATEADD(DAY,-day(GETDATE())+1,GETDATE()),120)as datetime)
and YEAR(A.sj) = year(GETDATE())
10,CONVERT()的用法
示例用法:
CONVERT(varchar(10),DATEADD(DAY,-1,GETDATE()),120) //当前时间减去一天
CONVERT(varchar(10),DATEADD(month,-1,GETDATE()),120) //当前时间减去一月
CONVERT(varchar(10),DATEADD(year,-1,GETDATE()),120) //当前时间减去一年
11,创建索引
/*
//普通索引alter table table_name add index index_name (column_list) ;
//唯一索引alter table table_name add unique (column_list) ;
//主键索引alter table table_name add primary key (column_list) ;*/
12, 视图
create view A_view_AAAA //创建
DROP VIEW A_view_AAAA //删除
13,待更新