oracle连接中的那些事~
两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行 ,这种连接称为左(右) 外联接。两个表在连接过程中除了返回满足连接条件的行以外还返回两个表中不满足条件的行 ,这种连接称为满 外联接。内连接select empno,ename,sal,dname,loc from emp,dept where emp.deptno=dept.deptno; 外连接SELECT emp.column, dept.column --右外连接 FROM emp, deptWHERE emp.column(+) = dept.column; SELECT emp.column, dept.column --左外连接 FROM emp, deptWHERE emp.column = dept.column(+); 外连接的符号是(+),(+)要放在字段名后。(+)对面的那个表,会全部显示。 左外连接时,加号在等号的右边 select d.dname,e.ename,e.deptnofrom dept d,emp e where d.deptno = e.deptno(+) order by d.deptno; 右外连接select empno, ename, job, sal, dept.deptno, dname, loc 2 from emp, dept 3 where emp.deptno(+) = dept.deptno; 满外联接SELECT e.last_name, e.department_id, d.department_nameFROM employees eFULL OUTER JOIN departments dON (e.department_id = d.department_id) ;自连接:把表自身的镜像当成另外一个表SELECT worker.last_name || ' works for ' || manager.last_nameFROM employees worker, employees managerWHERE worker.manager_id = manager.employee_id ;笛卡尔集笛卡尔集会在下面条件下产生:省略连接条件连接条件无效所有表中的所有行互相连接为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件。在实际运行环境下,应避免使用全笛卡叉集使用CROSS JOIN 子句使连接的表产生叉集。叉集和笛卡尔集是相同的。 SELECT last_name, department_nameFROM employeesCROSS JOIN departments ;自然连接NATURAL JOIN 子句,会以两个表中具有相同名字的列为条件创建等值连接。在表中查询满足等值条件的数据。如果只是列名相同而数据类型不同,则会产生错误。SELECT department_id, department_name, location_id, cityFROM departmentsNATURAL JOIN locations ;使用 USING 子句创建连接在NATURAL JOIN 子句创建等值连接时,可以使用 USING 子句指定等值连接中需要用到的列。使用 USING 可以在有多个列满足条件时进行选择。不要给选中的列中加上表名前缀或别名。NATURAL JOIN 和 USING 子句经常同时使用。SELECT e.employee_id, e.last_name, d.location_idFROM employees e JOIN departments dUSING (department_id) ;使用ON 子句创建连接自然连接中是以具有相同名字的列为连接条件的。可以使用 ON 子句指定额外的连接条件。这个连接条件是与其它条件分开的。ON 子句使语句具有更高的易读性。SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_idFROM employees e JOIN departments dON (e.department_id = d.department_id);使用 ON 子句创建多表连接SELECT employee_id, city, department_nameFROM employees e JOIN departments dON d.department_id = e.department_id JOIN locations lON d.location_id = l.location_id;