游标操作

在SQL Server中,设有表选课(学号,课程号,成绩)。
现要声明一个查询成绩大于等于90的学生学号、课程号和成绩的游标。请补全下列语句:

DECLARE cl CURSOR for    

SELECT学号,课程号,成绩 FROM 选课 WHERE 成绩>=90

declare 游标名 cursor for select语句 cursor: /ˈkɜːsə(r)/

在SQL Server 2008中,若要提取游标cur1当前行指针所指的前一行数据,
使用的选项是:FETCH 【 PRIOR 】FROM cur1

alt

FETCH PRIOR 提取当前行     FETCH NEXT 游标下行(xíng)并提取下行(xíng)(háng)的数据

子查询

设有表Student(Sno,Sname)、SC(Sno,Cno,Grade),现要查询没选C01课程的学生姓名,
请补全下列语句:

SELECT Sname FROM Student WHERE NOT 【 EXISTS 】(

       SELECT * FROM SC WHERE Cno = 'C01'

          AND Student.Sno = SC.Sno)

alt

设有表选课(学号,课程号,成绩),现要查询没选C01课程的学生学号。请补全下列语句:

SELECT 学号 FROM 选课 WHERE 学号 IN

(SELECT 学号 FROM 选课 WHERE 课程号='C01')

SELECT 学号 FROM 选课 WHERE 学号 IN (SELECT 学号 FROM 选课 WHERE 课程号='C01')

触发器

CREATE TRIGGER 语句用于创建一个新的触发器,只要针对表发生 INSERTDELETEUPDATE 等事件,就会自动触发该触发器。

CREATE TRIGGER trigger_name
ON table_name
{[FOR],[AFTER],[INSTEAD OF]}  {[INSERT],[UPDATE],[DELETE]}
AS
{sql_statements}

FOR AFTER 后触发器 INSTEAD OF 前触发器 instead: /ɪnˈsted əv/

触发器可以执行多种操作

alt

触发器须注意的点:

后触发器: 成功执行完操作后,才触发触发器

前触发器: 不执行实际操作,只执行触发器

设在SQL Server某数据库中有表选课(学号,课程号,成绩),

现要定义【不能删除】成绩不及格学生的选课记录的触发器。请补全下列语句:

CREATE TRIGGER tri_del ON 选课 AFTER DELETE AS

IF EXISTS( SELECT * FROM deleted WHERE 成绩 < 60 )

ROLLBACK

alt

标量函数

注意点: RETURNSs 别漏

CREATE FUNCTION [函数名](@参数名 参数类型)
RETURNS [返回值类型]
AS
BEGIN
    statements
    RETURN value
END

存储过程

在SQL Server 2008中,要创建有一个输入参数和一个输出参数的存储过程

CREATE PROC P1

@x int, @y int output

AS 
SQL STATEMENT
… …

存储过程中输入参数不需要注明,输出参数需要用关键字 OUTPUT 注明该参数是输出参数。

调用存储过程

调用存储过程时,只需要什么参数的类型,不能指明参数为输出参数,只有再执行时才能指明

例题:
设在SQL Server 2008中有如下定义存储过程的语句:
CREATE PROC p1
@x int, @y int = 10, @z int output
… …
下列关于调用该存储过程的语句,错误的是 A 。
>a.
 DECLARE @i int output   ✗ #调用存储过程时,只需要什么参数的类型,不能指明参数为输出参数
 EXEC p1 10, @i
 b.
 DECLARE @i int          ✔
 EXEC p1 10, 100, @i output

在SQL Server 2008中,使用T-SQL语句进行数据库备份操作,需要使用 DIFFERENTIAL 关键词指定该备份为差异备份
differential | /ˌdɪfəˈrenʃl/

创建架构

CREATE SCHEMA XXX XXX XXX

schema : /ˈskiːmə/

创建SQL Server身份验证的登录账户

设在SQL Server中,要创建SQL Server身份验证的登录账户。登录名为:User1,密码为:a123。
请补全下列语句:
CREATE LOGIN User1 WITH PASSWORD = 'a123'

CREATE LOGIN User1 WITH PASSWORD = 'a123'

排名函数

SQL Ser ver 2008提供了4个排名函数, 其中____
函数返回结果集中每行数据在每个分
区内的排名, 并且每个分区内行的排名从1开始,排名可亘复且不间断。

【解析】SQL Server提供了四个排名函数: RANK、DENSE_RANK、NTILE和ROW_RANK 。
DENSE_RANK ()函数与RANK()函数的作用基本一样, 使用方法也一样,
唯一的区别是DENSE_RANK()的函数排名中间没有任何间断, 即该函数返回的是一个连贯的整数值。
答案: DENSE_RANK

聚集索引

聚集索引    CREATE CLUSTERED INDEX idx_t1 ON T1(C1)    记得加ed

非聚集索引 CREATE NONCLUSTERED INDEX idx1 ON  Student(sname)

设在SQL Server 2008中,要在T1表的C1列上建立一个按降序排序的非聚集索引。
请补全下列语句:

CREATE NONCLUSTERED INDEX idx_t1 ON T1 C1 DESC   #【非聚集不需要 ORDER BY】

一个表上可以定义【多个】非聚集索引

非聚集索引  索引不排序
聚集索引     索引按物理数据行的索引排序

删除用户

要删除DB1数据库中的U1用户    DROP USER U1

查询去重

在SELECT语句中,用于去掉查询结果集中重复行的选项是 DISTINCT /dɪˈstɪŋkt/   DISTINCT 在列C1前面

现要统计T1表中C1列取值不同的值的个数。请补全下列语句:

SELECT COUNT (DISTINCT C1) FROM T1

开窗函数

PARTITION: /pɑːˈtɪʃ(ə)n/

排名开窗函数和聚合开窗函数:
OVER子句用于确定在应用关联的开窗函数之前对行集的区分和排序
PARTITION BY:将结果集划分为多个分区

在SQL Server 2008中,设有关系表:职工(工号,姓名,所在部门),

现要查询职工姓名、所在部门及该部门人数,请补全下列语句:

SELECT 姓名, 所在部门, COUNT(*) OVER (PARTITION BY 所在部门) AS 部门人数 FROM 职工