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
2.牛客网的数据库有一个试卷表,希望找出试卷平均得分小于90的所有试卷。
select * from paper where avg(score)<90;
MAX 函数返回一列中的最大值。NULL 值不包括在计算中。
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值。
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.$方式一般用于传入数据库对象.例如传入表名.
$str$ 出来的效果是 str
10.sql where条件的执行顺序是什么?
从前往后 关键点是“条件”二字