SQL_2th_T-SQL语句介绍和语法初识

一、Transact-SQL编程语言
美国国家标准协会(ANSI)和国际标准组织(ISO)为SQL定义了标准,微软通过用Transact-SQL和
ANSI-SQL兼容,Transact-SQL还包含了几种能够增强性能的扩展。

二、Transact-SQL语句的类型
1、数据定义语言(Data Definition Language)语句
DDL语句用于生成数据库、表、和用户自定义的数据库
create object_name
alter  object_name
drop   object_name

1)创建命令:create
--使用下列语句在School_DB中创建一个Teahcer表:
USE School_DB
CREATE TABLE Teahcer(
custID int,
company varchar(40),
contact varchar(30),
phone char(12)
)
GO

2)修改命令:alter
--向Teacher表中添加一行age信息:
ALTER TABLE Teacher ADD age int DEFAULT 30

3)删除命令:drop
--删除Teacher表:
DROP TABLE Teacher

2、数据控制语言(Date Control Language)语句
用于改变某个用户或角色相关联的权限
1)授权命令:grant

grant单词翻译:
vt.承认;同意;准许;授予
n.拨款;补助金;授给物(如财产、授地、专有权、补助、拨款等)
vi.同意

--授权
--GRANT <权限> ON 表名[(列名)] TO 用户 With grant option
USE School_DB
GRANT SELECT ON dbo.Teacher TO PUBLIC
GO

2)拒绝授权命令:deny

--拒绝授权
USE School_DB
DENY SELECT ON dbo.Teacher TO PUBLIC
GO
授权命令是数据库管理员使用的,若给用户分配权限时带With grant option,则
普通用户获取权限后,可以把自己的权限授予其他用户。

3)回收权限 revoke
REVOKE <权限> ON <数据对象>  FROM <数据库用户名>

3、数据操作语言(Data Manipulation Language)语句
操作数据库中的数据,可以更改数据库中的数据或查询数据库中的信息。
增删改查
Insert
Delecte
Update
Select

1)查询命令:Select
SELECT * FROM dbo.Teacher

一、Transact-SQL语法要素
1、批处理分段命令:go

--创建一个数据库TestBD并且使用
CREATE DATABASE TestDB
USE TestDB

执行时提示:
数据库 'TestDB' 不存在。请确保正确地输入了该名称。

--使用GO命令将语句进行分批处理:
CREATE DATABASE TestDB
GO
USE TestDB

执行成功

declare @age int --定义一个int类型的变量age
set @age=10 --设置int变量的值为10
select @age --然后查询age的值是多少

查询结果为10

--下面再来写一个
declare @age int
set @age=10
select @age
go
set @age=20
select @age

执行时提示:
必须声明标量变量 "@age"。

也就是说加了go的关系使得程序分为了两段,因此认为下面的是另一个age,
所以说没有定义该age。

一句话,go使得SQL语句得以分批执行。

2、执行存储过程的命令:exec
exec+要执行的语句表示:执行后面接上的语句,exec可写可不写。

3、注释语句
1)行注释:--
2)块注释:/*  */

三、标识符
1、第一个字符是a-z或A-Z
2、第一个字符之后可以是数字,字母,或各种符号@、$、_
3、第一个字母是符号时表示有特殊用途
1)@表示局部变量或参数
2)#表示临时表和存储过程(临时表是指一个表在数据库重启后数据就没有了,当前用户创建的临时表另一个用户不能用)
3)##代表一个全局临时表(全局临时表是指所有用户都可以用的临时表)

补充,临时表创建举例:
create table #t(
Tname nvarchar(10),
Tage int
)

执行,创建成功,临时表的名字为t,位于数据库 -> 系统数据库 -> tempdb -> 临时表

当前用户执行:select * from #t是可以查询得到临时表t的内容的。

4、当对象名包含空格时,必须使用中括号[]或双引号""把限定标识符括起来

下面使用中括号[]:
create table [#t t](
Tname nvarchar(10),
Tage int
)

select * from [#t t]

二、数据类型
1、数字型:
1)整数 int、tinyint、smallint、bighint
2)十进制小数 money、smallmoney、decimal
3)浮点数和real

2、日期型datetime
可以精确到0.333毫秒

3、字符型
1)定长字符:char和nchar
char(20)定义一个20个字符长度的变量,如果该变量只存了5个字符,那么剩下的15个
字符就造成了浪费。
declare @address varchar(20)
set @address='shijiazhuang'
select @address+'end'

执行结果:
shijiazhuang        end

char适合存放英文字符,一个字符占用1个字节
nchar适合存放中文和其它文字,一个字符占用2个字节

char和nchar不论实际是多少字符,都占用定义时限定的最大字符数,超过的长度的内容会被忽略。

2)变长字符:varchar和nvarchar
varchar(20)定义一个20个字符长度的变量,如果该变量只存了5个字符,那么剩下的15个
字符会被释放掉,不会造成浪费。

declare @address varchar(20)
set @address='shijiazhuang'
select @address+'end'

执行结果:
shijiazhuangend

varchar和nvarchar实际是多少字符就是多少字符,但不能超过定义时限定的最大字符数。
超过的长度的内容会被忽略。

4、二进制型Binary和varbinary,bit代表一位的值0或1。


三、数据库中的变量

--定义变量使用declare + @变量名 + 变量类型
 declare @sname varchar(20), @address nvarchar(20)
--给变量赋值使用set
set @address='白毛浮绿水红掌拨清波'
--查询变量的值使用select
select @address

全局变量:
@局部变量作用域仅限于一个批处理中,@@而全局变量在整个会话有效
--查询数据库版本
select @@version
--查询服务器名称
select @@servername



主要包含最基础的数据库语句,很适合初学者,目标使用企业管理器创建数据库表设置表的主键、外键和建立表之间的关系为表增加约束数据完整性 数据完整性 数据存放在表中 “数据完整性的问题大多是由于设计引起的” 创建表的时候,就应当保证以后数据输入是正确的 ——错误的数据、不符合要求的数据不允许输入完整性包括… 输入的类型是否正确? ——年龄必须是数字输入的格式是否正确? ——身份证号码必须是18位是否在允许的范围内? ——性别只能是”男”或者”女” 是否存在重复输入? ——学员信息输入了两次是否符合其他特定要求? ——信誉值大于5的用户才能够加入会员列表 …… 完整性包括… 实体完整性域完整性引用完整性自定义完整性表操作创建数据库表 SQL Server的数据类型思考创建数据库表思考创建数据库表思考选择主键的原则创建数据库表思考创建数据库表创建数据库表关系图主表和从表创建数据库表-7 创建数据库表完毕!导入-导出数据总结 SQL Server创建表的过程饰淦麈定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性、引用完整性和域完整性等)保证的过程实体完整性数据行不能存在重复,引用完整性要求子表中的相关项必须在主表中存在域完整性实现了对输入到特定列的数值的限制 SQL Server中存在五种约束,分别是:主键约束、外键约束、检查约束、默认约束和唯一性约束(唯一性约束将在后续课程中使用SQL语句实现)总结创建数据库表需要:确定表的列名、数据类型、是否允许为空,还需要确定主键、必要的默认值、标识列和检查约束如果建立了主表和子表的关系,则: ——子表中的相关项目的数据,在主表中必须存在; ——主表中相关项的数据更改了,则子表对应的数据项也应当随之 更改; ——在删除子表之前,不能够删除主表;回顾SQL Server的约束约束的目的:确保表中数据的完整型常用的约束类型:主键约束(Primary Key Constraint):要求主键列数据唯一,并且不允许为空唯一约束(Unique Constraint):要求该列唯一,允许为空,但只能出现一个空值。检查约束(Check Constraint):某列取值范围限制、格式限制等,如有关年龄的约束默认约束(Default Constraint):某列的默认值,如我们的男性学员较多,性别默认为“男” 外键约束(Foreign Key Constraint):用于两表间建立关系,需要指定引用主表的那列添加约束 添加约束的语法:添加约束示例添加约束示例删除约束如果错误地添加了约束,我们还可以删除约束 删除约束的语法第二部分 数据库的设计课程目标了解设计数据库的基本步骤熟练使用T-SQL实现建库、建表、加约束掌握T-SQL编程,实现功能强大的查询掌握创建索引、视图,快速访问数据库 掌握创建存储过程,实现复杂的业务规则理解触发器的原理,实现高级的约束目标了解设计数据库的步骤掌握如何绘制数据库的E-R图理解数据库的规范化-三大范式为什么需要设计数据库 2-1 为什么需要设计数据库 2-2 软件项目开发周期需求分析阶段:分析客户的业务和数据处理需求; 概要设计阶段:设计数据库的E-R模型图,确认需求信息 的正确和完整; 详细设计阶段:将E-R图转换为多张表,进行逻辑设计, 并应用数据库设计的三大范式进行审核; 代码编阶段:选择具体数据库进行物理实现,并编 代码实现前端应用; 软件测试阶段:…… 安装部署:…… 设计数据库的步骤4-1 收集信息: 与该系统有关人员进行交流、坐谈,充分理解数据库需要完成的任务 设计数据库的步骤4-2 标识对象(实体-Entity) 标识数据库要管理的关键对象或实体 设计数据库的步骤4-3 设计数据库的步骤4-4 标识对象之间的关系(Relationship) 绘制E-R图 4-1 E-R(Entity-Relationship)实体关系图 绘制E-R图 4-2 绘制E-R图 4-3 映射基数绘制E-R图如何将E-R图转换为表 3-1 如何将E-R图转换为表 3-2 如何将E-R图转换为表数据规范化 仅有好的RDBMS并不足以避免数据冗余,必须在数据库的设计中创建好的表结构 Dr E.F.codd 最初定义了规范化的三个级别,范式是具有最小冗余的表结构。这些范式是:第一范式(1st NF -First Normal Fromate) 第二范式(2nd NF-Second Normal Fromate) 第三范式(3rd NF- Third Normal Fromate) 第一范式 (1st NF) 第二范式 (2nd NF) 第三范式 (3rd NF) 规范化实例 5-1 假设某建筑公司要设计一个数据库。公司的业务规则概括说明如下:公司承担多个工程项目,每一项工程有:工程号、工程名称、施工人员等公司有多名职工,每一名职工有:职工号、姓名、性别、职务(工程师、技术员)等公司按照工时和小时工资率支付工资,小时工资率由职工的职务决定(例如,技术员的小时工资率与工程师不同)公司定期制定一个工资报表,如图-1所示规范化实例 5-2 规范化实例 5-3 规范化实例 5-4 1.表中包含大量的冗余,可能会导致数据异常:更新异常 例如,修改职工号=1001的职务,则必须修改所有职工号=1001的行添加异常 若要增加一个新的职工时,首先必须给这名职工分配一个工程。或者为了添加一名新职工的数据,先给这名职工分配一个虚拟的工程。(因为主关键字不能为空)删除异常 例如,1001号职工要辞职,则必须删除所有职工号=1001的数据行。这样的删除操作,很可能丢失了其它有用的数据规范化实例 5-5 2.采用这种方法设计表的结构,虽然很容易产生工资报表,但是每当一名职工分配一个工程时,都要重复输入大量的数据。这种重复的输入操作,很可能导致数据的不一致性。 应用范式规范化设计应用第二范式规范化应用第三范式规范化规范化和性能的关系 总结 2-1 在需求分析阶段,设计数据库的一般步骤为:收集信息标识对象标识每个对象的属性标识对象之间的关系在概要设计阶段和详细设计阶段,设计数据库的步骤为:绘制E-R图将E-R图转换为表格应用三大范式规范化表格总结 2-2 为了设计结构良好的数据库,需要遵守一些专门的规则,称为数据库的设计范式 。第一范式(1NF)的目标:确保每列的原子性。第二范式(2NF)的目标:确保表中的每列,都和主键相关 第三范式(3NF)的目标:确保每列都和主键列直接相关,而不是间接相关 第三部分 常用的SQL语法及技巧查询-单表查询 SELECT <选择列表> FROM [[<数据库名>.]<模式名>.]<基表名> | <视图名> <相关名> [
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值