计算机基础--数据库专项练习笔记

本文详细解析了SQL Server中update语句的分步理解,涉及数据冗余、索引、约束性以及数据库操作效率。同时,讨论了数据库设计中数据冗余的利弊,介绍了查询优化技巧,包括UNION与UNION ALL的使用,以及#与$在iBatis中的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.根据下面给的表和 SQL 语句,问执行 SQL 语句更新多少条数据?sql 语句:
update Books set NumberOfCopies = NumberOfCopies + 1 where AuthorID in select AuthorID from Books group by AuthorID having sum(NumberOfCopies) <= 8
表中数据:
BookID         Tittle                       Category                     NumberOfCopies          AuthorID
1                    SQL Server           2008 MS                                  3                              1
2                   SharePoint            2007 MS                                   2                              2
3                   SharePoint            2010 MS                                   4                              2
5                    DB2                           IBM                                        10                             3

7                   SQL Server            2012 MS                                    6                             1

sql语句可以分两句理解

第一句:update Books set NumberOfCopies = NumberOfCopies + 1 where AuthorID in  select   

根据AuthorID将NumberOfCopies改成NumberOfCopises+1     

第二句:AuthorID from Books group by AuthorID having sum(NumberOfCopies) <= 8        

将AuthorID分组,分组的条件是NumberOfCopies的总和小于等于8

AtuhorID   sum(NumberOfCopies) 
1                 9
2                 6
3                 10
很显然只有2满足,然后Books里面有两个2,所以只修改两个



2.牛客网的数据库有一个试卷表,希望找出试卷平均得分小于90的所有试卷。

select * from paper where avg(score)<90;

SUM 函数返回数值列的总数(总额)。
AVG 函数返回数值列的平均值
MAX 函数返回一列中的最大值。NULL 值不包括在计算中。
MID 函数用于从文本字段中提取字符。



3.The initial insert of new data into the table will leave most of its large columns NULL, to be filled in later by subsequent updates.记录重未更新. PCTFREE 和 PCTUSED取值多少合适?

这里块里面两个重要的属性
pctfree 标示要留多少空间,一般默认参数是20,表示留20%
即当块里的数据达到80%里,就不会往这个块里写新数据

PCTUSED则是指当块里的数据低于多少百分比里可以写新数据,一般默认是40,即40%
当数据低于40%里可以写入新的数据



4.约束性

现有表user,字段:userid,username, salary, deptid,email; 表department,字段:deptid, deptname;下面应采用检查约束来实现?

  • 若department中不存在deptid为2的纪录,则不允许在user表中插入deptid为2的数据行。
  • 若user表中已经存在userid为10的记录,则不允许在user表中再次插入userid为10的数据行
  • User表中的salary(薪水)值必须在1000元以上。
  • 若User表的email列允许为空,则向user表中插入数据时, 可以不输入email值。
1.外键约束性,Foregin Key 选项中说明了两张表具有相关约束性

2.唯一约束性,确保字段不重复

3.用检查约束(check)来表示输入值的合法性



5.关于数据库冗余的说法错误的

错误:

在数据库设计阶段,尽量要避免数据冗余,最好做到无数据冗余

解析:

这个应该根据实际工程需求而定,有些时候需要数据库冗余保证数据库设计三范式。有一些必需的数据冗余是用来建立表之间的联系。

正确:

数据库中,数据存放在副本中的现象就是数据冗余

通过分类存储,可以有效减少数据冗余,但会增加数据查找的复杂性

数据冗余,常是由数据库设计引起的



6.已知表tbl中字段land_ID建有索引,字段cust_id建有唯一索引,下列语句查询逻辑相同,其中执行效率最优的是

SELECT * FROM tbl WHERE land_ID >750

UNION

(

SELECT * FROM tbl WHERE cust_id = 180

UNION ALL

SELECT * FROME tbl WHERE cust_is = 560

)

应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描

union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。



7.下列对于数据库索引的说法一定是错误的()

错误:

索引不会影响表的更新、插入和删除操作的效率

解释:

当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

正确:

索引可以提升分组、查询和排序的效率

全表扫描不一定比使用索引的执行效率低

对于只有很少数据值的列,不应该创建索引



8.mysql数据库有选课表learn(student_id int,course_id int),字段分别表示学号和课程编号,现在想获取每个学生所选课程的个数信息,请问如下的sql语句正确的是

select student_id,count(course_id)frome learn group by student_id



9.下面有关ibatis 中的#与$的区别,描述错误的是?

ibatis是一个基于SQL映射支持Java和·NET的持久层框架

正确的:

#将传入的数据都当成字符串,会对自动传入的数据加一个双引号

$方式一般用于传入数据库对象,如传入表名

$将传入的数据直接显示生成在sql中

1.#是把传入的数据当作字符串,如#user_id_list#传入的是1,2,则sql语句生成是这样,in ('1,2') ,
2.$传入的数据直接生成在sql里,如$user_id_list$传入的是1,2,则sql语句生成是这样,in(1,2). 
3.#方式能够很大程度防止sql注入. 
4.$方式无法防止sql注入. 
5.$方式一般用于传入数据库对象.例如传入表名. 

6.一般能用#的就别用$.
举例:
#str# 出来的效果是  'str' 
$str$ 出来的效果是  str



10.sql where条件的执行顺序是什么?

从前往后              关键点是“条件”二字

where子句中的条件定义就是按照从前往后来做的。
a=1 AND b=2 会先过滤a=1这个条件,然后过滤b=2条件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值