【技术】SQL 数据分析常用语句.....收藏
• 1 基础查询• 2 字符串\数字\日期时间• 3 聚合数据查询• 4 子查询• 5 联接\组合查询• 6 高级查询• 7 更新数据
阅读提醒:点击图片放大可看清晰的
1 基础查询
功能 |
代码 |
查询列 |
select 顾客姓名.... from tb_顾客表 |
查询全部信息 |
select * from tb_顾客表 |
换标题 |
select顾客编号 '编号', 顾客姓名 '姓名',所在城市 '城市' from tb_顾客表 |
添加列 |
select 顾客姓名邮编,电话,传真, (电话+传真) AS逗, (邮编+电话) AS逼 from tb_顾客表 |
区间查询,选择数据范围 |
select 顾客姓名,邮编,电话,传真 from tb.顾客表 where邮编> 131000; select * from mrbooks where图书价格between 68 and 88 |
模糊查询: |
select * from mrbooks WHERE图书价格LIKE ' 9' |
前五名 |
select TOP 5 * from tb_ BookSell ORDER BY金额DESC |
后五名 |
select TOP 5书号, 书名SUM(金额) AS 合计销售金额 from tb_ _BookSell GROUP BY书号,书名,作者 ORDER BY 3 |
查询结果升(降)序 |
select * from tb_ employee05 order by工资,奖金 |
姓名首字母 |
select * from tb_ abstu05 order by substring(姓名,1,1) |
姓氏笔画 |
select * from tb_ stu05 order by姓名 collate chinese_ prc_ stroke_ cs_ as_ ks_ _ws |
查询数学不大于90,或音乐大于等于95 |
select ID,Name,Math_ Score,Music from tb_ stuscore where not (Math_ Score >= 90) OR (Music_ Score>=95) |
80-89之间 |
SELECT * FROM tb_ StuScore WHERE Math score LIKE '8_ ! WHERE Math_ score LIKE '9[5-9]%' |
不在90-99之间的人 |
SELECT* FROM tb_ StuScore WHERE Math_ score LIKE '[^9][5-9]%' |
姓李的人 |
select * from tb_ StuScore where姓名LIKE '李%' |
去重: |
SELECT DISTINCT书号,书名作者出版 社 FROM tb_ BookSell ORDER BY书号 |
列出重复超过1次的 |
SELECT 书名,书号,作者,COUNT(书名) AS 重复数量 FROM tb_ Booksell GROUP BY书名,书号,作者 HAVING COUNT(书名)>=2 |
查询备注不为空的信息 |
select 学生姓名,所在学院,备注 from tb_ stu where备注is Not NULL |
格式化信息 |
select *'姓名:'+ Name +' ;编号: '+CONVERT(varchar(3)id) AS学 生信息 from tb_ stu |
去除空格 |
select姓名,TRIM(姓名) AS去除左面空格 RTRIM(姓名) AS去除右面空格 LTRIM(RTRIM(姓名) ) AS去除左右面空格 from客户信息表 |
四舍五入 |
select人员姓名,ROUND(代扣税,1) AS 代扣税 ROUND(本月扣零) AS本月扣零 CAST(ROUND(应发合计,1) AS real) AS 应发合计 from工资表 |

功能 |
代码 |
编号和姓名字符串尾部去掉空格 |
select 编号rtrim (编号)as去空格后,姓名,trim(姓名)as去空格后,专业,trim(专业)as 去空格后from tb_ stu0690 |
学生信息表中截取姓和名字 |
select 姓名sbtring(姓名,1,1)as姓,subtring(姓名,2,2)as 名字 |
from tb stu05 |
|
书名+别类生成信息 |
select图书名称,图书分类,(图书名称+的类别为' +图书分类) as说明from tb _aspnetbook |
将某个数字插入编号中(第二个删除) |
select 学号,姓名,stuff(学号,2,2,200900) as新学号 from tb stu05 |
计算字符串p出现的次数 |
select ln ('apples is in the apple tee')-len(replace ('apples is in the apple tee',',")/en('p") from tb_ name06 |
大写改为小写 |
select upper(firstname)as up_firstname ,lower(lastname )as low_lastname. from tb .nameO6 |
元音字符删除 |
select frstname, replace( replace(replace( replace(reilacirsmaml., 'A', 'E', 'I', 'O', 'U',as修改后 from tb _name06 |
分离元音字符和数字 |
declare @i nvarchar(50);set @i=";declare @j nvarchar(50);set @j=";| select @i=@i+b.c from(select substring(a.n,iter,pos,1)asc from (select 'asdf1*h456' as n)a,| (select id as pos from tb .num06)iterwhere tet:ua-anla))b| where asci(b.c) between 48 and 57;select @j=@j+b.c select substring(a,n,iter.pos,1)asc from (select 'asdf1 *h456' as n)a,(select id as pos from tb_ num06)iterwhere iter.pos<-len(a.n)b where acil.c not between 48 and 57;selet @ias数字,@jas字符 |
去除非字母和数字 |
declare @i nvarchar(50);set @i=";| select @i=@i+b.cselect sbtringan,itr,pos,1)ascfromlselect'as df*4 56'asnla(select id as pos from tb_ num06jiterwhere ter.poselena.n)b)where acilb.c) between 48 and 122;select @i |
比较姓名 |
select (case when "Helen'='Helan' then相同’else不同' end )ass 比较结果select (case when 'atricia'=Patricia' then相同'else "不同end )as比较结果 |
比较相似(发音相似) |
select dferencefereen"reene'as结果,dfference'sual,basic)as 结果,diffence'"wear,where'as 结果 |
外籍学生姓名大小写区分 |
select*from tb_ num06 where姓名='MARY' cllate Chinese PRC CS_ AI |
去除分机号'-' |
select电话号码as删除前,stuff (电话号码charindex(",电话号码),1,") as删除后from tb_ tel06 |
提取区号和分机号 |
select 电话号码as提取前,left电话号码, carindex(-'电话号码)-1)as区号,substring(电话号码,charindex("I电话号码)+1,len(电话号码)-charindex(",电话号码))as 号码 |
from tb_ tel06 |
|
格式化日期Y-MM-DD |
select 图书名称图书分类出版日期,convert(varchar(10),cast(出版日期 as smalldatetime),120)as格式化日期from tb_ aspnetbook |
求平方根 |
SELECT A ,SQRT(ABS(A)) AS SQRTFROM tb. Numbers |
e的次方 |
SELECT A ,EXP(A) AS EXP FROM tb Numbers |
三角函数 |
SELECT A,COS(A) AS MY _COs,IN(A) AS MY SIN,TAN(A) ASMY_ TAN FROM tb Numbers |
10月份的信息 |
select 图书名称图书分类,出版日期from tb aspnetbook where month(出版日期)=10 order by出版日期 |
今天是周几 |
select datename(dw,etdatel()) as今天是周几 |
时间差 |
select datediff(day,(select入校时间from tb_ student06 where姓名='贯红'),(select入校时间from tb student06 where姓名='陈丹')) as 时间差距 |
计算全年工作日 |
select datename(dw,2008-01-01') as '2008-01-01星期几',datename(dw,2008-12-31') as '2008-12-31星期几',datediff(wk, '2008-01-01,2008-12-31') as全年星期数,(datediff(day;2008-01-01;2008-12-31') -(dateffw.2008-01-01;2008-1231*)*2)- |
(select 全年请假天数from tb. AlYearPay where员工编号='m001') as员工编号001全年工作日 |
|
查询当前图书出版日期与下一次出版日期间隔 |
selectx.* datediff(dayx.出版日期,x.下一次出版日期)两次出版相差的天数 from (select e.书号, e.书名,e.出版日期,(select min(d.出版日期) from tb. _booksell06 d |
where d.出版日期> e.出版日期)下-次出版日期 |
|
from tb booksell6 e) x |
|
日期以年月日分开 |
select书名,year(slcete出版日期from tb_ bose where书号=*1')) as年份 |
month((select出版日期from tb_ boksell06 where书号="1) as月份 day(selct出版日期from tb, bosel06 where书号= 1)as日期 from tb. booksell06 where书号= '1' |
|
加三个月后的日期 |
select dateadd(mm,3,getdate() as 'DAY NUMBER' |
获取某月,本周和当前季度的第一天 |
/*获取某月份第一天*/ select dateADD(mm,datedif(mm,0,2009-3-181),0) as 'DAY NUMBER' /*获取本周的第一-天*/ select dateadd(wk,datediffwk,0,getdate(), 0) as DAY NUMBER' /*获取当前季度的第一天*/ select dateadd(qq,datediff(qq,0,getdate()),0) as 'DAY NUMBER' |
获取最后一天 |
/*获取去个月的最后-天*/ select dateadd(ms,3,dateadd(mm,dadediff(m,0,getdate(),) as 'DATE NUMBER上个月最后-天 /*获取去年最后一天*/ SELECT dateadd(ms,-3,DATEADD(yy,DAEIFy0,gtdate(0), 0) as 'DATE NUMBER去年最后的-天 /*获取本年的最后一天*/ SELECT dateadd(ms,3,DATEADD(y,DAEDIFFww,taete0)+1 0) as 'DATE NUMBER本年最后的一天 |
长日期转化为短日期 |
select书名,convert(char(10),出版日期,120) as日期from tb_ booksell06 |
显示长日期中的小时分秒 |
SELECT CONERTavacha(1), gtatel,8) as当前时间 |
.转化为- |
update tb_ student06 set入校时间=20'+replace(入校时间, '.','-') where 编号=3 |






《SQL Server 应用与开发 范例宝典》
http://blog.csdn.net/sky_666/article/details/8627127
迷途(数据圈资深分析师分享):

sql语句基础
一 查询常量
1. SELECT 学生编号, 学生姓名,性别 FROM tb_Student
2. SELECT 学生姓名 AS 姓名, 性别 AS 学生性别 FROM tb_Student
3. SELECT 学生姓名 姓名, 性别 学生性别 FROM tb_Student
4. SELECT 学生姓名 姓名, 高数+外语 AS 高数加外语分数 FROM tb_Student
5. SELECT 学生姓名,学生编号 FROM tb_Student WHERE LEN(学生姓名) = 2
6. SELECT 学生姓名,年龄 FROM tb_Student WHERE 年龄 = 24
7. SELECT 学生姓名,年龄,性别 FROM tb_Student WHERE 学生姓名 = ‘安心’
8. SELECT 学生姓名,年龄,出生年月 FROM tb_Student WHERE 出生年月 = ‘1981/12/8’
9. SELECT 学生姓名,年龄,统招否 FROM tb_Student WHERE 出生年月 = ‘TRUE’
10.SELECT 学生姓名,年龄,家庭住址 FROM tb_student WHERE 家庭住址 IS NULL OR 家庭地址 = ‘’
二 查询变量(string.Format())
1. SELECT 学生姓名,年龄,性别,家庭住址 FROM tb_Student WHERE 学生姓名 = ‘{0}’,Name
2. SELECT 学生姓名,年龄,性别,家庭住址 FROM tb_Student WHERE 年龄 = {0},Age
3. SELECT 学生姓名,年龄,性别,出生日期 FROM tb_Student WHERE 出生日期 = {0},dt.ToShortDatestring
4. SELECT 学生姓名,年龄,性别,出生日期 FROM tb_Student WHERE 出生日期 BETWEEN '2014/1/1' AND '2014/2/1'
三 模糊查询
1. SELECT 学生姓名,年龄,性别 FROM tb_Student WHERE 学生姓名 LIKE ‘张_’
2. SELECT 学生姓名,年龄,性别 FROM tb_Student WHERE 学生姓名 LIKE ‘张__’
3. SELECT 学生姓名,年龄,性别 FROM tb_Student WHERE 学生姓名 LIKE ‘张%’
4. SELECT 学生姓名,年龄,出生日期 FROM tb_Student WHERE 出生日期 LIKE ‘%1981%’
5. SELECT 学生姓名,年龄,出生日期 FROM tb_Student WHERE 年龄 LIKE ‘2[0-9]’
6. SELECT 学生姓名,年龄,出生日期 FROM tb_Student WHERE 年龄 LIKE ‘[1-2][0-9]’
7. SELECT 学生姓名,年龄,出生日期 FROM tb_Student WHERE 学生姓名 LIKE ‘[^李]%’
8. SELECT 学生姓名,年龄,出生日期 FROM tb_Student WHERE 年龄 LIKE ‘[1-2][^0-5]
9. SELECT 学生姓名,年龄,出生日期 FROM tb_Student WHERE 年龄 LIKE ‘[1-2][^0-5] AND 学生姓名 LIKE ‘李%’
四 TOP 和 PERCENT 限制查询结果
1. SELECT Top 10 学生编号,学生姓名,年龄,家庭住址 FROM tb_Student ORDER BY 学生编号 ASC
2. SELECT Top 10 学生编号,学生姓名,高数,外语 FROM tb_Student ORDER BY 高数+外语 ASC
3. SELECT Top 10 * FROM(SELECT TOP 20 * FROM tb_Grade ORDER BY 总分 DESC) AS st ORDER BY 总分 ASC
4. SELECT TOP 50 PERCENT 书号,书名,SUM(销售数量) AS 合计销售数量 FROM tb_Book GROUP BY 书号,书名,作者 ORDER BY 3 DESC
5. SELECT TOP 20 PERCENT * FROM tb_BookMessage ORDER BY 现存数量 ASC
五 数值查询
1. SELECT 学生姓名,ISNUMERIC(年龄)FROM tb_Student
2. SELECT dm AS 数值取整前, CEILING(dm) AS 数值取整后 FROM tb_Money
3. SELECT dm AS 数值取整前, FLOOR(dm) AS 数值取整后 FROM tb_Money
4. SELECT dm AS 四舍五入前, ROUND(dm,2) AS 四舍五入后 FROM tb_Money
5. SELECT angle AS 角度, SIN(ANGLE*PI()/180) AS 正弦值 FROM tb_Angle
6. SELECT angle AS 角度, COS(ANGLE*PI()/180) AS 余弦值 FROM tb_Angle
7. SELECT myvalue AS 数值, ABS(myvalue) AS 求绝对值后 FROM tb_Value
8. SELECT * FROM tb_Student WHERE 学生编号 = 22050110+FLOOR(RAND()*10)
9. SELECT myvalue AS 数值,SIGN(myvalue) AS 判断数值 FROM tb_value
六 字符串查询
1. SELECT friendname AS 字符串,LOWER(friendname) AS 全部转换为小写, UPPER(friendname)AS 全部转换为大写 FROM tb_string
2. SELECT friendname AS 字符串,(LEN(friendname)-LEN(REPLACE(friendname,'i','')))/LEN('i') FROM tb_string
3. SELECT 学生姓名,所在院校, SUBSTRING(所在院校,2,3) AS 所在学院子串 FROM tb_Student
4. SELECT 出生年月,SUBSTRING(CONVERT(VARCHAR(20),出生年月),6,5) AS 年 FROM tb_Student
5. SELECT 所在学院 AS 删除字符串前,STUFF(所在院校,2,3,'') AS 删除字符串后 FROM tb_Student
6. SELECT 所在学院,CHARINDEX('学院',所在学院) AS 索引位置 FROM tb_Student
7. SELECT 所在学院, REPLACE(所在学院,'学院','XueYuan')AS 替换后的信息 FROM tb_Student
8. SELECT 学生姓名, CASE WHEN 所在学院 = '计算机学院' THEN '计算机学院学生' ELSE '否' END AS 是否为计算机学院学生 FROM tb_Student
七 周期和日期的查询
1. SELECT 学生编号,学生姓名, CASE WHEN ISDATE(出生年月) =1 THEN '是日期信息' ELSE '非日期新奇' END AS 生日字段是否为日期信息 FROM tb_Student
2. SELECT 学生编号,学生姓名 FROM tb_Student WHERE 出生年月 = '1980/12/24'
3. SELECT 学生编号,学生姓名 FROM tb_Student WHERE 出生年月 LIKE '%1980%'
4. SELECT * FROM tb_Book WHERE 日期 BETWEEN '2005/8/1' AND '2005/10/1'
相关文章 延伸阅读