print?
1 两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行 ,这种连接称为左(右) 外联接。
2 两个表在连接过程中除了返回满足连接条件的行以外还返回两个表中不满足条件的行 ,这种连接称为满 外联接。
3
4
5
6 内连接
7
8 select empno,ename,sal,dname,loc from emp,dept
9
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;