语法:
create view <viewName> [(<columnName1>[, <columnName2> ... ])]
as <subquery>
[with check option]
- <subquery> 查询中的某个目标列是聚合函数或表达式,可以多表连接
- as <subquery>:子查询不可以出现,order by 子句和distinct 子句.
- [with check option]:使用该选项,表示对视图进行更新操作(插入,删除,或修改)操作时,必须进行合法性检查,只有操作的结果满足子查询的条件表达式,更新操作才被允许
数据库管理系统在执行create view中,只是把创建视图的语句存入数据库系统表中,并不执行<subquery>的查询语句,在对视图进行查询时,才会按视图的语句从基本表中将数据查询出来(减少负载)
1.T-SQL语言简介
sql server变量分为局部变量和全局变量
常用系统的全局变量
- @@error:当事务成果时为0,否则为最近一次的错误号
- @@rowcount:返回受上一语句影响的行数
- @@fetch_status:返回最近一次fetch语句执行后的游标状态
- @@version:返回sql server 当前的安装日期,版本和处理器类型
声明变量语法:
declare <@variableName><datatype>
单个变量赋值语法:
set <@variableName>=<expr>
变量列表赋值的语法如下:
select <@variableName> [=<expr | columnName]
例如
在ScoreDB数据库中,查询Score表中的最高成绩,如果最高成绩大于95分,则显示“very good”
use ScoreDB
go
declare @score numeric
select @score = (select max(score) from Score)
if @score>95
print 'very good'
T-sql运算符(与正常编程语言差不多,下面是我认为特殊的运算符)
- 位运算符:~(按位非),^(按位异或)
- 赋值语句:select(一次可给多个变量赋值)和set(一次仅能给一个变量赋值)
sql中内置了大量的函数这里就不写了具体看书(233页)
sql流程控制语句
- begin .. end :定义语句块
- break:退出当前层的while循环
- case when 【else】end :多分支语句
- continue:重新开始当前层的while循环
- goto label:将程序流程转向到标号label处继续执行
- if 【else】:分支语句
- return:无条件退出
- waitfor:为语句的执行设置1延迟
- while:循环语句
2.游标
游标是系统为用户开设的一个数据缓存冲区,用于存放sql语句的执行结果
使用游标必须经历5个步骤
- 定义游标:declare
- 打开游标:open
- 逐行提取游标集中的行:fetch
- 关闭游标:close
- 释放游标:deallocate
定义游标语法:
declare <cursorName> cursor
for <sql-Statements>
[for {read only | update [of <columnName_list>]}]
- <sql-Statements>;游标要实现的功能程序
- [for {read only | update [of <columnName_list>]}]:read only 表示当前游标集中的元组仅可以查询,不可以修改。 【update [of <columnName_list>]},表示尽可以对当前游标集中指定的属性列,进行修改操作
打开游标:
open <curserName>
获取当前游标值
fetch <curserName> into <@ variableName_list>
执行该语句系统将当前游标所指向的元组的属性值赋给变量,然后游标自动向下移动一个元组。当游标移至尾部,不可以再读取游标,必须关闭游标然后重新打开游标。
可以通过检查全局变量@@fetch_status 来判断是否已读完游标中的所有行。
@@fetch_status的值有:
- 0:fetch语句成功,表示已经从游标集中获取了元组值
- -1:fetch语句失败或此行不在结果集
- -2:被提取的行不存在
关闭游标
close <curserName>
释放游标:
deallocate <curserName>
实例看书(239页)
删除游标集中的行
delete from <tableName> where current of <curserName>
从游标中删除一行后,游标定位于被删除的游标之后的一行,必须再用fetch语句获得该行
修改游标集的当前行
updata <tableName>
set <columnName> = <expr>
where current of <curserName>