SQL Server2012 T-SQL基础教程(一)

产品倒闭
• 阅读 3894

T-SQL是标准SQL在SQL Server数据库中的实现。

范式

范式是在表设计时的标准,通常一个表需要遵循以下三个范式;
第一范式:数据库中的表的列,必须是原子的,不可以在进行拆分。
例如:一个列中存储多个值,一个学生的姓名和年龄被存储在同一个列内。
第二范式:继承第一范式的约束,在其基础上增加了必须存在主键进行唯一标识,而且表中的其他列需要依赖主键(当存在多个主键的时,不能只依赖主键的一部分,也就是只依赖于其中一个)。
第三范式:继承第二范式的约束,在其基础上增加了除了主键的列,其他列不能相互依赖。

数据库的组成结构

1.数据库由数据文件和事务日志文件,数据文件主要存储对象的数据,事务日志文件存储SQL Server需要维护事务的信息。
2.数据文件可并行写入,但是事务日志文件只能以连续的方式一次写入一个。所以多个事务日志文件并不能带来性能上的提升。
3.数据文件被组织存储到一个叫做“文件组”的逻辑组中,一个数据库至少存在一个PRIMARY的文件组,这个文件组主要存储主数据库文件(mdf文件)和数据库目录.
4.系统内数据库的用途:
master:主要存储实例范围的元数据,服务器配置,实例中所有数据库信息和初始化信息
tampdb:主要存储一些临时数据的地方,例如临时表。
modeldb:这个数据库用作创建新数据库的模版,创建的每个新数据库是由Model的副本初始化创建的。
msdb:主要存储一个叫做“SQL Server代理”服务的数据。
resource:主要存储所有系统对象的定义。
5.架构:我的理解就是命名空间,方便管理,防止冲突,并且可以对架构进行权限控制,保证了安全性。建议在写T-SQL的时候为对象加上架构的前缀,这样可以省去系统查找对象所在架构上耗费掉的性能。

单表查询

1.在关系模型中所有的列必须有名称,但是在T-SQL中允许SELECT查询中出现没有列名的列。
2.对列起别名的三种方式:
1)列名 AS 别名(建议)
2)别名 = 列名
3)列名 别名(不建议,:不直观而且如果在查询中多个列存在的时候,如果忘记写逗号,很容易把紧挨着的列当成别名处理,查询不会失败,从而导致BUG)
3.SQL Server能够在查询中对相同的表达式只计算一次。
4.在使用SELECT进行查询的时候最好把要查询的列都显示的列出来,即使需要的是表中的所有的列,也不要使用使用SELECT *进行查询,虽然性能上倒是没有多大的影响, SELECT * 按照创建表定义时指定的列顺序保存列序号位置,这样做的弊端是,以后修改了表结构时,程序中对应序号位置的列可能已经不在是你期望的那个列,这样就会导致一些难以捕捉的BUG。
5.如果在SELECT查询中对列起的别名是当前表中已经存在的列,那么对该别名的所有操作都是对起别名的字段进行操作。

--例如:表A中存在列:firstName,lastName,CreateTime 
  SELECT firstname AS lastname FROM A ORDER BY lastname
--如上查询,会按照firstname进行排序

6.如果在SELECT中指定了DISTINCT,那么在后来使用的ORDER BY 子句中只能是 SELECT 中出现的列,不能是其他列。否则ORDER BY没有意义。

SELECT DISTINCT country FROM A ORDER BY emplId
--在上面的查询中,因为结果是去重的,所以对应于同一个国家可能有多个emplId,这样在按照emplId进行排序是没有意义的。

7.在基本的查询语句中,其逻辑处理顺序如下:

1) FROM 
2) WHERE 
3) GROUP BY 
4) HAVING 
5) SELECT
   5.1) 表达式 
   5.2) DISTINCT
6) ORDER BY
   6.1) TOP/OFFSET-FETCH

8.T-SQL中使用三值逻辑:TRUE / FALSE / UNKNOWN,对于查询筛选而言 “接收TRUE”,也就是 FALSE 和 UNKNOWN 是不满足条件的。但是对于CHECK约束而言 “拒接FALSE” 也就是 TRUE 和 UNKNOWN 满足条件,两个NULL进行比较为UNKNOWN,并且两个NULL被认为是不相等的。在对存在NULL值的列进行排序的时候,T-SQL会优先对NULL进行排序。
9.在T-SQL中如果两个操作数的类型不同,具有较低优先级的操作数会先转化为较高优先级的操作数类型。5/2.0 第一操作数是 5 INT 类型,第二个操作数 2.0 NUMERIC 类型,在进行计算的时候 5 先转化为 5.0 之后在进行计算,结果为 2.5。
数据类型的优先级请查看:数据类型的优先级
10.T-SQL中运算符的优先级(从高到低)

1) ()
2) * / % 
3) + - 
4) > < >= <= <> != !> !<
4) NOT
5) AND
6) OR BETWEEN IN LIKE 
7) =(赋值)

11.在SELECT/WHERE/UPDATE的列表中表达式是在同一时间进行计算的。

SELECT RealAge AS age,age+1 FROM A 
--这里的age无法使用。由于同时操作,age在age+1时并不存在。

12.含Var元素的数据类型具有可变的存储长度,这样占用的存储空间更少,读取操作更快。但是对于更新操作可能会导致行扩展,数据移动在当前页面之外,所以更新效率低于固定长度。
MAX默认是8000字节,超出8000字节会被作为大型对象存储在行的外部。

点赞
收藏
评论区
推荐文章
Easter79 Easter79
4年前
sqlserver2005创建唯一约束的方法
对于一个表中非主键列的指定列,唯一(UNIQUE约束|:强制非主键上的实体完整性的约束。UNIQUE约束确保未输入重复值,并创建一个索引以增强性能。)约束确保不会输入重复的值。例如,在employee表中emp\_id列是主键,可以定义一个唯一约束来要求表中社会安全号码(ssn)列的项是唯一的。在数据库关系图中,可以使用"索引/键"属性页创建、
关系型数据库设计三大范式
作者:郑龙飞范式定义百度百科:设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。人类语言:范式可以理解为设计一张数据表的表结构,符合的标准级别、规范和要求。而通
zdd小小菜鸟 zdd小小菜鸟
3年前
MySQL面试
MySQL面试1.数据库的三范式是什么?tex第一范式:强调的是列的原子性,即数据库表的每一列都是不可分割的原子数据项。第二范式:要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。
lix_uan lix_uan
4年前
MySQL学习总结
数据库的三大范式第一范式:每个列都不可以再拆分第二范式:在第一范式的基础上,非主键列完全依赖于主键第三范式:在第二范式上,非主键列只依赖主键,不依赖其他非主键事务的并发问题脏读:事务A读取了事务B更新的数据,然后数据B回滚,那么A读到的是脏数据不可重复读:事务A多次读取同一数据,事务B在事务A读取的过程中对数据进行了修改并提交,导致A多次读的数据
Wesley13 Wesley13
4年前
MySQL5.7 基础之二
设计范式:  第一范式:字段是原子性  第二范式:存在可用主键  第三范式:任何表都不应该有依赖于其它表非主键的字段创建数据库、设计数据表  字段:字段名、数据类型、约束(通过键来实现,而键其实可以当做索引来用)DDL:CREATE、DROP、ALTERDML:INSERT(REPLACE)、DELETE、UPDATE、SELE
Easter79 Easter79
4年前
SQL JOIN语法,以及JOIN where 和and区别,还有where和join效率问题。
语法join用于根据两个或多个表中的列之间的关系,从这些表中查询数据。Join和Key有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行join。数据库中的表可通过键将彼此联系起来。主键(PrimaryKey)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。这
Wesley13 Wesley13
4年前
MySQL表的操作01
表在数据库中主要用来实现存储数据记录,其基本操作包括创建表、查看表、删除表和修改表。表中的数据库对象包括:1.列(COLUMNS):也称属性列,在具体创建表时,必须指定列的名字和它的数据类型。2.索引(INDEXES):根据指定的数据库建立起来的顺序,提供了快速访问数据的途径。3.触发器(TRIGGERS):指用户定义的事务命令集合,当对一个
Wesley13 Wesley13
4年前
MySQL面试
范式1:原子性,表中的没一列都是不可分的,不能是数组,集合。范式2:在第一范式基础上,属性完全依赖于主键。范式3:非主属性不依赖于其它非主属性。(关系中不包含在其它关系中已包含的非主键信息)   比如Student表(学号,姓名,年龄,性别,所在院校,院校地址,院校电话)   这样一个表结构,就存在上述关系。 学号 所在院校
Wesley13 Wesley13
4年前
MySQL相关
一、数据库的三种范式第一范式:数据库表的每一列都是不可分割的基本数据项。第二范式:数据库表中的每个实例或行必须可以被惟一地区分,即主键。第三范式:要求数据库表中不包含已在其它表中已包含的非主关键字信息,即外键。二、存储过程存储过程是一个可编程的函数,它在数据库中创建并保存。优点有:1、存储过程能
Wesley13 Wesley13
4年前
Java相关面试题总结+答案(九)
【MySQL】164\.数据库的三范式是什么?第一范式:强调的是列的原子性,即数据库表的每一列都是不可分割的原子数据项。第二范式:属性完全依赖于主键(满足第一范式的前提下),即任意一个字段只依赖于表中的同一个字段。第三范式:任何非主属性不依赖于其它非主属性(满足第二范式的前提下)。即不存在传
关系型数据库设计三大范式
作者:京东科技郑龙飞范式定义百度百科:设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。人类语言:范式可以理解为设计一张数据表的表结构,符合的标准级别、规范和要
产品倒闭
产品倒闭
Lv1
用无所谓的态度,过好随遇而安的生活
文章
2
粉丝
0
获赞
0