oracle连接

print?

两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行 ,这种连接称为左(右) 外联接。 

两个表在连接过程中除了返回满足连接条件的行以外还返回两个表中不满足条件的行 ,这种连接称为满 外联接。 

内连接 

select empno,ename,sal,dname,loc from emp,dept 

10 where emp.deptno=dept.deptno; 

11 

12 

13 外连接 

14 

15 SELECT emp.column, dept.column --右外连接  

16 

17 FROM emp, dept 

18 

19 WHERE emp.column(+) = dept.column; 

20 

21 SELECT emp.column, dept.column --左外连接  

22 

23 FROM emp, dept 

24 

25 WHERE emp.column = dept.column(+); 

26 

27 外连接的符号是(+),(+)要放在字段名后。(+)对面的那个表,会全部显示。 

28 

29 左外连接时,加号在等号的右边 

30 

31 select d.dname,e.ename,e.deptno 

32 

33 from dept d,emp e 

34 

35 where d.deptno = e.deptno(+) 

36 

37 order by d.deptno; 

38 

39 右外连接 

40 

41 select empno, ename, job, sal, dept.deptno, dname, loc 

42 

43 2 from emp, dept 

44 

45 3 where emp.deptno(+) = dept.deptno; 

46 

47 

48 满外联接 

49 

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

51 FROM employees e 

52 FULL OUTER JOIN departments d 

53 ON (e.department_id = d.department_id) ; 

54 

55 

56 自连接: 

57 

58 把表自身的镜像当成另外一个表 

59 

60 SELECT worker.last_name || ' works for ' 

61 || manager.last_name 

62 FROM employees worker, employees manager 

63 WHERE worker.manager_id = manager.employee_id ; 

64 

65 

66 笛卡尔集 

67 

68 笛卡尔集会在下面条件下产生

69 省略连接条件 

70 连接条件无效 

71 所有表中的所有行互相连接 

72 为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件。 

73 在实际运行环境下,应避免使用全笛卡 

74 

75 

76 叉集 

77 

78 

79 使用CROSS JOIN 子句使连接的表产生叉集。 

80 叉集和笛卡尔集是相同的。 

81 

82 

83 SELECT last_name, department_name 

84 FROM employees 

85 CROSS JOIN departments ; 

86 

87 

88 自然连接 

89 

90 NATURAL JOIN 子句,会以两个表中具有相同名字的列为条件创建等值连接。 

91 在表中查询满足等值条件的数据。 

92 如果只是列名相同而数据类型不同,则会产生错误。 

93 

94 

95 SELECT department_id, department_name, 

96 location_id, city 

97 FROM departments 

98 NATURAL JOIN locations ; 

99 

100 

101 使用 USING 子句创建连接 

102 

103 NATURAL JOIN 子句创建等值连接时,可以使用 USING 子句指定等值连接中需要用到的列。 

104 使用 USING 可以在有多个列满足条件时进行选择。 

105 不要给选中的列中加上表名前缀或别名。 

106 NATURAL JOIN 和 USING 子句经常同时使用。 

107 

108 SELECT e.employee_id, e.last_name, d.location_id 

109 FROM employees e JOIN departments d 

110 USING (department_id) ; 

111 

112 

113 使用ON 子句创建连接 

114 

115 自然连接中是以具有相同名字的列为连接条件的。 

116 可以使用 ON 子句指定额外的连接条件。 

117 这个连接条件是与其它条件分开的。 

118 ON 子句使语句具有更高的易读性。 

119 

120 

121 SELECT e.employee_id, e.last_name, e.department_id, 

122 d.department_id, d.location_id 

123 FROM employees e JOIN departments d 

124 ON (e.department_id = d.department_id); 

125 

126 

127 使用 ON 子句创建多表连接 

128 

129 

130 SELECT employee_id, city, department_name 

131 FROM employees e JOIN departments d 

132 ON d.department_id = e.department_id 

133 JOIN locations l 

134 ON d.location_id = l.location_id; 

你可能感兴趣的:(oracle连接)