数据库面试题笔试题

数据库面试题笔试题,Oracle+面试及答案-经典,Hadoop基础知识面试题大汇总,面试数据库知识必须要知道的sql语法和SQL语句,数据库笔试题面试题集,数据库面试题(附答案)

应用介绍

数据库面试题笔试题,数据库面试题笔试题,Oracle+面试及答案-经典,Hadoop基础知识面试题大汇总,面试数据库知识必须要知道的sql语法和SQL语句,数据库笔试题面试题集,数据库面试题(附答案)

一、基础概念

1.      列举几种表连接方式

Answer:等连接(内连接)、非等连接、自连接、外连接(左、右、全)

Or hash join/merge join/nestloop(cluster join)/index join ??

ORACLE 8i,9i 表连接方法。

 

一般的相等连接: select * from a, b wherea.id = b.id; 这个就属于内连接。

 

对于外连接:

Oracle中可以使用“(+) ”来表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN

 

LEFT OUTER JOIN:左外关联

SELECT e.last_name,e.department_id, d.department_name

FROM employees e

LEFT OUTER JOIN departments d

ON (e.department_id =d.department_id);

等价于

SELECT e.last_name,e.department_id, d.department_name

FROM employees e, departments d

WHEREe.department_id=d.department_id(+)

结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录。

 

RIGHT OUTER JOIN:右外关联

SELECT e.last_name,e.department_id, d.department_name

FROM employees e

RIGHT OUTER JOIN departments d

ON (e.department_id =d.department_id);

等价于

SELECT e.last_name,e.department_id, d.department_name

FROM employees e, departments d

WHEREe.department_id(+)=d.department_id

结果为:所有员工及对应部门的记录,包括没有任何员工的部门记录。

 

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的员工记录和没有任何员工的部门记录。

 

ORACLE8i是不直接支持完全外连接的语法,也就是说不能在左右两个表上同时加上(+),下面是在ORACLE8i可以参考的完全外连接语法

select t1.id,t2.id from table1t1,table t2 where t1.id=t2.id(+)

union

select t1.id,t2.id from table1t1,table t2 where t1.id(+)=t2.id

 

 


连接类型
定义 图示 例子
内连接 只连接匹配的行   select A.c1,B.c2 from A join B on A.c3 = B.c3;
左外连接 包含左边表的全部行(不管右边的表中是否存在与它们匹配的行)以及右边表中全部匹配的行   select A.c1,B.c2 from A left join B on A.c3 = B.c3;
右外连接 包含右边表的全部行(不管左边的表中是否存在与它们匹配的行)以及左边表中全部匹配的行   select A.c1,B.c2 from A right join B on A.c3 = B.c3;
全外连接 包含左、右两个表的全部行,不管在另一边的表中是否存在与它们匹配的行   select A.c1,B.c2 from A full join B on A.c3 = B.c3;
(theta)连接 使用等值以外的条件来匹配左、右两个表中的行   select A.c1,B.c2 from A join B on A.c3 != B.c3;
交叉连接 生成笛卡尔积——它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行一一匹配   select A.c1,B.c2 from A,B;

 

2.      不借助第三方工具,怎样查看sql的执行计划

I) 使用Explain Plan,查询PLAN_TABLE;

  EXPLAIN  PLAN

     SET STATEMENT_ID='QUERY1'

     FOR

     SELECT *

     FROM a

     WHERE aa=1;

  SELECT   operation, options, object_name,object_type, ID, parent_id

      FROMplan_table

     WHERESTATEMENT_ID = 'QUERY1'

  ORDER BY ID;

II)SQLPLUS中的SET TRACE 即可看到Execution Plan Statistics

  SET AUTOTRACE ON;

3.      如何使用CBO,CBO与RULE的区别

  IF 初始化参数 OPTIMIZER_MODE = CHOOSE THEN --(8I DEFAULT)

     IF 做过表分析

        THEN 优化器 Optimizer=CBO(COST);         /*高效*/

     ELSE

        优化器 Optimizer=RBO(RULE);              /*高效*/

     END IF;

  END IF;

 

  区别:

  RBO根据规则选择最佳执行路径来运行查询。

  CBO根据表统计找到最低成本的访问数据的方法确定执行计划。

  使用CBO需要注意:

  I)  需要经常对表进行ANALYZE命令进行分析统计;

  II) 需要稳定执行计划;

  III)需要使用提示(Hint);

  使用RULE需要注意:

I)  选择最有效率的表名顺序

II) 优化SQL的写法;

 

 

在optimizer_mode=choose时,如果表有统计信息(分区表外),优化器将选择CBO,否则选RBO。 

RBO遵循简单的分级方法学,使用15种级别要点,当接收到查询,优化器将评估使用到的要点数目,然后选择最佳级别(最少的数量)的执行路径来运行查询。 

CBO尝试找到最低成本的访问数据的方法,为了最大的吞吐量或最快的初始响应时间,计算使用不同的执行计划的成本,并选择成本最低的一个,关于表的数据内容的统计被用于确定执行计划。

4.      如何定位重要(消耗资源多)的SQL

使用CPU多的用户session

SELECT a.SID,spid, status, SUBSTR (a.program, 1, 40) prog, a.terminal,a.SQL_TEXT, osuser,VALUE / 60 / 100 VALUE

FROM v$session a,v$process b, v$sesstat c

WHERE c.statistic#= 12 AND c.SID = a.SID AND a.paddr = b.addr

ORDER BY VALUEDESC;

 

select sql_textfrom v$sql 

where disk_reads> 1000 or (executions > 0 and buffer_gets/executions >30000);

5.      如何跟踪某个session的SQL

利用TRACE 跟踪

  ALTER SESSIONSET SQLTRACE ON;

  COLUMN SQLformat a200;

  SELECT   machine, sql_text SQL

      FROMv$sqltext a, v$session b

     WHEREaddress = sql_address

       ANDmachine = '&A'

  ORDER BYhash_value, piece;

 

exec dbms_system.set_sql_trace_in_session(sid,serial#,&sql_trace); 

select sid,serial# from v$session where sid = (select sidfrom v$mystat where rownum = 1); 

execdbms_system.set_ev(&sid,&serial#,&event_10046,&level_12,'');

文件列表(部分)

名称 大小 修改日期
Hadoop基础知识面试题大汇总.docx14.85 KB2017-06-05
Oracle+面试及答案-经典.doc34.54 KB2017-06-05
Oracle笔试题及答案.doc18.97 KB2017-06-05
数据库笔试题面试题集.docx76.75 KB2017-06-05
数据库面试题(附答案).docx10.95 KB2017-06-05
面试hadoop可能被问到的问题,你能回答出几个.docx12.84 KB2017-06-05
面试数据库知识必须要知道的sql语法和SQL语句.docx15.83 KB2017-06-05
数据库面试题笔试题0.00 KB2017-06-05

立即下载

相关下载

[数据库面试题笔试题] 数据库面试题笔试题,Oracle+面试及答案-经典,Hadoop基础知识面试题大汇总,面试数据库知识必须要知道的sql语法和SQL语句,数据库笔试题面试题集,数据库面试题(附答案)

评论列表 共有 0 条评论

暂无评论

微信捐赠

微信扫一扫体验

立即
上传
发表
评论
返回
顶部