a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 91|回复: 0

[考试试题] Oracle常见面试题及答案详解1

[复制链接]
发表于 2012-8-4 14:01:27 | 显示全部楼层 |阅读模式
1.   列举几种表连接方式 * F0 x; x. [0 Q" D
Answer:等连接(内连接)、非等连接、自连接、外连接(左、右、全) / N- a" V: j! x0 {/ `! N
Or hash join/merge join/nest loop(cluster join)/index join ??  
, A9 S( M' R. {& d/ p# XORACLE 8i,9i 表连接方法。  
4 C  A4 i8 i2 g/ d& R  
. m5 P, z. l0 y0 U# s一般的相等连接: select * from a, b where a.id = b.id; 这个就属于内连接。  
+ i1 v1 h; x- M5 N! {  ^  
) E/ b& V( ~/ ~2 z7 v5 \8 [. T. L对于外连接:    b- u6 F8 I( ?! M
Oracle中可以使用“(+) ”来表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN  
- t2 j% \8 c0 s; q0 j2 n; H7 q  
9 \9 w" E0 h7 {9 n5 d3 [3 m; uLEFT OUTER JOIN:左外关联  8 W7 i8 A# R7 B* C( Q/ b, l
SELECT e.last_name, e.department_id, d.department_name  
( I6 ]; f! J- ?; n  D  _FROM employees e  $ c# c7 N0 q/ J4 M6 U
LEFT OUTER JOIN departments d  
5 a" `9 ?8 d2 M) P, a0 NON (e.department_id = d.department_id);  
; d4 \% s, {  p! f等价于  " X6 R) h) \9 {; d: N9 z- Q
SELECT e.last_name, e.department_id, d.department_name  
1 O5 K0 \9 g# O; B2 NFROM employees e, departments d  ( C8 P) S$ `" c# Y0 a3 R# F9 v- d& D
WHERE e.department_id=d.department_id(+)  ' d/ l$ n. U6 }& c: I
结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录。  . f9 E* z8 t7 S1 V! d: |2 c: Z3 _
  
5 t* q% v- ^! ~9 |5 ERIGHT OUTER JOIN:右外关联  5 F9 b! N" Q, J) G/ g
SELECT e.last_name, e.department_id, d.department_name  # z' [' K( `; K2 m4 e
FROM employees e  
1 Z, k2 y  \3 t! c% u0 h2 _. S. MRIGHT OUTER JOIN departments d  5 u' k8 U. @& }3 b% Q
ON (e.department_id = d.department_id);  ' R- {# ^6 ^+ {
等价于  4 h# M! K8 p8 f5 [$ |# W* C
SELECT e.last_name, e.department_id, d.department_name  % V3 @. J! q; _
FROM employees e, departments d  
, x1 }$ Y; `+ L0 K8 F8 XWHERE e.department_id(+)=d.department_id  , o* i7 K, F& t0 b, b
结果为:所有员工及对应部门的记录,包括没有任何员工的部门记录。  
# S" |0 _8 {! Z9 X9 s  Z  
& H0 q  O9 |* }$ U, g& g! `FULL OUTER JOIN:全外关联  
# G9 x$ S" F0 I! L4 [, A5 ySELECT e.last_name, e.department_id, d.department_name  4 c/ r2 c3 b$ z4 x! w
FROM employees e  4 j' d5 b- v# c9 b9 Q
FULL OUTER JOIN departments d  9 S3 y" p, V, p9 h5 w' p+ X% x1 m3 A: i
ON (e.department_id = d.department_id);  
. Z$ L1 _: I" n$ Q; i结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录和没有任何员工的部门记录。
2 b* U2 Z2 x- |) w- m2 V0 z  9 u' z! T/ r2 l' J5 X- q! ~( j
ORACLE8i是不直接支持完全外连接的语法,也就是说不能在左右两个表上同时加上(+),下面是在ORACLE8i可以参考的完全外连接语法 & @- k, p! ^$ H8 l; M& u/ N* ?
select t1.id,t2.id from table1 t1,table t2 where t1.id=t2.id(+)  7 C2 F! K! N9 x- q# ^& P
union  
# F2 ~( X2 s$ Z1 x* @select t1.id,t2.id from table1 t1,table t2 where t1.id(+)=t2.id
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-4-29 05:32 , Processed in 1.871643 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表