【技术】SQL 数据分析常用语句.....收藏

2017年8月14日  | 字体大小 | |繁體|

• 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工资表

2 字符串\数字\日期时间

功能

代码

编号和姓名字符串尾部去掉空格

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

3 聚合数据查询 4 子查询 5 联接\组合查询 6 高级查询 7 更新数据 参考资料
  • 《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'

    相关文章 延伸阅读

    (文章仅为用户好友间自行存档分享,如有违规请在下方评论中留言说明,并点击上方举报钮,同时删除本文。) 本文二维码


    评论