游标操作
在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
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)
设有表选课(学号,课程号,成绩),现要查询没选C01课程的学生学号。请补全下列语句:
SELECT 学号 FROM 选课 WHERE 学号 IN
(SELECT 学号 FROM 选课 WHERE 课程号='C01')
SELECT 学号 FROM 选课 WHERE
学号
IN (SELECT 学号 FROM 选课 WHERE 课程号='C01')
触发器
CREATE TRIGGER
语句用于创建一个新的触发器,只要针对表发生INSERT
,DELETE
或UPDATE
等事件,就会自动触发该触发器。
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/
触发器可以执行多种操作
触发器须注意的点:
后触发器: 成功执行完操作后,才触发触发器
前触发器:不执行实际操作
,只执行触发器
设在SQL Server某数据库中有表选课(学号,课程号,成绩),
现要定义【不能删除】成绩不及格学生的选课记录的触发器。请补全下列语句:
CREATE TRIGGER tri_del ON 选课 AFTER DELETE AS
IF EXISTS( SELECT * FROM deleted WHERE 成绩 < 60 )
ROLLBACK
标量函数
注意点:
RETURNS
的s
别漏
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
聚集索引
聚集索引
CREATECLUSTERED
INDEX idx_t1 ON T1(C1)记得加ed
非聚集索引
CREATENONCLUSTERED
INDEX idx1 ONStudent(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 职工