T-SQL数据类型
- 格式:ppt
- 大小:438.50 KB
- 文档页数:23
T-SQL简介及基本语法⼀、T-SQL概述SQL Server⽤于操作数据库的编程语⾔为Transaction-SQL,简称T-SQL。
T-SQL与PL/SQL不同,并没有固定的程序结构。
T-SQL包括以下4个部分:DDL:定义和管理数据库及其对象,例如create、alter和drop等。
DML:实现对数据库表各对象的操作,例如insert、update等。
DCL:数据控制语⾔,实现对数据库进⾏安全管理和权限管理等控制,例如grant、revoke、deny等。
附加的语⾔元素。
T-SQL的附加语⾔元素,包括变量、运算符、函数、注释和流程控制语句等。
在T-SQL中,命令和语句的书写是不区分⼤⼩写的。
⼆、T-SQL编程基础1、标识符①T-SQL规则标识符由字母、数字、下划线、@、#、$符号组成,其中字母可以是a-z或A-Z,也可以是来⾃其他语⾔的字母字符。
⾸字符不能为数字和$。
标识符不允许是T-SQL保留字。
标识符内不允许有空格和特殊字符长度⼩于128②界定标识符 对于不符合标识符规则的标识符,则要使⽤界定符⽅括号([])或双引号(“”)将标识符括起来。
如标识符[My Table]、“select”内分别使⽤了空格和保留字select。
2、数据类型在SQL Server中提供了多种系统数据类型。
除了系统数据类型外,还可以⾃定义数据类型。
①系统数据类型(1)精确数字数据类型int 存储整型数值,存储数值范围为-231~231-1。
bigint bigint⽐int能存储更⼤的数值,存储数值范围为-263~263-1。
smallint 数据类型的范围数值⽐int更⼩,在-215~215-1之间。
定义这种数据类型的时候⼀定要⼩⼼,要确定存储的数据不会超过smallint所能存储的数值范围。
tinyint 数据类型的范围数值⽐smallint更⼩,存储从 0 到 255 的整型数据。
decimal/numeric decimal[(p,s)]和numeric[(p,s)]这两种数据类型⽤于存储相同精度和范围的数据(⼩数点的左、右两边存储的数值位数相同),所能存储的数值范围为-1038+1~1038-1。
第七课T-SQL语言基础课前导读基础知识重点知识基础知识SQL语言概述。
重点知识数据类型、常量、运算符和常用函数,读者应结合上机实战熟练相关操作。
课堂讲解在SQL Server 2000中,企业管理器是一个功能强大、操作方便的图形化管理工具,几乎所有的操作都可以在其中完成,但它仍不能完全取代SQL语句。
无论是SQL Server 2000,还是在其他的数据库中,SQL都扮演了重要的角色,要成为一名突出的数据库开发人员,首先就应该掌握SQL语言。
本课将介绍SQL语言的基本概况、数据类型、常量、运算符和常用函数等内容。
SQL语言概述数据类型常量运算符常用函数SQL语言概述SQL是Structured Query Language(结构化查询语言)的缩写,是关系数据库使用的标准数据库查询语言。
SQL在20世纪70年代由IBM开发出来,随着关系数据库管理系统的不断推出,SQL语言被广泛应用。
由于关系数据库供应商都根据需要定义了自己的SQL语法规则,例如,Microsoft使用的SQL为Transact-SQL(简称T-SQL),Oracle使用的SQL为SQL-Plus。
为了统一各种数据库产品中SQL语法,ANSI(American National Standard Institute,美国国家标准局)制定了SQL语言标准。
最早的ANSI标准于1986年完成,它也被叫做SQL-86,目前新的SQL标准是1992年制定的SQL-92。
很显然,各个数据库供应商不可能抛弃自己的专长来适应ANSI标准,所以业界使用的SQL语言基本上是以SQL-92为基础,在加上各供应商自己的特有语法。
所以,SQL语言标准有“业界标准”和“ANSI标准”之分。
SQL语言具有“非过程性”的特点,使用SQL编写的程序不能独立运行,必须在特定的数据库管理系统中使用,这与“过程性”的高级程序设计语言,如VB、VC等不同。
SQL语言中的语言可从功能上分为3类:数据定义语言DDL(Data Definition Language)、数据处理语言DML(Data Manipulation Language)和数据控制语言DCL(Data Control Language)。
数据类型详细说明T-SQL 数据类型在SQL Server 中,每个列、局部变量、表达式和参数都具有一个相关的数据类型。
特别是列,数据类型是列(字段)最重要的属性之一,代表了数据的格式。
数据类型的出现是为了规范存储和使用数据。
SQL Server 的数据类型可以分为系统数据类型和用户自定义数据类型两种。
(1)系统数据类型不同的数据库管理系统支持的数据类型略有差别,SQL Server 2021 提供的数据类型分为数字类型、货币类型、日期和时间类型、字符串数据类型、CLR数据类型、空间数据类型和其他数据类型。
我们只介绍几种常用的数据类型。
A. 数字数据类型数字数据包括正数、小数、分数和整数。
在SQL Server 2021中,数字数据类型分为整型数字类型和非整型数字类型。
非整型数子类型又分为精确数字类型和近似数字类型。
数字数据类型说明如表4-1所示。
数据类型整型bigint 数字 int smallint tinyint 描述长度为8个字节的大整型数字长度为4个字节的标准整型数字长度为2个字节的小整型数字长度为1个字节的微整型数字非整精decimal[(p[,s])] 型数确字数字 p为精度,指定小数点左边和右边可以存储的十进制数字的最大个数。
精度必须是从1到最大精度之间的值。
最大精度为38。
p的默认值为18。
s为小数位数,指定小数点右边可以存储的十进制数字的最大个数。
s的默认值是0。
p和s必须遵循规则:0≤s≤p。
例如:decimal(6,2) 表示小数点后有2位数字,小数点前4位数字的定点小数。
numeric [(p[,s])] 同 decimal 近float[(n)] 似数字 real 其中n为用于存储float数值尾数的位数(以科学计数法表示),如果指定了n,则它必须是介于1和3之间的某个值。
n的默认值为53。
不过,SQL Server 并不是直接将n 用于确定float 的存储长度,而是将n 进行如下对应:如果1 ≤n ≤24 ,则将n 视为24,存储大小为4个字节。
数据库T-SQL语⾔操作(T-SQL语句、数据库、表、视图、索引)T-SQL语⾔按⽤途分四部分1. 数据定义语⾔(CREATE,DROP,ALTER)2. 数据操作语⾔(INSERT,DELETE,UPDATE)3. 数据查询语⾔(SELECT)4. 数据控制语⾔(GRANT,REVOKE,DENY)数据类型1. 系统数据类型2. ⽤户⾃定义数据类型(建⽴⽅式:a.图形化⽅式 b.命令⽅式)1use TEST2EXEC sp_addtype sno,'varchar(10)','nonull'3EXEC sp_droptype sno变量命名规则:字母、下划线、@或#开头,但不能全为下划线、@或#不能为“关键字”,不能嵌⼊空格及其他特殊字符,如需使⽤则需要双引号或⽅括号括起1.局部变量:由⽤户声明,必须以@开头,只在定义该变量的过程中有效,局部变量必须先声明后使⽤注意:第⼀次声明变量时,其值设置为NULL。
局部变量不能使⽤“变量=变量值”的格式进⾏初始化,必须使⽤SELECT或SET语句来设置其初始值。
如果声明字符型的局部变量,⼀定要在变量类型中指明其最⼤长度,否则系统默认其长度为1。
若要声明多个局部变量,请在定义的第⼀个局部变量后使⽤⼀个逗号,然后指定下⼀个局部变量名称和数据类型。
1USE student2DECLARE@var1char(10),@var2int3SET@var1='number'4select@var2=cgrade5from sc6where sno='201810010'78print@var1+"s"2.全局变量:由系统定义,供SQL server系统内部使⽤的变量,任何程序任何时间都可以调⽤。
通常以“@@”开头。
T-SQL语句1.注释语句(1) --(2) /*……*/2.批处理--GO3.控制流程语句(1) begin...end语句(相当于C语⾔中的{} )(2) if...else语句(可嵌套)(3)case语句(多条件选择语句)(4)print语句(屏幕输出语句)(5)while语句(有条件的循环语句)(6)goto语句(⽆条件跳转语句)(7)break语句(8)continue语句4.常⽤函数(系统函数、⽤户⾃定义函数)⼀些系统函数:(1)字符串函数(2)数学函数(3)⽇期和时间函数(4)聚合函数注意:⽤户⾃定义函数:1.分类:标量值函数:返回单个值内联表值函数:返回可更新的表多语句表值函数:返回不可更新的表2.标量值函数命令⽅式创建1CREATE FUNCTION f2(@a real,@b real) 2RETURNS real3AS4BEGIN5IF@a>=@b6RETURN@a7RETURN@b8END910PRINT'最⼤值为'11PRINT dbo.f2(77,56)1CREATE FUNCTION f3(@n real)2RETURNS real3AS4BEGIN5DECLARE@i real,@sum real6SET@i=07SET@sum=08WHILE@i<@n9BEGIN10SET@i=@i+111SET@sum=@sum+@i12END13RETURN@sum14END1516PRINT dbo.f3(10)3.⾃定义函数的调⽤(1)标量值函数可以使⽤select、print、exec调⽤(2)表值函数只能⽤select调⽤4.删除⽅式drop function 函数名数据库数据库概述1.数据库常⽤对象:表、数据类型、视图、索引、存储过程、触发器系统数据库:master、model、tempdb、msdb2.数据库存储结构(数据库⽂件、数据库⽂件组):数据库⽂件:存放数据库数据和数据库对象的⽂件。
sqlite3中的数据类型大多数的数据库引擎(到现在据我们所知的除了sqlite的每个sql数据库引擎)都使用静态的、刚性的类型,使用静态类型,数据的类型就由它的容器决定,这个容器是这个指被存放的特定列。
Sqlite使用一个更一般的动态类型系统,sqlite中,值的数据类型跟值本身相关,而不是与它的容器相关。
Sqlite的动态类型系统和其他数据库的更为一般的静态类型系统相兼容,但同时,sqlite中的动态类型允许它能做到一些传统刚性类型数据库所不可能做到的事。
1.存储类和数据类型每个存放在sqlite数据库中(或者由这个数据库引擎操作)的值都有下面中的一个存储类:●NULL,值是NULL●INTEGER,值是有符号整形,根据值的大小以1,2,3,4,6或8字节存放●REAL,值是浮点型值,以8字节IEEE浮点数存放●TEXT,值是文本字符串,使用数据库编码(UTF-8,UTF-16BE或者UTF-16LE)存放●BLOB,只是一个数据块,完全按照输入存放(即没有准换)从上可以看出存储类比数据类型更一般化。
比如INTEGER存储类,包括6中不同长度的不同整形数据类型,这在磁盘上造成了差异。
但是只要INTEGER值被从磁盘读出进入到内存进行处理,它们被转换成最一般的数据类型(8-字节有符号整形)。
Sqlite v3数据库中的任何列,除了整形主键列,可以用于存储任何一个存储列的值。
sql语句中的中所有值,不管它们是嵌入在sql文本中或者是作为参数绑定到一个预编译的sql语句,它们的存储类型都是未定的。
在下面描述的情况中,数据库引擎会在查询执行过程中在数值(numeric)存储类型(INTEGER和REAL)和TEXT 之间转换值。
1.1布尔类型Sqlite没有单独的布尔存储类型,它使用INTEGER作为存储类型,0为false,1为true1.2 Date和Time DatatypeSqlite没有另外为存储日期和时间设定一个存储类集,内置的sqlite日期和时间函数能够将日期和时间以TEXT,REAL或INTEGER形式存放●TEXT 作为IS08601字符串("YYYY-MM-DD HH:MM:SS.SSS")●REAL 从格林威治时间11月24日,4174 B.C中午以来的天数●INTEGER 从 1970-01-01 00:00:00 UTC以来的秒数程序可以任意选择这几个存储类型去存储日期和时间,并且能够使用内置的日期和时间函数在这些格式间自由转换2.0 类型近似为了使sqlite和其他数据库间的兼容性最大化,sqlite支持列上“类型近似”的观点,列的类型近似指的是存储在列上数据的推荐类型。
SQLServer中T-SQL数据类型转换详解常⽤的转换函数是 cast 和 convert,⽤于把表达式得出的值的类型转换成另⼀个数据类型,如果转换失败,该函数抛出错误,导致整个事务回滚。
在SQL Server 2012版本中,新增两个容错的转换函数:try_cast 和 try_convert,如果转换操作失败,该函数返回null,不会导致整个事务失败,事务继续执⾏下去。
注意:对于SQL Server显式定义的不合法转换,try_cast 和 try_convert 会失败,抛出错误信息:Explicit conversion from data type int to date is not allowed.select try_cast(1 as date)转换函数是parse 和 try_parse,只⽤于把字符类型转换为 date/time 和数字类型,在解析字符时会产⽣⼀定的性能消耗。
⼀,时间类型转换在把⽇期/时间类型转换成字符串时,常⽤的转换函数是Convert和Cast,convert函数能够在⼀定程度上显式控制⽇期/时间的显⽰格式,⽽cast对⽇期/时间类型的显⽰格式,⽆法显式控制,我推荐使⽤另⼀个功能更强⼤的函数:FORMAT,该函数⽤于把⽇期时间类型,按照指定的格式转换成字符串,也可以把数值按照特定的格式输出。
1,常⽤的转换函数convert 常⽤于转换date,datetime 等⽇期/时间类型,通过指定style参数,能够控制数据显⽰的格式CAST ( expression AS data_type [ ( length ) ] )CONVERT ( data_type [ ( length ) ] , expression [ , style ] )常⽤的style及其显⽰格式如下:101 mm/dd/yyyy 110 mm-dd-yyyy 111 yyyy/mm/dd 112 yyyymmdd 120 yyyy-mm-dd hh:mm:ss 121 yyyy-mm-ddhh:mm:sssssssCONVERT函数的style是数字,记忆起来⽐较困难,只能按照系统定义的格式来显⽰,不够灵活。
T-SQL入门攻略之1-初识T-SQL--> Title : T-SQL入门攻略之1-初识T-SQL--> Author : wufeng4552--> Date : 2010-03-221:SQL与T-SQL1.1SQL语言SQL 是Structured Query Language的缩写,翻译为”结构化查询语言”SQL语言可以分为四类:数据查询语言(Data Query Language)如: select数据定义语言(Data Definition Language)如: create ,alter,drop数据操纵语言(Data Manipulation Language)如:insert ,update,delete数据控制语言(Data Control Language)如:grant,revoke1.2 T-SQL语言Transact-SQL 即事务SQL,也简称为T-SQL,它是微软公司对SQL语言的扩充,是SQL语言的超集,是应用程序与SQLServer数据库引擎沟通的主要语言.主要由以下几个部分组成.1.2.1数据定义语言Data Definition Language ,DDL主要用于创建数据库及相关对象,修改及删除数据库对象.如:Create 创建数据库对象Alter 修改数据库对象Drop 刪除数据库对象1.2.2数据控制语言Data Control Language,DCL 用于设置或者更改用户对数据库访问的权限.Grant 赋予用户权限Deny 禁止访问数据库对象,且无法从其他角色继承权限Revoke收回权限1.2.3数据查询语言Data Query Language,DQLSelect1.2.4数据操纵语言Data Manipulation Language,DML 直接或间接操作表中的数据使表中数据发生变化Insert 插入数据Update 更新数据Delete 删除数据1.2.5系统存储过程System Stored Procedure 以SP_开头,保存在master数据库中.1.2.6一些附加的语言元素1.2.6.1注释单行注释--(两个连续的减号)多行注释/* */如:declare @I int --定義編量set @i=9999/*賦值*/1.2.6.2变量局部变量如: declare @I int全局变量如: select @@version1.2.6.3 运算符1.2.6.4 函数1.2.6.5流程控制语句2:T-SQL执行方式2.1直接调用执行2.2嵌入式执行2.3模块绑定执行2.4通过调用层接口(CLI)执行3:批处理3.1概念:是同时从应用程序发送到MSSQL并得以执行的一组单条或者多条的T-SQL语句.MSSQL将批处理语句编译成单个可执行的单元,称为执行计划,执行计划中的语句每次执行一条.在T-SQL中通常遇到两类错误:编译错误与运行时错误编译错误:是编译时产生的错误,如语法错误会导致编译错误create table tb(ID)/*訊息173,層級15,狀態1,行1資料行'ID' 的定義必須包含資料類型。
SQL Server为了实现T-SQL的良好性能,提供了丰富的数据类型。
一、数值型数据1.BigintBigint型数据可以存放从-263到263-1范围内的整型数据。
以bigint数据类型存储的每个值占用8个字节,共64位,其中63位用于存储数字,1位用于表示正负。
2.IntInt也可以写作integer,可以存储从-231~231-1(-2,147,483,648~2,147,483,647)范围内的全部整数。
以int数据类型存储的每个值占用4个字节,共32位,其中31位用于存储数字,1位用于表示正负的区别。
3.smallintSmallint型数据可以存储从-215~215- 1(-32,768~32,767)范围内的所有整数。
以smallint 数据类型存储的每个值占用2个字节,共16位,其中15位用于存储数字,1位用于表示正负的区别。
4.TinyintTinyint型数据可以存储0~255范围内的所有整数。
以tinyint数据类型存储的每个值占用1个字节。
整数型数据可以在较少的字节里存储较大的精确数字,而且存储结构的效率很高,所以平时在选用数据类型时,尽量选用整数数据类型。
5.Decimal和Numeric事实上,numeric数据类型是decimal数据类型的同义词。
但是二者也有区别,在表格中,只有numeric型数据的列可以带有identity关键字,decimal可以简写为dec。
使用decimal和numeric型数据可以精确指定小数点两边的总位数(精度,precision简写为p)和小数点右面的位数(刻度,scale简写为s)。
在SQL Server中,decimal和numeric型数据的最高精度的可以达到38位,即1≤p≤38,0≤s≤p。
decimal和numeric型数据的刻度的取值范围必须小于精度的最大范围,也就是说必须在-1038-1~1038-1之间。
SQL Server分配给decimal和numeric型数据的存储空间随精度的不同而不同,一般说来对应的比例关系如下所示:精度范围分配字节数1~9 510~19 920~28 1329~38 176.float和realReal型数据范围从-3.40E+38~1.79E+38,存储时使用4个字节。
⾃动初始化第⼀次写⼊数据时把时间设为当前时间tiims1 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ⾃动更新每⼀次写⼊数据时把时间设为当前时间ON UPDATE CURRENT_TIMESTAMP timestamp 两种结合系统默认 ⾃动初始化以及⾃动更新TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATECURRENT_TIMESTAMP ⾃动初始化以及⾃动更新timestamp 字段的数据默认就是此⾏为ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP只做初始化,更新时不⾃动更新ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP 只做⾃动更新,不做初始化ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP 什么都不做datetimesqlite 数据类型(时间⽇期)timestamp 使⽤timestamp 使⽤timestamp 两种属性:⾃动初始化: 此⾏为只在第⼀次写⼊数据时,怎么把时间设为当前时间. (DEFAULT CURRENT_TIMESTAMP)⾃动更新: 此⾏为在修改资料时,会⾃动帮你把值修改为当前时间. (ON UPDATE CURRENT_TIMESTAMP)四种状态:由上⾯两种属性延伸出四种状态下⾯这些语句是等效的:CREATE TABLE t (ts TIMESTAMP );CREATE TABLE t (ts TIMESTAMP DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP );CREATE TABLE t (ts TIMESTAMP ON UPDATE CURRENT_TIMESTAMPDEFAULT CURRENT_TIMESTAMP );ts TIMESTAMP DEFAULT 0 //只是给⼀个常量(注:0000-00-00 00:00:00)可以在TIMESTAMP 列的定义中包括NULL 属性以允许列包含NULL 值。
一、简单查询简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。
它们分别说明所查询列、查询的表或视图、以及搜索条件等。
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。
代码:SELECT `nickname`,`email`FROM `testtable`WHERE `name`='张三'(一) 选择列表选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。
1、选择所有列例如,下面语句显示testtable表中所有列的数据:代码:SELECT * FROM testtable2、选择部分列并指定它们的显示次序查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。
例如:代码:SELECT nickname,email FROM testtable3、更改列标题在选择列表中,可重新指定列标题。
定义格式为:列标题=列名列名列标题如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题:代码:SELECT 昵称=nickname,电子邮件=email FROM testtable4、删除重复行SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为ALL。
使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。
5、限制返回的行数使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。
例如:代码:SELECT TOP 2 * FROM `testtable`代码:SELECT TOP 20 PERCENT * FROM `testtable`(二) FROM子句FROM子句指定SELECT语句查询及与查询相关的表或视图。