黑马程序员技术交流社区

标题: 求Java就业班面试题中关于数据库的题!! [打印本页]

作者: li6232876    时间: 2016-6-2 09:40
标题: 求Java就业班面试题中关于数据库的题!!
本帖最后由 li6232876 于 2016-6-2 10:26 编辑

求Java就业班面试题中关于数据库Http协议的题或者考点也行!!
谁面试过,最好分享几道真题,不胜感激!!







作者: 久爱不腻——江    时间: 2016-6-2 09:40
1.        sql2000和sql2005有什么区别?
   a、 最直观的一点就是两者的界面有很明显的不同。sql2005的操作风格更接近于vs2005。
   b、 sql2005比sql2000存储的数据量要大很多,sql2005支持数据库逻辑分区;
   c、 sql2000与sql20005 jdbc连接不同:
       sql2000 jdbc连接:url地址:jdbc:microsoft:sqlserver://<server_name>:<1433>;
                         driver :com.microsoft.jdbc.sqlserver.SQLServerDriver;
       sql2005 jdbc连接:url地址:jdbc:sqlserver://<server_name>:<port>[;databaseName=<dbname>];
                         driver :com.microsoft.sqlserver.jdbc.SQLServerDriver;
   d、         安全性能的提高:sql Server 2005包括了一些在安全性能上的改进,例如将用户和对象分开、数据库加密、设置安全默认值、增强密码政策、缜密的许可控制、以及一个增强型的安全模式。
   e、         sql2005还提供了一些新的特性,比如文件流支持(向第三代数据库迈出了可喜的一步)、T-Sql的改进(处理错误、递归查询功能、关系运算符PIVOT, APPLY, ROW_NUMBER和其他数据列排行功能,等等)、数据库镜像、透        明的客户端重定向、新的基于架构的安全模型、内建的Http服务器等...。

1.        存储过程的作用?
    存储过程可以使得对数据库的管理、以及显示关于数据库及其用户信息的工作容易得多。存储过程是 SQL 语句和可选控制流语句的预编译集合,
    以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,
    而且允许用户声明变量、有条件执行以及其它强大的编程功能。
    存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。

    可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点:
    可以在单个存储过程中执行一系列 SQL 语句。
    可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。
存储过程在创建时即在服务器上进行编译,所以执行起来比单个 SQL 语句快。

2.        sqlserver和oracle数据库的性能优化
3.1选用适合的ORACLE优化器
        ORACLE的优化器共有3种:  
     a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性)
       在缺省情况下,ORACLE采用CHOOSE 优化器, 为了避免那些不必要的全表扫描(full table scan) ,
       你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器.
访问Table的方式
3.2ORACLE 采用两种访问表中记录的方式:
     a. 全表扫描                                                   
        全表扫描就是顺序地访问表中每条记录. ORACLE采用一次读入多个数据块(database block)的方式优化全表扫描.
     b. 通过ROWID访问表                                         
          你可以采用基于ROWID的访问方式情况,提高访问表的效率,RowId包含了表中记录的物理位置信息.ORACLE采用索引(INDEX)实现了
          数据和存放数据的物理位置(RowId)之间的联系。 通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到
          性能上的提高.
3.3. 选择最有效率的表名顺序(只在基于规则的优化器中有效)
3.4. WHERE子句中的连接顺序.
       ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数
       量记录的条件必须写在WHERE子句的末尾.
3.5. SELECT子句中避免使用 ‘ * ‘                           
       当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 ‘*’ 是一个方便的方法.不幸的是,这是一个非常
       低效的方法. 实际上,ORACLE在解析的过程中, 会将’*’ 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这
       意味着将耗费更多的时间.
3.6. 减少访问数据库的次数
       当执行每条SQL语句时, ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等等. 由此可
       见, 减少访问数据库的次数 , 就能实际上减少 ORACLE的工作量.
3.7. 整合简单,无关联的数据库访问
       如果你有几个简单的数据库查询语句,你可以把它们整合到一个查询中(即使它们之间没有关系)
3.8. 使用表的别名(Alias)
       当在SQL语句中连接多个表时, 请使用表的别名并把别名前缀于每个Column上.这样一来,
       就可以减少解析的时间并减少那些由Column歧义引起的语法错误.
3.9. 对经常要查询的字段可以建立一个视图
3.10. 在表中的某个字段上建立索引,可以提高检索速度。

3.        模糊查询可以用索引吗?
     (1)如果模糊查询是下边这个样子:where a like '*****%',就可以用索引;
       如果模糊查询是 where a like '%****'的形式,就不能使用索引!
(2)建全文索引后使用constain

4.        sql的关键字及其一些函数
    sql关键字:all, alter, as, asc, container, create, delete, desc, drop, first, from, in, index,
               insert, into, join, last, on, schema, select, selectschema, selectsecurity, table,
               to, update, updateidentity, updateowner, updatesecurity, user, with;
    函数:Avg(), Count(), First(), Last(), Max(), Min(), Sum(),StDev()
          StDevP()[StDev,StDevP返回总体或总体样本的标准偏差的估计值], Var(), VarP()[Var,VarP返回一个总体或总体样本的方差的估计值
         
ODBC标量函数:
    1. 字符串函数 ASCII   LENGTH  RTRIM   CHAR  LOCATE   SPACE CONCAT    LTRIM  SUBSTRING  LCASE  RIGHT  UCASE   LEFT
    2. 数字函数 ABS  FLOOR  SIN  ATAN  LOG  SQRT CEILING   POWER      TAN          COS  RAND   MOD  EXP  SIGN
    3. 时间和日期函数  CURDATE   DAYOFYEAR  MONTH  CURTIME   YEAR        WEEK  NOW  HOUR QUARTER  DAYOFMONTH   MINUTE    MONTHNAME   DAYOFWEEK   SECOND    DAYNAME
    4. 数据类型变换    CONVERT
ORACLE
5.        Oracle中的事务
Oracle在缺省情况下任何一个DML语句都会开始一个事务,直到用户发出Commit或Rollback操作,这个事务才会结束。在Oracle中,执行DDL语句(如Create Table、Create View等)时,会在执行之前自动发出一个Commit命令,并在随后发出一个Commit或者Rollback命令。
(1) 提交事务
提交一事务,即将在事务中由SQL语句所执行的改变永久化。在提交前,ORACLE已有下列情况:
   在SGA的回滚段缓冲区已生成回滚段记录,回滚信息包含有所修改值的老值。
   在SGA的日志缓冲区已生成日志项。这些改变在事务提交前可进入磁盘。
   对SGA的数据库缓冲区已作修改,这些修改在事务真正提交之前可进入磁盘。
   在事务提交之后,有下列情况:
   对于与回滚段相关的内部事务表记录提交事务,并赋给一个相应的唯一系统修改号(SCN),记录在表中。
   在SGA的日志缓冲区中日志项由LGWR进程写入到在线日志文件, 这是构成提交事务的原子事务。
   在行上和表上的封锁被释放。
   该事务标志为完成 。
   注意:对于提交事务的数据修改不必由DBWR后台进程立即写入数据文件,可继续存储在SGA的数据库缓冲区中,在最有效时将其写入数据文件。
(2) 回滚事务
回滚事务的含义是撤消未提交事务中的SQL语句所作的对数据修改。ORALCE允许撤消未提交的整个事务,也允许撤消部分。
   在回滚整个事务(没有引用保留点)时,有下列情况:
   在事务中所有SQL语句作的全部修改,利用相应的回滚段被撤消。
   所有数据的事务封锁被释放。
   事务结束。
   当事务回滚到一保留点(具有SAVEPOINT)时,有下列情况:
   仅在该保留点之后执行的语句被撤消。
   该指定的保留点仍然被保留,该保留点之后所建立的保留点被删除。
   自该保留点之后所获取的全部表封锁和行封锁被释放,但指定的保留点以前所获取的全部数据封锁继续保持。
   该事务仍可继续。
(3) 保留点
保留点(savepoint)是在一事务范围内的中间标志,经常用于将一个长的事务划分为小的部分。保留点可标志长事务中的任何点,允许可回滚该点之后的工作。在应用程序中经常使用保留点;例如一过程包含几个函数,在每个函数前可建立一个保留点,如果函数失败,很容易返回到每一个函数开始的情况。在回滚到一个保留点之后,该保持点之后所获得的数据封锁被释放。

6.        视图在什么情况下可以对其,删除,修改操作:
DML操作应遵循的原则:
1).简单视图可以执行DML操作;
2).在视图包含GROUP 函数,GROUP BY子句,DISTINCT关键字时不能删除数据行;
3).在视图不出现下列情况时可通过视图修改基表数据或插入数据:
a.视图中包含GROUP 函数,GROUP BY子句,DISTINCT关键字;
b.使用表达式定义的列;
c.ROWNUM伪列。
d.基表中未在视图中选择的其他列定义为非空且无默认值。
WITH CHECK OPTION 子句限定:
通过视图执行的INSERTS和UPDATES操作不能创建该视图检索不到的数据行,
因为它会对插入或修改的数据行执行完整性约束和数据有效性检查。
视图的删除:
DROP VIEW  VIEW_NAME语句删除视图。
删除视图的定义不影响基表中的数据。
只有视图所有者和具备DROP VIEW权限的用户可以删除视图。
视图被删除后,基于被删除视图的其他视图或应用将无效。

7.        oracle中各种连接的写法:
内连接,外连接 ,左外连接,右外连接
以上几种连接一般用于多表之间复杂的查询,
下面先说说内连接,也即相等连接,如右两张表 dept ,employee,
dept里有字段deptid,deptname,employee有字段empno,deptid,ename,sal,age等
那连接查询语句如下:select A.* ,B.* from dept A,employee B where A.deptid=B.deptid
一般出现这种情况的是一张是主表,另一张是子表,主表的主键作为子表的外键,显示结果按照子表的显示, 内连接简单,这里就不多说了
外连接在oralce里用(+)表示,先看例子
select empno,ename,sal,emp.deptno,dept.deptno from emp,dept where emp.deptno(+) =dept.deptno
这是一个右连接
看下面的例子
select empno,ename,sal,emp.deptno,dept.deptno from emp,dept where dept.no=emp.deptno(+)
这是一个左连接
两个查询显示的查询结果是一样的,刚开始学oracle的时候很多人都很难明白这个,现在有个笨办法,
大家不防记下来,(+)出现查询条件的左边即右连接,出现在右边即左连接。(+)可以放在左边也可以
放在右边,但是一定要放在缺少条件的那一边,如上面的例子中,如果公司最近准备成立一个新的部门,
测试部门,但现在还没有招新员工,而现在Boss想知道公司有知道公司的员工在那个部门并且想知道
没有员工的部门,我们可以用上面的查询语句实现。
左外连接(left outer join)和右外连接(reght outer join)如同上面的外连接,查询的结果是一样的。
左外连接:select empno,ename,sal,emp.deptno,dept.deptno from dept left outer join emp on (emp.deptno=dept.deptno)
右外连接:select empno,ename,sal,emp.deptno,dept.deptno from emp reight outer join dept on (emp.deptno=dept.deptno)
以上显示的结果和外连接查询出来的结果是一样的 ,只是写法不一样而已,实际工作中外连接用的比较多,没有必要都要去用它,但是概念大家一定要了解。
全外关联 :FULL OUTER JOIN
SELECT e.last_name, e.department_id, d.department_name  
FROM employees e  
FULL OUTER JOIN departments d  
ON (e.department_id = d.department_id);  
结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录和没有任何员工的部门记录。

8.        查询的优化       
1).根据查询条件建立合适的index
2).因为SQL是从右向左解析,多表查询时,记录数少的表放在右边
3).多个条件时,收敛快的条件放在右边。
4).避免使用复杂的集合函数,象not in等。
5).避免在条件中对字段进行函数操作
6).尽量避免使用select *,应该写出需要查询的字段
7).在java中尽量使用preparestatement执行sql,从而共享执行计划"

9.        怎么看执行计划       
使用explain或者autotrace查看执行计划

10.        如何强制一个SQL语句使用索引?        使用index hints

11.        Oracle中的PL/SQL块是否熟悉?Oracle中的内置函数是否熟悉?
内置函数:ASCII,CHR,CONCAT, decode,to_date,to_char,to_number等等。

12.        如何取一个没有排序的查询结果中的前10条记录?
select fielda from tablea where rownum<=10;
13.        问:如何取一个有排序的查询结果中的前10条记录?
select fielda from  (select fielda from tablea order by fieldb ) where rownum<=10;
错误写法:select fielda from tablea where rownum<=10 order by fieldb;

14.        如何取一个没有排序的查询结果中的第11条到第20条记录?
select fielda from
(select fielda,rownum rn from tablea where rownum<=20)
where rn>=11;
15.        如何取一个有排序的查询结果中的第11条到第20条记录?
select fielda from (select fielda ,rownum rn from (select fielda from tablea order by fieldb )
where rownum<=20) where rn>=11;

16.        数据库设计中,主键的作用?
主键的作用保持数据表记录的唯一性,建立主键索引和作为外键使用.使用主键与外键的配对来表示实体间的连接.


作者: 土菠萝    时间: 2016-6-2 10:07
没面试到
作者: chengxiankun    时间: 2016-6-3 23:18
http好像真的没有接触到
数据库面试题好像在百度可以搜到
作者: li6232876    时间: 2016-6-5 18:27
久爱不腻——江 发表于 2016-6-5 18:13
1.        sql2000和sql2005有什么区别?
   a、 最直观的一点就是两者的界面有很明显的不同。sql2005的操作风格更 ...

面试完了,这里面确实不少考点,谢谢了。
作者: demon凯    时间: 2016-6-15 08:16
好吧   还要考数据库啊   
作者: 为何帅    时间: 2016-6-16 12:50
li6232876 发表于 2016-6-5 18:27
面试完了,这里面确实不少考点,谢谢了。

楼主过了没?
作者: aizengk    时间: 2016-6-24 16:37
加油加油加油~~~~~
作者: caesar_QMwS4    时间: 2016-6-25 12:35
好东西,收藏了!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2