SQL笔记 自动保存的.docx

上传人:b****5 文档编号:14593261 上传时间:2023-06-24 格式:DOCX 页数:17 大小:937.20KB
下载 相关 举报
SQL笔记 自动保存的.docx_第1页
第1页 / 共17页
SQL笔记 自动保存的.docx_第2页
第2页 / 共17页
SQL笔记 自动保存的.docx_第3页
第3页 / 共17页
SQL笔记 自动保存的.docx_第4页
第4页 / 共17页
SQL笔记 自动保存的.docx_第5页
第5页 / 共17页
SQL笔记 自动保存的.docx_第6页
第6页 / 共17页
SQL笔记 自动保存的.docx_第7页
第7页 / 共17页
SQL笔记 自动保存的.docx_第8页
第8页 / 共17页
SQL笔记 自动保存的.docx_第9页
第9页 / 共17页
SQL笔记 自动保存的.docx_第10页
第10页 / 共17页
SQL笔记 自动保存的.docx_第11页
第11页 / 共17页
SQL笔记 自动保存的.docx_第12页
第12页 / 共17页
SQL笔记 自动保存的.docx_第13页
第13页 / 共17页
SQL笔记 自动保存的.docx_第14页
第14页 / 共17页
SQL笔记 自动保存的.docx_第15页
第15页 / 共17页
SQL笔记 自动保存的.docx_第16页
第16页 / 共17页
SQL笔记 自动保存的.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

SQL笔记 自动保存的.docx

《SQL笔记 自动保存的.docx》由会员分享,可在线阅读,更多相关《SQL笔记 自动保存的.docx(17页珍藏版)》请在冰点文库上搜索。

SQL笔记 自动保存的.docx

SQL笔记自动保存的

selectnameas姓名,ageas年龄,nicknameas昵称fromperson1whereAge<24;

selectnamefromperson1;

select*fromperson1;

selectGETDATE()as系统日期;

select1+1as列,GETDATE()as系统日期,NEWID()asGUID;

select1+2;

selectCOUNT(*)fromperson1as列数;

selectsum(Number)fromperson1whereage>22;

select*fromperson1orderbyAge;

select*fromperson1orderbyAgedesc,Numberdesc;

select*fromperson1whereage>22orderbyAgedesc,Numberdesc;

select*fromperson1whereNamelike'_n';

select*fromperson1whereNamelike'%j%';

select*fromperson1whereNickNameisnotnull;

select*fromperson1whereAge=20orAge=22orage=21;

select*fromperson1whereAgebetween20and22;

select*fromperson1whereAge>19andAge<23;

select*fromperson1whereAgein(20,21,22);

selectage,COUNT(*)fromperson1groupbyAge;

selectavg(Number),age,COUNT(*)fromperson1groupbyAge;

selectage,COUNT(*)fromperson1groupbyAgehavingCOUNT(*)>1;

selectage,COUNT(*)fromperson1whereNumber>2groupbyAge;

selectage,COUNT(*)fromperson1groupbyAgehavingNumber>1;

第六讲限制结果集行数

(用处是分页,用处很大,如新闻只显示十条)

1.Select*fromperson1orderbyagedesc;//表person1按age年龄进行降序排列。

2.Selecttop3*fromperson1orderbyagedesc;//先将表按age进行降序排列,然后选出表person1中年龄最大的三个人。

3.Selecttop3*fromperson1

Wherenumbernotin(selecttop5numberfromperson1orderbyagedesc)

Orderbyagedesc;//先将表person1按age降序排列,然后从年龄第六开始的前三个人的信息。

4.Rownumber函数简化实现

第七讲怎么去掉重复数据

createtableT_Employee11(FNumberVARCHAR(20),FNameVARCHAR(20),FAgeINT,FSalaryNUMERIC(10,2),PRIMARYKEY(FNumber));

insertintoT_Employee11(FNumber,FName,FAge,FSalary)values('DEV001','Tom',25,8300);

insertintoT_Employee11(FNumber,FName,FAge,FSalary)values('DEV002','Jerry',28,2300.80);

insertintoT_Employee11(FNumber,FName,FAge,FSalary)values('SALES001','John',23,5000);

insertintoT_Employee11(FNumber,FName,FAge,FSalary)values('SALES002','Kerry',28,6200);

insertintoT_Employee11(FNumber,FName,FAge,FSalary)values('SALES003','Stone',22,1200);

insertintoT_Employee11(FNumber,FName,FAge,FSalary)values('HR001','Jane',23,2200.88);

insertintoT_Employee11(FNumber,FName,FAge,FSalary)values('HR002','Tina',25,5200.36);

insertintoT_Employee11(FNumber,FName,FAge,FSalary)values('IT001','Smith',28,3900);

insertintoT_Employee11(FNumber,FAge,FSalary)values('IT002',27,2800);

//Alter用来向表中增加字段

AltertableT_EmployeeaddFSubCompanyVARCHAR(20);

AltertableT_EmployeeaddFDepartmentVARCHAR(20);

UPDATET_EmployeeSETFSubCompany='Beijing',FDepartment='Development'

WHEREFNumber='DEV001';

UPDATET_EmployeeSETFSubCompany='ShenZhen',FDepartment='Development'

WHEREFNumber='DEV002';

UPDATET_EmployeeSETFSubCompany='Beijing',FDepartment='HumanResource'

WHEREFNumber='HR001';

UPDATET_EmployeeSETFSubCompany='Beijing',FDepartment='HumanResource'

WHEREFNumber='HR002';

UPDATET_EmployeeSETFSubCompany='Beijing',FDepartment='InfoTech'

WHEREFNumber='IT001';

UPDATET_EmployeeSETFSubCompany='ShenZhen',FDepartment='InfoTech'

WHEREFNumber='IT002';

UPDATET_EmployeeSETFSubCompany='Beijing',FDepartment='Sales'

WHEREFNumber='SALES001';

UPDATET_EmployeeSETFSubCompany='Beijing',FDepartment='Sales'

WHEREFNumber='SALES002';

UPDATET_EmployeeSETFSubCompany='ShenZhen',FDepartment='Sales'

WHEREFNumber='SALES003';

查询

SelectFDepartmentFROMT_Employee;//取员工所在的部门的信息

SelectdistinctFDepartmentFROMT_Employee;//取员工所以的部门的信息,而且是不重复的

SelectFDepartment,FSubCompanyFROMT_Employee;

SelectdistinctFDepartment,FSubCompanyFROMT_Emloyee;//去掉完全重复的数据行,FDpartment和FSubCompany都一样的数据行,distinct是针对这两个字段的,而不是某一个字段

第八讲联合结果集

先创建一个临时工信息表t_tempemployee

Createtablet_tempemployee(fidcardnumbervarchar(20),fnamevarchar(20),fageint,primarykey(fidcardnumber));

insertintot_tempemployee(fidcardnumber,fname,fage)values('1234567890121','Sarani',33);

insertintot_tempemployee(fidcardnumber,fname,fage)values('1234567890122','Tom',26);

insertintot_tempemployee(fidcardnumber,fname,fage)values('1234567890124','Yalaha',38);

insertintot_tempemployee(fidcardnumber,fname,fage)values('1234567890125','Tina',26);

insertintot_tempemployee(fidcardnumber,fname,fage)values('1234567890126','Konkaya',29);

 

把两个查询结果合在一起后返回,用union,上下两个字段个数要一样,数据类型要相容。

Union将合并结果中的重复行去掉,如果不想去掉就用unionall

Selectfname,fagefromt_tempemployee

Union

Selectfname,fagefromt_employee;

将上下的字段个数补成一样的就可以联结

Selectfnumber,fname,fage,fdepartmentfromt_employee

Union

Selectfidcardnumber,fname,fage,'临时工,无部门'fromt_tempemployee

Selectfnamefromt_employee

Union

Selectfnamefromt_tempemployee

Selectfnamefromt_employee

Unionall

Selectfnamefromt_tempemployee

 

Selectfname,fagefromt_employee

Union

Selectfname,fagefromt_tempemployee

案例1:

查询正式工和临时工的最高年龄和最低年龄

Select'正式员工最高年龄',max(fage)fromt_employee

Unionall

Select'正式员工最低年龄',min(fage)fromt_employee

Unionall

Select'临时工最高年龄',max(fage)fromt_tempemployee

Unionall

Select'临时工最低年龄',min(fage)fromt_tempemployee

案例2:

查询每位正式员工的信息,包括工号、工资,并且在最后一行加上所有员工工资额合计。

Selectfnumber,fsalaryfromt_emlpoyee

Union

Select'工资合计',sum(fsalary)fromt_empoyee

第九讲数字函数

1.Getdate()获得系统日期

2.Newid()GUID算法

3.Abs()求绝对值如selectabs(-3)

4.Ceiling():

舍入到最大的整数,3.33将被舍入为4,2.89将被舍入为3,-3.61将被舍入为-3。

Ceiling在英文中是天花板的意思。

5.Floor():

舍入到最小整数。

3.33将被舍入为3,2.89将被舍入为2,-3.61将被舍入为-4。

Floor—地板。

6.Round():

四舍五入。

舍入到“离我半径最近的数”。

Round-半径.如selectround(3.1425,2)结果为3.14。

round(m,n)中的n代表小数点后面的位数。

7.Len():

计算字符串的长度,如selectlen(‘abcd’).selectfname,len(fname)fromt_employee.

8.lower(),upper():

转大写小写。

9.ltrim()去掉字符串左边的空格,rtrim()去掉字符串右边的空格。

Selectltrim(‘b’),selectrtrim(‘b’),selectltrim(rtrim(‘b’))去掉两边的空格.

10.Substring(string,start_position,length)取string中的子字符串,start_position为开始的位置,length为取的位数。

如selectsubstring('abcdefghijk',2,3)结果为bcd

11.getdate():

取当前日期

12.Dateadd(datepart,number,date),计算增加以后的日期。

参数date为待计算的日期;参数number为增量;参数datepart为计量单位(yearyy,yyyy年份;quarterqq,q季度;monthmm,m月份;dayofyeardy,y当年度的第几天;daydd,d日;weekwk,ww当年度的第几周;weekdaydw,w星期几;hourhh小时;minutemi,n分;secondss,s秒;millisecondms毫秒):

selectdateadd(day,-3,getdate()),

Selectdateadd(hh,1,getdate()).

13.datediff(datepart,startdate,enddate):

计算两个日期间的差额。

Datepart为计量单位,startdate为开始日期,enddate为结束日期。

如:

selectdatediff(hh,getdate(),dateadd(day,-3,getdate())).

案例:

1.计算员工入职的年数

selectfname,findate,datediff(year,findate,getdate())fromt_employee

2.计算员工入职的年数并按照年数分组,如:

入职一两的有多少个,入职二两年的有多少个。

Selectdatediff(year,findate,getdate()),count(*)fromt_employee

Groupbydatediff(year,findate,getdate())

14.datepart(datepart,date):

返回一个日期的特定部分,如:

selectdatepart(year,getdate()),datepart(month,getdate())

如:

根据入职的年份进行分组,计算不同年份入职员工的个数

Selectdatepart(year,findate),count(*)

Fromt_employee

Groupbydatepart(year,findate)

类型转换函数

15.Cast(expressionasdata_type)如:

selectcast(‘123’asint),selectcast(‘2008-08-08’asdatetime)

16.convert(data_type,expression)如:

selectconvert(datetime,’2008-08-08’)

第十讲空值处理函数

Selectisnull(fname,'佚名')as姓名fromt_employee

Isnull(expression,value):

如果expression不为空则返回expression,否则返回value。

CASE函数的用法,相当于switchcase

Caseexpression

Whenvalue1thenreturnvalue1

Whenvalue2thenreturnvalue2

Whenvalue3thenreturnvalue3

Elsedefaultreturnvalue

End

落后

例:

情形一:

case后面有表达式,表达式的值与when后面的值比较

selectfname,

caseflevel

when1then'普通客户'

when2then'会员'

when3then'VIP'

else'未知客户类型'

end

)as客户类型

fromt_customer

 

情形二:

case的后面没有表达式,在when后面进行判断

selectfname,

case

whenfsalary<2000then'低收入'

whenfsalarybetween2000and5000then'中等收入'

else'高收入'

end

)as收入水平

fromt_employee

运行结果:

 

练习1:

创建表并输入数据

createtableT_Scores(Datedate,Namenvarchar(50),Scorenvarchar(4))

insertintoT_Scores(Date,Name,Score)values('2008-08-08',N'拜仁','胜')

insertintoT_Scores(Date,Name,Score)values('2008-08-09',N'奇才','胜')

insertintoT_Scores(Date,Name,Score)values('2008-08-09',N'湖人','胜')

insertintoT_Scores(Date,Name,Score)values('2008-08-10',N'拜仁','负')

insertintoT_Scores(Date,Name,Score)values('2008-08-08',N'拜仁','负')

insertintoT_Scores(Date,Name,Score)values('2008-08-12',N'奇才','胜')

执行:

selectname,

sum

case

whenScore=N'胜'then1

else0

end

)as胜,

sum

case

whenscore=N'负'then1

else0

end

)as负

fromt_scoresgroupbyName

 

练习2

 

 

1.selecttop5DATEDIFF(SECOND,startdatetime,enddatetime)

fromcallrecords1

orderbyDATEDIFF(SECOND,startdatetime,enddatetime)desc

 

2.selectsum(DATEDIFF(SECOND,startdatetime,enddatetime))as总时长fromcallrecords1wheretelnumlike'0%'

 

3.selecttop3callernumber,sum(DATEDIFF(SECOND,startdatetime,enddatetime))fromcallrecords1

Wheredatediff(month,startdatetime,'2010-07-01')=0

groupbycallernumber

orderbysum(DATEDIFF(SECOND,startdatetime,enddatetime))desc

 

4.selecttop3callernumber,COUNT(*)fromcallrecords1

Wheredatediff(month,startdatetime,'2010-07-01')=0

groupbycallernumber

orderbyCOUNT(*)desc

5.selectcallernumber,telnum,DATEDIFF(SECOND,startdatetime,enddatetime)fromCallRecords1

unionall

select'汇总',

CONVERT(nvarchar(20),

sum((

case

whentelnumlike'0%'thenDATEDIFF(SECOND,startdatetime,enddatetime)

else0

end

))

)as市话总时长,

sum(

(case

whentelnumnotlike'0%'thenDATEDIFF(SECOND,startdatetime,enddatetime)

else0

end

))as长途总时长

fromcallrecords1

索引index

1.全表扫描:

对数据进行检索(select)效率最差的是全表扫描,就是一条条的找。

2.索引相当于目录,如查字典用目录,提高查询效率。

select*fromcallrecords1whereCallerNumber='003'

3.经常在where中用到的字段,要建索引

4.索引多的话查询速度快,但比较占空间,插入更新删除要更新索引,因此速度慢。

5.即使创建了索引,仍然有可能全表扫描,比如like、函数、类型转换

表连接Join

Innerjoin、leftjoin、rightjoin

 

 

子查询

(select*fromt_orders)的结果也是一个表

 

Top,row_number()

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2