网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > SQL语法 > 正文

SQLServer常用语法和函数及练习

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

【网学网提醒】:本文主要为网学会员提供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
    
设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师