【网学网提醒】:本文主要为网学会员提供SQLServer常用语法和函数及练习,希望对需要SQLServer常用语法和函数及练习网友有所帮助,学习一下!
SQL数据类型:
1.数据类型面加“n”的表示字符类型是字符串的,
2.前有“var”的表示可变的如:varchar(10)和char(10)是不同的char(10)一定是
10个字符如果不够的用空格填充,而varchar(10)不够就不够。
3.bit:bool类型可选值,1,0
SQL语句(增删改就不写了)
1.创建表person
createdatabaseperson
go
createtableT_person(idintnotnullPrimarykey,namenvarchar(50)null,age
intnull)
2.删除表
droptableT_person
3.注意:设置主键是只有int,uniquidentfier(Guid)两种类型其他都是不合理的,要想主键是自动增长的在表,设计中把主键标示规范改为”是“一张表只能有一个标识列
在SQL中Guid的调用方法是:newid(),在VS中是GuidID=Guid.NewGuid();所以在表设计时把表的主键类型设为uniquidentfier,之后再插入数据时这样写:
insertintoPerson4(ID,Name,Age)values(newid(),'Tom','15')
SQL语句的检索(一般检索select在此不写)
createtableT_Employee(FNumbervarchar(20)priMarykey,FName
varchar(20),FAgeint,FSalaryint)
insertinto
T_Employee(Fnumber,Fname,FAge,FSalary)values('Dev001','Tom',22,8300)
insertinto
T_Employee(Fnumber,FName,FAge,FSalary)values('Dev002','kom',24,3300)
insertinto
T_Employee(Fnumber,Fname,FAge,FSalary)values('Dev003','jim',25,2000)
insertinto
T_Employee(Fnumber,FName,FAge,FSalary)values('Dev004','mary',27,2300)
insertinto
T_Employee(Fnumber,Fname,FAge,FSalary)values('Dev005','kuki',240,2500)
insertinto
T_Employee(Fnumber,FName,FAge,FSalary)values('Dev006','lisa',25,1800)
1.给个个列取别名:SelectFnameas,Fageas年龄,Fsalaryas月薪fromT_employee
whereFsalary<5000
1
2.检索是时不一定要检索表的信息
select1+1as壹加壹,getdate()as日期,newid()asGuid
3.检索表中共有多少条数据
selectcount(*)fromT_EmployeewhereFsalary>5000
4.聚合函数的用法:主要对表中的数据进行统计“最大值,最小值,平均值等”.聚合函数不能出现在where语句中
selectmax(fsalary)fromT_Employee
selectmin(fsalary)fromT_Employee
selectsum(fAge)fromT_Employee
selectavg(fsalary)fromT_Employee
5.升序降序,orderby+字段名+排序方式,Acs升序,desc降序,进行过滤式where在order
by之前
select*fromT_EmployeewhereFAge>24orderbyFAgeDesc,FsalaryAsc
2
6.模糊查询:多字符通配符为“%”。其中“k%”匹配以K开头的任意长度字符。
select*fromT_EmployeewhereFNumberlike'Dev%'表示已Dev开头的匹配
7.空值处理
我要查询表中Fname不为空的值我这这样写:
select*fromT_EmployeewhereFname<>null
这样是错误的
select*fromT_EmployeewhereFnameisnotnull
3
SQL数据的分组
Groupby关见词。注意Select中的东西或是聚合函数,或是GroupBy中的,不会是其他的,where要放在Groupby前面
例1,selectFAgeas年龄,count(*)as人数fromT_Employee
GroupbyFAge
例2selectFAgeas年龄,max(Fsalary)as人数fromT_Employee
GroupbyFAge
例3selectFAgeas年龄,count(*)as人数fromT_Employee
whereFsalary>2000
GroupbyFAge
selectFAgeas年龄,count(*)as人数fromT_Employee
wherecount(*)>1
GroupbyFAge
聚合函数不能出现在where语句中,若要用用Having,放在GroupBy之后having不能代替where只是用聚合函数时用having,having是对分组织后的数据进行过滤,where是对原始数据过滤
selectFAgeas年龄,count(*)as人数fromT_Employee
GroupbyFAge
havingcount(*)>1
4
SQL限制检索
如要查询表中工资由低到高检索第3名开始一共取2人的信息
selecttop2*fromT_EmployeewhereFNumbernotin(selecttop3FNumberfromT_EmployeeorderbyFsalaryDesc)
SQL的过滤重复:
过滤重复用到的关键字是distinct,distinct只能过滤整行重复的数据,而不是某一个数据相同修改表
altertableT_EmployeeAddFsubCompanyvarchar(20)altertableT_EmployeeAddFDepartmentvarchar(20)updateT_EmployeesetFsubCompany='beijing',FDepartment='development'whereFNumber='Dev001'updateT_EmployeesetFsubCompany='shenzhen',FDepartment='development'whereFNumber='Dev002'updateT_EmployeesetFsubCompany='beijing',FDepartment='development'whereFNumber='Dev003'updateT_EmployeesetFsubCompany='beijing',FDepartment='Infotech'whereFNumber='Dev004'updateT_EmployeesetFsubCompany='shenzhen',FDepartment='Infotech'whereFNumber='Dev005'updateT_EmployeesetFsubCompany='beijing',FDepartment='Sale'whereFNumber='Dev006'updateT_EmployeesetFsubCompany='beijing',FDepartment='Sale'whereFNumber='Dev007'1.selectFDepartment,FsubCompanyfromT_Employee2.selectdistinctFDepartment,FsubCompany
fromT_Employee
5
SQl联合结果集
关键词:union作用是两张表某些字段和在一起这些字段个数要相同,类型要相容。用union连接时会自动过滤掉两表中重复的字段这样会导致字段文件个数的丢失,为了解决用unionall如果不想去掉重复行不能去all新建表
createtableT_TemEmployee(FldCardNumbervarchar(20)Primarykey,Fname
varchar(20),FAgeint)
insertinto
T_TemEmployee(FldCardNumber,Fname,FAge)values('162736187286','lili',33)
insertinto
T_TemEmployee(FldCardNumber,Fname,FAge)values('234123232323','lisa',22)
insertinto
T_TemEmployee(FldCardNumber,Fname,FAge)values('545465676768','xiaoli',26)
insertinto
T_TemEmployee(FldCardNumber,Fname,FAge)values('434556576754','maomao',29)
insertinto
T_TemEmployee(FldCardNumber,Fname,FAge)values('443244354323','wawa',21)
selectFname,FAgefromT_TemEmployee
unionall
selectFname,FAgefromT_Employee
有时使用到报表
select'正式员工最高年龄',max(FAge)fromT_Employee
unionall
select'正式员工最小年龄',min(FAge)fromT_Employee
unionall
select'临时工最大年龄',max(FAge)fromT_Employee
unionall
select'临时工最小年龄',min(FAge)fromT_Employee
6
SQL中的函数
1.Ceiling():舍入最大整数,3.33设为4,
selectceiling(4.65)
-3.33舍为-3;
2.Floor():舍入最小整数。
selectfloor(4.65)
3.Len():计算字符串的长度。
selectlen('abj')
4.Lower(),
upper():转小写,转大写。
ASddd')
Selectlower('ASddd')
5.Ltrim():去掉字符串左边的空格。
Selectltrim('
6.SubString(string,start_posistion,length)
Selectsubstring('ASddd',2,2)
7.Getdate():取得当前时间。8.DateAdd(datepart,number,date)计算增加以后的日期
selectDateAdd(month,1,getdate())
9.DateDiff(datepart,stardate,enddate):计算两个日期间的差距。在T_Employee表中加入入职时间FInDate计算员工入职年限
selectFname,FInDate,Datediff(year,Findate,getdate())fromT_Employee
10.Datepart(datepart,date):返回一个日期的特定部分计算每一年入职人数
selectdatepart(year,FIndate),count(*)//按每一年进行分组
fromT_Employee
groupbydatePart(year,FIndate)
7
SQL空值处理函数
关键字:isnull,
SQL语句中的Case(重点)
注意若是逻辑判断case后什么都没有,
selectFNameas,
(
case
whenFsalary<2000then'低收入'
whenFsalary>=2000andFsalary<5000then'中等收入'
else'高收入'
end
)as收入水平
fromT_Employee
8
SQL表连接
关键字Join
--客户表
createtableT_Customers(Idintnotnullprimarykey,[name]
nvarchar(50)null,Ageintnull)
insertintoT_Customers(ID,[name],Age)values(1,'tom','10')
insertintoT_Customers(ID,[name],Age)values(2,'jerry','15')
insertintoT_Customers(ID,[name],Age)values(3,'jokn','22')
insertintoT_Customers(ID,[name],Age)values(4,'lily','18')
insertintoT_Customers(ID,[name],Age)values(5,'lucy','18')
--订单
CreateTableT_Orders(IdintnotnullPrimarykey,BillNo
nvarchar(50),CustomerIdintnull)
insertintoT_Orders(Id,BillNo,CustomerId)values(1,'001',1)
insertintoT_Orders(Id,BillNo,CustomerId)values(2,'002',1)
insertintoT_Orders(Id,BillNo,CustomerId)values(3,'003',3)
insertintoT_Orders(Id,BillNo,CustomerId)values(4,'004',2)
insertintoT_Orders(Id,BillNo,CustomerId)values(5,'005',2)
insertintoT_Orders(Id,BillNo,CustomerId)values(6,'006',5)
insertintoT_Orders(Id,BillNo,CustomerId)values(7,'007',4)
insertintoT_Orders(Id,BillNo,CustomerId)values(8,'008',5)
T_Order订单表中CustomerId是表T_Costomer客户表中ID的外键例(1)查询每个订单用户的和年龄(用到两张表,表一的,年龄,表二的订单号,)
selecto.BillNo,c.Name,c.Age
fromT_CustomersascjoinT_Ordersasoono.CustomerId=c.Id
9
--显示年龄大于平均岁的顾客的订单号,,年龄
selecto.BillNo,c.Name,c.Age
fromT_CustomersascjoinT_Ordersasoono.CustomerId=c.Id
wherec.Age>(selectavg(Age)fromT_Customers)
子查询
将一个查询语句作为一个结果集以供其他SQL以供其他语句使用,
10