IS NOT NULL
select 学号,姓名,备注 from 学生基本信息表 where 备注 is not null
select 学号,姓名,备注 from 学生基本信息表 where 备注 is null
select 学号,姓名,isnull(备注,'') as 职务 from 学生基本信息表
7-2-1
视图:视图可以被看成是虚拟表或存储查询。可通过视图访问的数据不作为独特的对象存储在数据库内。视图源于基本表 基本表:数据库中数据存放的地方,各种操作都建立在基本表的基础之上 7-2-4
唯一索引:指索引键值必须是唯一的,表中列(或者列组)的数据必须唯一,才能在该列(或者列组)上建立唯一索引 UNIQUE列允许有一个空值
主键:表中唯一标识一行的一个列或者多个列,并且主键列不允许为空值
7-3-2-4
create procedure get_age @param_sno char(4) = null as
if @param_sno is null begin
print '请输入要查询年龄学生的学号' return end else begin
select 学号,姓名,year(getdate())-year(出生日期) as '年龄'
from 学生基本信息表 where 学号 = @param_sno end 三、写语句
select * from 学生基本信息表 --P161 插入
insert into 学生基本信息表(姓名,学号,性别,出生日期,入学日期)
values('王晴','S107','女','1987-5-28','2005-9-1') insert into 学生基本信息表 values('X106','李四','男
','1987-5-14',null,null,null,'2005-9-1',null,null); --建表
create table 学生表( 姓名 char(10),
地址 char(50), 生日 datetime, 职位 char(20), 基本工资 money)
--奖学金范围在0-5000之内 检查约束
constraint PK_jxjfw check (奖学金>=0 and 奖学金<=5000) --性别取男或女
constraint PK_xb check(性别 in ('男','女')) --入学日期大于出生日期
constraint PK_rqxz check(DATEADD(year,16,出生日期)<入学日期) --主键
alter table 学生表
add constraint PK_姓名 primary key nonclustered(姓名) select * from 学生表 --删表
drop table 学生表 --P166 修改表 update 学生基本信息表
set 院系名称='信息学院',专业='计算机网络',籍贯='湖北' where 姓名='李四' --P170 删除数据
delete from 学生基本信息表 where --P187 去除重复信息
select distinct 籍贯 from 学生基本信息表 --显示增加值
select 学号,姓名,奖学金 * 0.2 as '涨幅额度' from 学生基本信息表
--按性别升序学号降序
select 学号,姓名,奖学金,性别 from 学生基本信息表 order by 性别,学号 desc
--查询学生年龄中最大前三名学号,显示其年龄,分别取现在时间的年和原来的年相减
select top 3 学号,姓名,year(getdate())-year(出生日期) as '年龄' from 学生基本信息表 order by 出生日期 --P201
select 学号 as '编号',姓名,奖学金 * 0.2 as '涨幅额度' from 学生基本信息表 where 姓名 not like '%一%'
--P195
select 学号,姓名,出生日期 from 学生基本信息表 where 出生日期>'1988-2-2' --P203
select 学号,姓名,备注 from 学生基本信息表 where 备注 is not null
select 学号,姓名,isnull(备注,'') as 职务 from 学生基本信息表 --P207
select 院系名称,性别, count(*) as '人数' from 学生基本信息表 group by 院系名称,性别 order by 院系名称
--P209
select 院系名称,max(出生日期) as '院系年龄最小的出生日期'
from 学生基本信息表 group by 院系名称 --P211
select 院系名称,sum(奖学金) as '院系奖学金总和' from 学生基本信息表 group by 院系名称 select avg(奖学金) as '院系奖学金均值' from 学生基本信息表 group by 院系名称 --P212
select 院系名称,avg(year(current_timestamp)-year(出生日期)) as '平均年龄'
from 学生基本信息表 group by 院系名称 --P214
select 院系名称,count(*) as '人数' from 学生基本信息表 where 性别='男' group by 院系名称 having count(*)>=3 --P216
select * from 课程表
where 课程号 = (select 课程号 from 成绩表
where 学号=(select 学号 from 学生基本信息表 where 姓名 = '钱七'))
--P259 按照性别判断平均奖学金高低的存储过程 create procedure 按照性别判断平均奖学金高低 as
if((select avg(奖学金) from 学生基本信息表 where 性别 = '男')
>(select avg(奖学金) from 学生基本信息表 where 性别 = '女'))
print '男生奖学金平均值大于女生' else
print '女生奖学金平均值大于男生' --执行
exec 按照性别判断平均奖学金高低 --删除
drop procedure 按照性别判断平均奖学金高低 --P269 学生信息删除触发器
create trigger 学生信息删除触发器 on 学生基本信息表 for delete as
print '学生基本信息表删除了下列数据行' select 学号,姓名,性别 from deleted delete from 学生基本信息表 where 学号 ='S107' --P267 奖学金总额触发器 --建表
create table 按照学院统计奖学金总额表 (院系名称 char(20) not null, 奖学金总额 money,
constraint PK_jxjzeb primary key nonclustered(院系名称)) --插入记录
insert into 按照学院统计奖学金总额表 values('信息学院',0)
insert into 按照学院统计奖学金总额表 values('商学院',0) insert into 按照学院统计奖学金总额表 values('法学院',0) --查询记录
select * from 按照学院统计奖学金总额表 --建立奖学金总额触发器 每插入一条记录自动累加 create trigger 奖学金总额触发器 on 学生基本信息表 for insert as
update 按照学院统计奖学金总额表 set 奖学金总额 = 奖学金总额 + 奖学金 from inserted
where 按照学院统计奖学金总额表.院系名称 = inserted.院系名称
--建立根据学号查询学生年龄的存储过程
create procedure get_age @param_sno char(4) = null as
if @param_sno is null
begin
print '请输入要查询年龄学生的学号' return end else begin
select 学号,姓名,year(getdate())-year(出生日期) as '年龄'
from 学生基本信息表 where 学号 = @param_sno end
1、 下列哪个关键字在 SELECT 语句中表示所有列? A) * B) ALL C) DESC D) DISTINCT 答:A
2、 下列函数可以计算平均值的是? A) SUM B) AVG C) COUNT D) MAX 答:B
3、 下列哪一种备份方式只备份了自上次备份操作发生后重新发生改变的数据? A) 全库数据库备份 B) 差异备份 C) 日志备份 D) 文件和文件组备份 答:B
4、 一个学生可以同时借阅多本书,一本书只能由一个学生借阅,学生和图书之间为( )联系. A) 多对多 B) 一对多 C) 一对一 D) 不存在 答:B
5、 关系模型:其逻辑结构是一张( ),它由行和列组成。A) 一维表 B) 二维表 C) 三维表 D) 四维表 答:B
6、 表中可以( )一条记录的某个属性组(字段组)称为主键. A) 唯一确定 B) 不唯一确定 C) 模糊确定 D) 表达 答:A
7、 若某个属性组在关系表 A 中不是主键,但它是另一个关系表 B 的主键,则该属性或属性组称为关系 A 的( )。 A) 外部属性 B) 主键 C) 内键
D) 外键 答:D
8、 删除表用( )命令。 A) DROP B) DELETE C) ZIP D) COMPRESS
答:A
9、 写出下列查询语句运行结果: SELECT COUNT(*) FROM STUDENT;()
A) STUDENT 表记录列数 B) STUDENT 表记录行数 C) STUDENT 表记录行、列总数 D) 入学分数和
答:B
10、 写出下列查询语句运行结果:SELECT AVG(SCORE) FROM STUDENT;( ) A) SCORE 列的最大值 B) SCORE 列的最小值 C) SCORE 列的平均值 D) 入学分数和 答:C
11、 输出姓李的学生名单:SELECT NAME FROM WHERE NAME ( );
A) LIKE ‘李%’ B) LIKE ‘李’ C) LIKE 李% D) =‘李%’ 答:A
12、 统计各班学生人数: SELECT ( ) FROM STUDENT GROUP BY CLASS_ID; A) AVG(*)
B) COUNT(*)
C) SUM(*)
D) MAX(*) 答:B
13、 将 STUDENT 表所有女生的记录删除。( ) FROM STUDENT WHERE SEX=’女’;
A) DROP
B) REMOVE
C) DELETE TO
D) DELETE 答:D
14、 将 STUDENT 表中所有女生成绩加 10 分。 UPDATE STUDENT ( )SCORE=SCORE+10 WHERE SEX=’女’; A) SET B) CHANGE C) MODIFY D) MAKE 答:A
15、 SQL 语句中,DISTINCT 短语的功能是: A) 按要求显示部分查询记录 B) 消除重复出现的查询记录 C) 删除查询结果中符合条件的记录 D) 对查询结果进行排序 答:B
16、 ( )约束指定某列数据的默认值。 A) DEFAULT B) IDENTITY C) CHECK D) NULL 答:A
17、 SELECT 查询语句中,可以使用( )关键字,将通过现有数据计算得到的值作为新列添加到查询结果集中。
A) USE
B) AS C) FOR D) SET 答:B
18、 关于 SELECT 语句中的 WHERE、GROUP BY 和HAVING 子句的执行次序,下列说法正确 的是:
A) GROUP BY 先于 WHERE 执行
B) HAVING 子句中可以使用聚合函数
C) WHERE 子句中可以使用聚合函数 D) HAVING 子句不受 GROUP BY 条件的约束 答:B
19、 下列属于 ACCESS 的数据类型的有: A) 自动编号 B) 字符指针 C) 数据库链接 D) 查询对象 答:A
20、 创建表的时候,索引的用途有: A) 减少数据量
B) 增加表内的数据安全性 C) 加快表内数据的查询速度 D) 增加表内数据的完整性 答:C
21、 在查询、修改、删除中都可以使用的一个 SQL
子句为: A) SELECT 子句 B) FROM 子句 C) WHERE 子句 D) SET 子句 答:C
22、 下列“不”属于 ACCESS对象的是: