java面试题网

普通会员

15

帖子

1

回复

33

积分

楼主
发表于 2018-06-06 18:01:49 | 查看: 756| 回复: 0

题目:

  1. 两张关联表,删除salary表中已经在worker表中没有的信息。

  2. 索引分类?

  3. 索引使用规则?

  4. 有两个表A和B,均有key和value两个字段,如果B的key在A中也有,就把B的value换为A 中对应的value。 这道题的SQL 语句怎么写?

  5. 什么是事务?

  6. 什么是锁?

  7. 从employee表中获取雇员详细信息,其雇员名称不包括“John”和“Roy”。

  8. 什么是游标?

  9. 为什么要慎用游标?

  10. 有course表:

    cidcnamescore
    1java70
    2oracle90
    3xml40
    4jsp30
    5servlet80

    为了便于阅读,查询此表后的结果显式如下(及格分数为60):

    courseidcoursenamescoremark
    1java70pass
    2oracle90pass
    3xml40fail
    4jsp30fail
    5servlet80pass

    写出此查询语句。


答案:

  1. delete from salary where not exists (

    select wid from worker where worker.wid = salary.wid)

  2. a. 直接创建索引和间接创建索引

    直接创建:使用sql语句创建

    间接创建:定义主键约束或者唯一性键约束,可以间接创建索引,主键默认为唯一索引。

    b. 普通索引和唯一性索引

    普通索引:

    CREATE INDEX mycolumn_index ON mytable (myclumn)

    唯一性索引:保证在索引列中的全部数据是唯一的,对聚簇索引和非聚簇索引都可以使用:

    CREATE UNIQUE COUSTERED INDEX myclumn_cindex ON mytable(mycolumn)

    c. 单个索引和复合索引

    单个索引:索引建立语句中仅包含单个字段,如上面的普通索引和唯一性索引创建示例。

    复合索引:又叫组合索引,在索引建立语句中同时包含多个字段:

    CREATE INDEX name_index ON username(firstname, lastname)

    其中firstname为前导列。

    d. 聚簇索引和非聚簇索引(聚集索引,群集索引)

    聚簇索引:物理索引,与基表的物理顺序相同,数据值的顺序总是按照顺序排列:

    CREATE CLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn) WITH ALLOW_DUP_ROW

    其中WITH ALLOW_DUP_ROW表示允许有重复记录的聚簇索引。

    非聚簇索引:

    CREATE UNCLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn)

    索引默认为非聚簇索引。

  3. a. 对于复合索引,把使用最频繁的列做为前导列(索引中第一个字段)。如果查询时前导列不在查询条件中则该复合索引不会被使用。如:

    create unique index PK_GRADE_CLASS on student (grade, class)

    select * from student where class = 2 未使用到索引

    select * from dept where grade = 3 使用到了索引

    b. 避免对索引列进行计算,对where子句列的任何计算如果不能被编译优化,都会导致查询时索引失效。

    c. 比较值避免使用NULL

    d. 多表查询时要注意是选择合适的表做为内表。连接条件要充份考虑带有索引的表、行数多的表,内外表的选择可由公式:外层表中的匹配行数*内层表中每一次查找的次数确定,乘积最小为最佳方案。实际多表操作在被实际执行前,查询优化器会根据连接条件,列出几组可能的连接方案并从中找出系统开销最小的最佳方案。

    e. 查询列与索引列次序一致。

    f. 用多表连接代替EXISTS子句。

    g. 把过滤记录数最多的条件放在最前面。

    h. 善于使用存储过程,它使sql变得更加灵活和高效。

  4. update B set B.value =

    (select A.value from A where A.key = B.key)

    where B.id in(select B.id from B, A where B.key = A.key);

  5. 事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。

  6. 在所以的DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。

  7. select * from EMPLOYEE where FIRST_NAME not in ('John','Roy');

  8. 游标是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

  9. 数据库一般的操作是集合操作,也就是对由WHERE子句和选择列确定的结果集作集合操作,游标是提供的一个非集合操作的途径。一般情况下,游标实现的功能往往相当于客户端的一个循环实现的功能,所以,大部分情况下,我们把游标功能搬到客户端。

    游标是把结果集放在服务器内存,并通过循环一条一条处理记录,对数据库资源(特别是内存和锁资源)的消耗是非常大的,所以,我们应该只有在没有其他方法的情况下才使用游标。

  10. select cid, cname, score, (case when score<60 then 'fail' else 'pass' end) as mark from course;



您需要登录后才可以回帖 登录 | 立即注册

java面试题网无聊看看网与java建站系统提供技术支持V2.1 网站地图 © 2016-2018