SQL基础语句(数据库函数,时间函数,Union,Case,索引)

--SQL 版本

select @@version

--与表无关的数据

select newid() as TGUID

--聚合函数,对查询结果进行聚合求值

select count(*) from 

select max(Salary) from

select min(Salary) from

select Avg(Salary) from

select sum(salary) from 

--排序

order by Age DESC, Salary ASC

--通配符匹配(半角),模糊匹配

where EmpName like '_N' or '%n%'

--NULL:不知道

select NULL+1

where EmpName is NULL

--in: 多值匹配

-- 范围

select * from EmpLoyee where Age between  20 and 30

--把结果分组 Group By

SELECT [newsID],count(*) from [news] group by [newsID]

SELECT [newsID],max([classID]),count(*) from [news] group by [newsID]

--对分组后的结果进行筛选,Having 字段必须在Select 中,而Where是对原始数据进行过滤

SELECT [newsID],max([classID]),count(*) from [news] group by [newsID] having max([classID])>2

--常用函数

select ABS(-1)  --求绝对值

select CEILING(-3.8)  --天花板 取大于这个数字的最大整数

select FLOOR(5.3)     --地板   取小鱼这个数字的最大整数

select ROUND(3.1415,2)--四舍五入 取离这个数字最近的数,2 是精确的位数

select len('ni hao')  --字符串长度

select LOWER('HELlo') --转小写

select UPPER('helLO') --转大写

select LTRIM('  kong')--去左空格

select RTRIM('kong  ')--去右空格

select LTRIM(RTRIM('    kong  ')) --去两边空格

select substring('nihao',2,3)--从二个位子截取三个字符

--日期函数

select dateadd(dd,3,getdate())

select dateadd(mm,-3,getdate())

select dateadd(hh,3,getdate())

select datediff(day,getdate(),'20120203') --后面减去前面

select datepart(day,getdate())  --选出时间中特定的部分

--员工工龄以及对应的人数

select datediff(year,InDate,getdate()),count(*) From Employee 

group by datediff(year,InDate,getdate())

--每一年入职人数

select datepart(year,InDate),count(*) From Employee 

group by datepart(year,InDate)

--数据类型转换

select cast('1' as int)

select convert(int,'1')

select convert(datetime,'20120203')

select convert(varchar(10),123)

--TOP 选出Top3到5 限制结果集

select top 3 * from [news] where ClassID not in 

(select top 2 ClassID from [news] order by ClassID desc)

order by ClassID desc

--按照ClassID升序,并给选出的每一行记录进行排序

select newsID,NewsName, row_number() over(order by ClassID )as rows from [news] 

--DISTINCT 消除完全重复的行

select distinct NewsName from [NEWS]

--UNION,会把重复数据合并

SELECT [newsID],[newsName] FROM [SchoolNews].[dbo].[news]

UNION

SELECT [classID],'CLASSNAME' FROM [SchoolNews].[dbo].[newsClass]

--把两张表选出的内容合并

SELECT '最大NEWSID',max(newsID)   FROM [SchoolNews].[dbo].[news]

UNION

SELECT '最大CLASSNAME',max([classID])  FROM [SchoolNews].[dbo].[newsClass]

--统计查询结果

select [newsID],ClassID FROM [SchoolNews].[dbo].[news]

UNION

select '评论总数',Sum(ClassID) FROM [SchoolNews].[dbo].[news]
--当月

select datediff(month,'2012-12-10',getdate())

--ISNULL

select ISNULL(EmpName,'佚名') as 姓名 from Employee

--case:就是对查询的结果进行判断、分类、转化(其他数据或者多行)

select EmpName, 

(

case Sex

when 'M' then 'man'

when 'F' then 'woman'

else '性别错误'

END

) as 性别 From Employee

 --case 支持范围

select EmpNo,

(

case 

when datediff(year,InDate,getdate())<2 then '一年'

when datediff(year,InDate,getdate())>=2 and datediff(year,InDate,getdate())<3 then '两年'

else '两年以上'

END

) AS 工龄 from Employee 

--Case 选择两列中比较大的一列的值,把值按照某种条件分成两列

select 

(

case

when a>b then a

else b

END

) as 第一列,

(

case

when b>c then b

else c

END

) as 第二列 from

--收入,支出 分开显示

select FNumber,

(

case

when FAmount>0 then FAmount

else 0

END

) as 收入,

(

case

when FAmount<0 then ABS(FAmount)

else 0

END

) as 支出 from T_TEST

--球队胜负积分:先把胜负逐条分开再进行分组

select FName 

SUM(

case Score

when N'' then 1

else 0

END

) as 胜

SUM(

case Score

when N'' then 1

else 0

END

) as 平

SUM(

case score

when N'' then 1

else 0

END

) asfrom T_Test

group by FName  --以名字进行分组

--电话号码的设计要为varchar 类型

--Index 索引,直接在字段右键添加索引:提高查询效率 对于经常检索的字段建立索引

--插入,删除,更新数据的时候速度变慢 占用空间

--Like,函数(ABS),类型转换(CAST)等依旧需要全表扫描

 

 

 

 

你可能感兴趣的:(UNION)