题目
在请求分页[1][1]系统中,常采用哪几种页面置换算法?答:a.最佳置换算法;b.先进先出算法;c.最近最久未使用LRU置换算法;d.Clock置换算法; e.此外,还有最少使用置换算法和页面缓冲算法。数据库1.基础知识点:1NF:第一范式[2][2]。如果关系模式[3][3] R的所有属性的值域中每一个值都是不可再分解的值, 则称R属于第一范式模式。 第一范式的模式要求属性值不可再分裂成更小部分, 即属性项不能是属 性组合或由组属性组成。 2NF:第二范式[4][4]。如果关系模式 R为第一范式,并且 R中每一个非主属性[5][5]完全函数依赖[6][6]于 R 的某个候选键,则称 R 为第二范式模式。 (如果 A 是关系模式 R 的候选键的一个属性, 则称A是R的主属性,否则称A是R的非主属性。)3NF:第三范式[7][7]。 如果关系模式 R 是第二范式,且每个非主属性都不传递依赖于 R 的候选键,则称 R 是第三 范式的模式。 BCNF : BC模式。如果关系模式 R是第一范式,且每个属性都不传递依赖于R的候选键,那么称 R为BCNF的模式。4NF:第四范式[8][8]。设 R是一个关系模式,D是R上 的多值依赖[9][9]集合。如果 D中成立非平凡多值依赖 XuY时,X必是R的超键,那么称 R是 第四范式的模式。2.试题1)设有关系R(S,D,M),其函数依赖集 F=(S~ D,Dt M)。则关系R至多满足2NF。解析: 属于依赖关系,所有至多满足第二范式。2)找出表 ppp 里面 num 最小的数,不能使用 min 函数。 答: select * from ppp where num<=all(select num from ppp) 或者: select top 1 num from ppp order by num 。3)找出表 ppp 里面最小的数, 可以使用 min 函数。 答: select * from ppp where num= (select Min(num) from ppp )。4)选择表 ppp2 中 num 重复的记录。 答: select * from ppp2 where num in(select num from ppp2 group by num having(count(num)>1)) 。5)写出复制表、拷贝表和四表联合的 SQL 语句。 答:复制表 (只复制结构,源表名: A,新表名: B): select * into B from A where 1=0 拷贝表 (拷贝结构,源表名: A, 新表名:B): select * into B from A 四表联查: select * from A,B,C,D where 关联条件6)在SQL Server中如何用 SQL语句建立一张临时表? 答:create table #Temp(字段1类型,字段2类型…) 注意,临时表要在表名前面加 "#”。7)%代表任意长度 (长度可以为 0)的字符串, _ 代表任意单个字符。如果用户要查询的语句本身就含有%或_这时就要使用 escape'换码字符 > '短语对通配符进行转义了。8)集函数 SUM,AVG 中的列必须是数值型。综合的是选择题9)每一个部门的每个工种的工资最大值? select dept_id,job_cat,max(salary)from employeegroup by dept_id,job_cat;10)在 primary 和 unique 两种约束的情况下, Oracle 数据库会隐形创建一个唯一索引。11)在select语句中包含一个 where关键词,group by关键词一般在 where关键词之后,order by 关键词一般在 select 语句中所有关键词之后。12)select last_name,salary from employees order by salary; select last_name,salary from employees order by 2 asc; 这两个 SQL 语句是相同的结果。13)如果你想把时间显示成像“ 2005111014: 44: 17”这样的格式, SQL 语句: selectto_char(sydate,'yyyymmdd hh24:mi:ss ')from dual;14)select 语句中用来连接字符串的符号是 +。15)如果要从字符串“ Hello world ”中提取出“ ello world ”这样的结果, SQL 语句: select lower(trim( ‘H 'from ‘Hello world '))from dual;3.存储过程[10][10]和函数的区别是什么?答:存储过程是用户定义的一系列 SQL 语句的集合,涉及特定表或其他对象的任务,用户 可以调用存储过程。而函数通常是数据库已定义的方法,它接受参数并返回某种类型的值, 并且不涉及特定用户表。4.事务是什么?答:事务是作为一个逻辑单元[11][11]执行的一系列操作。 一个逻辑工作单元必须有 4个属性, 称为 ACID( 原子性[12][12]、一致性、隔离性[13][13]和持久性 )属性,只有这样才能称为一个事务。5.游标[14][14]的作用是什么?如何知道游标已经到了最后?答:游标用于定位结果集的行。通过判断全局变量[15][15] @@FETCH_STATUS 可以判断其是否到 了最后。通常此变量不等于 0 表示出错或到了最后。6.触发器[16][16]分为事前触发和事后触发,这两种触发有何区别?语句级触发和行级触发有何区 别?答: 事前触发器运行于触发事件发生之前, 而事后触发器运行于触发事件发生之后。 语句级 触发器可以在语句执行前或后执行,而行级触发在触发器所影响的每一行触发一次。7.什么叫做 SQL 注入式攻击?如何防范?答:所谓 SQL 注入式攻击,就是攻击者把 SQL 命令插入到 Web 表单的输入域页面请求的 查询字符串中,欺骗服务器执行恶意的 SQL 命令。在某些表单中,用户输入的内容直接用 来构造动态 SQL 命令,或作为存储过程的输入参数,这类表单特别容易受到 SQL 注入式攻 击。防范 SQL 注入式攻击闯入:只要在利用表单输入的内容构造 SQL 命令之前,把所有输 入内容过滤一番就可以了。过滤输入内容可以按多种方式进行。第一, 替换单引号,即把所 有单独出现的单引号改成两个单引号,防止攻击者修改 SQL 命令的含义。第二,删除用户 输入内容中的所有连字符, 防止攻击者顺利获得访问权限。 第三, 对于用来执行查询的数据 库账户, 限制其权限。 第四,用存储过程来执行所有的查询。 第五, 检查用户输入的合法性, 确信输入的内容只包含合法的数据。 数据检查应当在客户端和服务器端都执行。 第六, 将用户登录名称、密码等数据加密保存。第七,检查提取数据的查询所返回的记录数量。8.为了防止在查询记录的时候被其他用户更改记录, 应该采用什么方法?如何用查询语句实现该方法? 答: 添加一个“时间戳[17][17]”类型的字段就可以了。 timestamp 这种数据类型[18][18]会根据当前时间自动产生一个时间字符串,确保这些数在数据库中是唯一的。 timestamp 一般用做给表行加版 本戳的机制,存储大小为 8 个字节。一个表只能有一个 timestamp 列。每次插入或更新包含 timestamp 列的行时, timestamp 列中的值均会更新。这一属性使 timestamp 列不适合作为键 使用,尤其是不能作为主键使用。对行的任何更新都会更改 timestamp 值,从而更改键值。9.有一个数据库,只有一个表,包含着 1000 个记录,你能想出一种解决方案来把第五行到第七行的记录取出来么?不要使用航标和索引。答:第一步建立数据库:declare @i int set @i=1 create table #T(userid int) while (@i<=10) begin insert into #T select @i set @i=@i+1 end select userid from (select top 3 userid from(selec top 7 userid from #T order by userid)Ta order by userid desc )TB order by userid 删除数据库 : drop table #T 提取数据: select top 3 userid from T where userid not in(select top 4 userid from T order by userid)order by userid 或者: select top 7 userid from T where userid >ANY(select top 4 userid from T order by userid)order by userid或者: select top 7 userid from T where userid >ALL(select top 4 userid from T order by userid)order by userid10.什么是聚集索引?什么是非聚集索引?什么是主键? 答:表中经常有一个列或列的组合, 其值能唯一地标识表中的每一行。 这样的一列或多列称 为表的主键。 聚集索引确定表中数据的物理顺序。 一个表中只能包含一个聚集索引。 非聚集 索引与课本中的索引类似。 数据存储在一个地方, 索引存储[19][19]在另一个地方, 索引带有指针指 向数据的存储位置。 索引中的项目按索引键值的顺序存储[20][20], 而表中的信息按另一种顺序存储。11.现有一张表,有两个字段:ID,NAME。ID为主键。如果希望查询出所有拥有 2个或更多ID 的 NAME ,查询语句应该如何写?答: select [Name] from [table] group by(name) having(count([ID]>=2) 。12.设供应商供应零件的关系模式为 SP(Sno,Pno,Qty),其中Sno表示供应商号,Pno表示零件号,Qty 表示零件数量。整个数据库如下表SnoPnoQty168r13168r24168r37169r21169r35170r48171r75172r21172r73请问下面的 SQL 语句返回值是什么?Select * from SP SPY where exists (select * from SP SPZ where Sno) 解析:在 exists 中的子查询在这个例子中只返回一个值。 因为从子查询中返回的行数至少有 一行exits返回为true,这使得表中的所有记录都被显示了出来。请问下面的 SQL 语句返回值是什么?Select * from SP SPY where exists (select * from SP SPZ where Sno='168' and SPZ.Pno=SPY.Pno);
在请求分页[1][1]系统中,常采用哪几种页面置换算法?答:a.最佳置换算法;b.先进先出算法;c.最近最久未使用LRU置换算法;d.Clock置换算法; e.此外,还有最少使用置换算法和页面缓冲算法。数据库1.基础知识点:1NF:第一范式[2][2]。如果关系模式[3][3] R的所有属性的值域中每一个值都是不可再分解的值, 则称R属于第一范式模式。 第一范式的模式要求属性值不可再分裂成更小部分, 即属性项不能是属 性组合或由组属性组成。 2NF:第二范式[4][4]。如果关系模式 R为第一范式,并且 R中每一个非主属性[5][5]完全函数依赖[6][6]于 R 的某个候选键,则称 R 为第二范式模式。 (如果 A 是关系模式 R 的候选键的一个属性, 则称A是R的主属性,否则称A是R的非主属性。)3NF:第三范式[7][7]。 如果关系模式 R 是第二范式,且每个非主属性都不传递依赖于 R 的候选键,则称 R 是第三 范式的模式。 BCNF : BC模式。如果关系模式 R是第一范式,且每个属性都不传递依赖于R的候选键,那么称 R为BCNF的模式。4NF:第四范式[8][8]。设 R是一个关系模式,D是R上 的多值依赖[9][9]集合。如果 D中成立非平凡多值依赖 XuY时,X必是R的超键,那么称 R是 第四范式的模式。2.试题1)设有关系R(S,D,M),其函数依赖集 F={S~ D,Dt M}。则关系R至多满足2NF。解析: 属于依赖关系,所有至多满足第二范式。2)找出表 ppp 里面 num 最小的数,不能使用 min 函数。 答: select * from ppp where num<=all(select num from ppp) 或者: select top 1 num from ppp order by num 。3)找出表 ppp 里面最小的数, 可以使用 min 函数。 答: select * from ppp where num= (select Min(num) from ppp )。4)选择表 ppp2 中 num 重复的记录。 答: select * from ppp2 where num in(select num from ppp2 group by num having(count(num)>1)) 。5)写出复制表、拷贝表和四表联合的 SQL 语句。 答:复制表 (只复制结构,源表名: A,新表名: B): select * into B from A where 1=0 拷贝表 (拷贝结构,源表名: A, 新表名:B): select * into B from A 四表联查: select * from A,B,C,D where 关联条件6)在SQL Server中如何用 SQL语句建立一张临时表? 答:create table #Temp(字段1类型,字段2类型…) 注意,临时表要在表名前面加 "#”。7)%代表任意长度 (长度可以为 0)的字符串, _ 代表任意单个字符。如果用户要查询的语句本身就含有%或_这时就要使用 escape'换码字符 > '短语对通配符进行转义了。8)集函数 SUM,AVG 中的列必须是数值型。综合的是选择题9)每一个部门的每个工种的工资最大值? select dept_id,job_cat,max(salary)from employeegroup by dept_id,job_cat;10)在 primary 和 unique 两种约束的情况下, Oracle 数据库会隐形创建一个唯一索引。11)在select语句中包含一个 where关键词,group by关键词一般在 where关键词之后,order by 关键词一般在 select 语句中所有关键词之后。12)select last_name,salary from employees order by salary; select last_name,salary from employees order by 2 asc; 这两个 SQL 语句是相同的结果。13)如果你想把时间显示成像“ 2005111014: 44: 17”这样的格式, SQL 语句: selectto_char(sydate,'yyyymmdd hh24:mi:ss ')from dual;14)select 语句中用来连接字符串的符号是 +。15)如果要从字符串“ Hello world ”中提取出“ ello world ”这样的结果, SQL 语句: select lower(trim( ‘H 'from ‘Hello world '))from dual;3.存储过程[10][10]和函数的区别是什么?答:存储过程是用户定义的一系列 SQL 语句的集合,涉及特定表或其他对象的任务,用户 可以调用存储过程。而函数通常是数据库已定义的方法,它接受参数并返回某种类型的值, 并且不涉及特定用户表。4.事务是什么?答:事务是作为一个逻辑单元[11][11]执行的一系列操作。 一个逻辑工作单元必须有 4个属性, 称为 ACID( 原子性[12][12]、一致性、隔离性[13][13]和持久性 )属性,只有这样才能称为一个事务。5.游标[14][14]的作用是什么?如何知道游标已经到了最后?答:游标用于定位结果集的行。通过判断全局变量[15][15] @@FETCH_STATUS 可以判断其是否到 了最后。通常此变量不等于 0 表示出错或到了最后。6.触发器[16][16]分为事前触发和事后触发,这两种触发有何区别?语句级触发和行级触发有何区 别?答: 事前触发器运行于触发事件发生之前, 而事后触发器运行于触发事件发生之后。 语句级 触发器可以在语句执行前或后执行,而行级触发在触发器所影响的每一行触发一次。7.什么叫做 SQL 注入式攻击?如何防范?答:所谓 SQL 注入式攻击,就是攻击者把 SQL 命令插入到 Web 表单的输入域页面请求的 查询字符串中,欺骗服务器执行恶意的 SQL 命令。在某些表单中,用户输入的内容直接用 来构造动态 SQL 命令,或作为存储过程的输入参数,这类表单特别容易受到 SQL 注入式攻 击。防范 SQL 注入式攻击闯入:只要在利用表单输入的内容构造 SQL 命令之前,把所有输 入内容过滤一番就可以了。过滤输入内容可以按多种方式进行。第一, 替换单引号,即把所 有单独出现的单引号改成两个单引号,防止攻击者修改 SQL 命令的含义。第二,删除用户 输入内容中的所有连字符, 防止攻击者顺利获得访问权限。 第三, 对于用来执行查询的数据 库账户, 限制其权限。 第四,用存储过程来执行所有的查询。 第五, 检查用户输入的合法性, 确信输入的内容只包含合法的数据。 数据检查应当在客户端和服务器端都执行。 第六, 将用户登录名称、密码等数据加密保存。第七,检查提取数据的查询所返回的记录数量。8.为了防止在查询记录的时候被其他用户更改记录, 应该采用什么方法?如何用查询语句实现该方法? 答: 添加一个“时间戳[17][17]”类型的字段就可以了。 timestamp 这种数据类型[18][18]会根据当前时间自动产生一个时间字符串,确保这些数在数据库中是唯一的。 timestamp 一般用做给表行加版 本戳的机制,存储大小为 8 个字节。一个表只能有一个 timestamp 列。每次插入或更新包含 timestamp 列的行时, timestamp 列中的值均会更新。这一属性使 timestamp 列不适合作为键 使用,尤其是不能作为主键使用。对行的任何更新都会更改 timestamp 值,从而更改键值。9.有一个数据库,只有一个表,包含着 1000 个记录,你能想出一种解决方案来把第五行到第七行的记录取出来么?不要使用航标和索引。答:第一步建立数据库:declare @i int set @i=1 create table #T(userid int) while (@i<=10) begin insert into #T select @i set @i=@i+1 end select userid from (select top 3 userid from(selec top 7 userid from #T order by userid)Ta order by userid desc )TB order by userid 删除数据库 : drop table #T 提取数据: select top 3 userid from T where userid not in(select top 4 userid from T order by userid)order by userid 或者: select top 7 userid from T where userid >ANY(select top 4 userid from T order by userid)order by userid或者: select top 7 userid from T where userid >ALL(select top 4 userid from T order by userid)order by userid10.什么是聚集索引?什么是非聚集索引?什么是主键? 答:表中经常有一个列或列的组合, 其值能唯一地标识表中的每一行。 这样的一列或多列称 为表的主键。 聚集索引确定表中数据的物理顺序。 一个表中只能包含一个聚集索引。 非聚集 索引与课本中的索引类似。 数据存储在一个地方, 索引存储[19][19]在另一个地方, 索引带有指针指 向数据的存储位置。 索引中的项目按索引键值的顺序存储[20][20], 而表中的信息按另一种顺序存储。11.现有一张表,有两个字段:ID,NAME。ID为主键。如果希望查询出所有拥有 2个或更多ID 的 NAME ,查询语句应该如何写?答: select [Name] from [table] group by(name) having(count([ID]>=2) 。12.设供应商供应零件的关系模式为 SP(Sno,Pno,Qty),其中Sno表示供应商号,Pno表示零件号,Qty 表示零件数量。整个数据库如下表SnoPnoQty168r13168r24168r37169r21169r35170r48171r75172r21172r73请问下面的 SQL 语句返回值是什么?Select * from SP SPY where exists (select * from SP SPZ where Sno) 解析:在 exists 中的子查询在这个例子中只返回一个值。 因为从子查询中返回的行数至少有 一行exits返回为true,这使得表中的所有记录都被显示了出来。请问下面的 SQL 语句返回值是什么?Select * from SP SPY where exists (select * from SP SPZ where Sno='168' and SPZ.Pno=SPY.Pno);
题目解答
答案
