最常用的几种连接的使用:内连接,外连接,左(外,内)连接,右(外,内)连接,全(不分左右)连接,交叉连接(笛卡尔集),自连接(同一个表的权级结构)。连接一般用于多表之间复杂的查询。
内连接,即相等连接,等值连接,如右两张表 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里用(+)表示被补充的一方。
右连接指的是右边是主表,左连接指的是左边是主表。
01右外连接。例子:
select empno,ename,sal,emp.deptno,dept.deptno from emp,dept where emp.deptno(+) =dept.deptno;
02左外连接。例子:
select empno,ename,sal,emp.deptno,dept.deptno from emp,dept where dept.no=emp.deptno(+)
两个查询显示的查询结果是一样的,记忆方法:(+)出现查询条件的左边即右连接(右边为主),出现在右边即左连接(左边为主)。也就是说左右是指主表的左右,而不是(+)代表的从表或者称作被补充的那个表的左右。
因为左右是相对的,右联结A、B表的结果和左联结B、A的结果是一样的,也就是说:
Select A.name B.name From A Left Join B On A.id=B.id
和Select A.name B.name From B Right Join A on B.id=A.id执行后的结果是一样的。
03全外关联: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的员工记录和没有任何员工的部门记录。 (只要是查询中提到了的表的字段都会取出,无论是否符合联结条件,因此最好记忆)。