• T-SQL语言基础


    1.T-SQL语言

    • CREATE:创建新对象,包括数据库、表、视图、过程、触发器和函数等常见数据库对象。
    • ALTER:修改已有对象的结构。
    • DROP:用来删除已有的对象。有些对象是无法删除的,因为它们是与模式捆绑的。如果表中包含的数据参与了一个关联,或者另一个对象依赖要删除的对象,就不能删除它。

    1.1创建表

    CREATETABLE[dbo].[Student](

    [StudentID][int]NULL,

    [Studentname][varchar](50) COLLATE Chinese_PRC_CI_AS NULL,

    [Class][varchar](50) COLLATE Chinese_PRC_CI_AS NULL,

    [Sex][varchar](50) COLLATE Chinese_PRC_CI_AS NULL

    )

    1.2创建视图

    视图存储在数据库中,但并不保存数据,指示一个经过优化的SELECT查询。

    CREATEVIEW[dbo].[View_Employee]

    AS

    SELECT dbo.Employees.LastName AS LName, dbo.EmployeeTerritories.EmployeeID AS EpID,
    dbo.EmployeeTerritories.TerritoryID AS TyID,

    dbo.Employees.FirstName
    AS FName

    FROM dbo.Employees INNERJOIN

    dbo.EmployeeTerritories
    ON dbo.Employees.EmployeeID = dbo.EmployeeTerritories.EmployeeID

    1.3创建存储过程

    存储过程可以执行操作和业务功能,例如插入,更新,删除表数据。通过参数传递,判断是选择执行的操作。输入需在AS字符前定义。

    CREATEPROCEDURE sqInsertOrUpdateProduct

    @ProductNamenvarchar(50)

    ,
    @ProductNumbernvarchar(25)

    ,
    @StdCostmoney

    AS

    IFEXISTS(SELECT*FROM Production.Product WHERE

    ProductNumber
    =@ProductNumber)

    Update Production.Product SET NAME =@ProductName,

    StandardCost
    =@StdCostWHERE

    ProductNumber
    =@ProcuctNumber

    ELSE

    INSERTINTO Production.Product

    (Name,ProductNumber,StandardCost)

    SELECT@ProdcutName

    ,
    @ProductNumber

    ,
    @StdCost

    1.4创建触发器

    触发器对表的记录执行特定的操作时执行。触发器通常应用特殊的业务规则来保证数据的完整性。触发器独有的特性包括赋予DML的操作、隐式事务控制,以及虚表引用。

    CREATETRIGGER Upd_JG ON dbo.sys_zzjg

    FORUPDATE

    AS

    ifUpdate(jgid)

    begin

    update sys_yonghu set sys_yonghu.jgid=i.jgid

    from sys_yonghu Sr,deleted d

    ,inserted i
    where Sr.jgid=d.jgid

    End

    1.5创建用户自定义函数

    主要实现定制的业务逻辑。CREATE命令之后是函数名,函数名后的括号中包含对一个或多个参数的引用。每个参数后跟数据类型。Returns关键字后的文本表名函数返回的数据类型。

    2.数据检索

    DML(Data Manipulation Language)数据操纵语言。

    子句

    解释

    SELECT

    后跟一组列的列表,或者一个星号,表示要返回所有的列

    FROM

    后跟一个表或视图的名字,或者带有连接表达式的多个表

    WHERE

    后跟过滤规则

    ORDER BY

    后跟一组列的列表,用于对这些列进行排序

    2.1列的选择

    SELECT yhid,yhmc FROM Sys_Yonghu orderby yhid

    返回yhid,yhmc对应的列。用(*)来代表所有列执行查询会降低处理器的效率,一般尽量不是用(*)来返回所有列数据。

    在执行多表查询的时候,如果表之间有相同名称的列,必须制定所属表。例如上例的yhid为Sys_Yonghu.yhid

    2.2列的别名

    别名的设置主要方便业务层,数据层编码人员对列明的理解和描述。常见别名方法有

    语法

    描述

    列AS别名

     

    列别名

     

    别名=列

     

    SELECT yhid as UserName FROM Sys_Yonghu

    SELECT yhid UserName FROM Sys_Yonghu

    SELECT UserName = yhid FROM Sys_Yonghu

    2.3被计算和继承的列

    SELECT UnitsInStock-UnitsOnOrder as margin from Products

    Margin为被计算生成的新列

    2.4行的过滤

    行的过滤有两种方法:是用WHERE子句根据过滤条件来限制每个行,或使用TOP子句使列表中只包含指定数量的列。

    2.5 WHERE子句

    SQL Server在检索数据之前会先运行WHERE子句,节省内存和I/O资源。

    select yhmc from sys_yonghu where sex=''

    2.51比较运算符

    比值与限定值通常可总结为:一个值等于、小于或大于另一个值。

    运算符

    描述

    =

    等于。可用于几乎所有数据类型

    <>或者!=

    不等于

    小于。用于数值与日期

    大于

    !<

    不小于

    !>

    不大于

    <=

    小于等于

    >=

    大于等于

    Like

    用于对字符型的值进行通配符匹配

    select yhmc from sys_yonghu where sfqy!=0

    select yhmc from sys_yonghu where jgid like'0102%'

      对于Like运算常用的通配符有

    运算符

    说明

    %

    0个或多个字符

    _

    单个字符

    []

    在指定范围或集合内的单个字符

    [^]

    不在指定范围或集合内的单个字符

    找出以某个值结束的字符串,只需把通配符放在字符串的开头

    select jgid from sys_yonghu where jgid like'%02'

    运行结果:0102

    找出包含某个字符串的值,在开头和结尾使用通配符

    select jgid from sys_yonghu where jgid like'%104%'

    运行结果:0104

    找出包含某个字符串的值,使用下划线

    select jgid from sys_yonghu where jgid like'_104'

    运行结果:0104

    找出单个字符在指定范围或集合中的值,可以使用方括号

    select jgid from sys_yonghu where jgid like'010[24]'

    运行结果:0104,0102

    在一个范围内搜索,在字母之间添加短横线

    select jgid from sys_yonghu where jgid like'010[0-4]'

    运行结果:0104,0102

    搜索不包含某些字符的值,使用^符号

    select jgid from sys_yonghu where jgid like'010[^4]'

    运行结果:0102

    查找不类似某规则的字段,使用NOT

    select jgid from sys_yonghu where jgid notlike'0102%'
    运行结果:01,0104

    2.52逻辑比较

    逻辑门分为三种:与(And)、或(Or)、非(Not)

    And运算符:如果整个表达式的结果是真,则表达式中的每个语句都必须是真。只有匹配where后面两个过滤器才能查询得到。

    Or运算符:只要执行匹配任何一个条件,就会被返回。

    NOT运算符:该运算符不是独立的,它是一个可以放在任何逻辑表达式前面的修饰符,能得到与结果相反的结果。NOT运算符通常效率比较低,SQL Server实际上将衔处理基本表达式,然后才提取不包含在原结果中的行。

    select yhmc from sys_yonghu where jgid like'0102%'andNot sex=''

    2.53 NULL

    Null值不等于任何值,甚至它自己。可用IS运算符来测试Null。也可以使用IS NOT来测试非NULL值。

    select yhmc from sys_yonghu where yhkl isnull

    2.54被扩展的过滤技术

    select ProductName from Products where UnitPrice>10and UnitPrice<19

    一般为日期和数值的范围匹配。

    2.55 BETWEEN运算符

    简化范围表达式,在值范围之间,并包括值范围的边界。

    2.56 IN()函数

    可也把一个字段与列表中的数值进行匹配。

    elect ProductName from Products where UnitPrice in (10,11,12,18,19)

    in函数也可以用于子查询。

    2.57运算符优先级

    NOT运算符最先被处理,其次是AND,然后是OR,最后才考虑运算符。

    2.58使用括号

    使用括号来分隔表达式,以制定运算符的优先次序。处理多个运算时,使用括号就不用关心运算符的正常优先级。

    2.59结果排序

    排序规则:如果希望行以某种顺序返回,就必须使用ORDER BY 子句来强制排序。ORDER BY 子句总是放在WHERE子句后面,它可以包含一个或多个列,每个列之间用括号分割。默认为升序ASC,如果需要降序则使用DESC

    select ProductID,ProductName from Products where UnitPrice>18orderby ProductID DESC

    2.510排在前面的值

    返回排序排在前面的值,可以指定固定数量的行或者指定总行数的百分比。 

    selecttop5 ProductID,ProductName from Products where UnitPrice>18orderby ProductID DESC

    WITH TIES语句:把所有和最后一行相同的已排序记录都加到结果集中。

    selecttop5WITH TIES UnitPrice from Products orderby ProductID DESC

    百分比:用百分比来指定整个结果集的百分比,SQL SERVER对记录进行计算,并圆整为最近的整数。

    selecttop5PERCENT UnitPrice from Products orderby ProductID DESC
  • 相关阅读:
    POJ 1258 Agri-Net (prim水题)
    POJ 1258 Agri-Net (prim水题)
    Call to your teacher
    Call to your teacher
    Redis 笔记与总结8 PHP + Redis 信息管理系统(分页+好友关注)
    用R语言求置信区间
    用R语言求置信区间
    竞品分析报告正确的打开方式
    竞品分析报告正确的打开方式
    内容分析在用户反馈分析中的应用
  • 原文地址:https://www.cnblogs.com/sea_peak/p/3458529.html
Copyright © 2020-2023  润新知