oracle连接中的那些事~
2013-04-07 18:32
120 查看
两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行 ,这种连接称为左(右) 外联接。
两个表在连接过程中除了返回满足连接条件的行以外还返回两个表中不满足条件的行 ,这种连接称为满 外联接。
内连接
select empno,ename,sal,dname,loc from emp,dept
where emp.deptno=dept.deptno;
外连接
SELECT emp.column, dept.column --右外连接
FROM emp, dept
WHERE emp.column(+) = dept.column;
SELECT emp.column, dept.column --左外连接
FROM emp, dept
WHERE emp.column = dept.column(+);
外连接的符号是(+),(+)要放在字段名后。(+)对面的那个表,会全部显示。
左外连接时,加号在等号的右边
select d.dname,e.ename,e.deptno
from 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_name
FROM employees e
FULL OUTER JOIN departments d
ON (e.department_id = d.department_id) ;
自连接:
把表自身的镜像当成另外一个表
SELECT worker.last_name || ' works for '
|| manager.last_name
FROM employees worker, employees manager
WHERE worker.manager_id = manager.employee_id ;
笛卡尔集
笛卡尔集会在下面条件下产生:
省略连接条件
连接条件无效
所有表中的所有行互相连接
为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件。
在实际运行环境下,应避免使用全笛卡
叉集
使用CROSS JOIN 子句使连接的表产生叉集。
叉集和笛卡尔集是相同的。
SELECT last_name, department_name
FROM employees
CROSS JOIN departments ;
自然连接
NATURAL JOIN 子句,会以两个表中具有相同名字的列为条件创建等值连接。
在表中查询满足等值条件的数据。
如果只是列名相同而数据类型不同,则会产生错误。
SELECT department_id, department_name,
location_id, city
FROM departments
NATURAL JOIN locations ;
使用 USING 子句创建连接
在NATURAL JOIN 子句创建等值连接时,可以使用 USING 子句指定等值连接中需要用到的列。
使用 USING 可以在有多个列满足条件时进行选择。
不要给选中的列中加上表名前缀或别名。
NATURAL JOIN 和 USING 子句经常同时使用。
SELECT e.employee_id, e.last_name, d.location_id
FROM employees e JOIN departments d
USING (department_id) ;
使用ON 子句创建连接
自然连接中是以具有相同名字的列为连接条件的。
可以使用 ON 子句指定额外的连接条件。
这个连接条件是与其它条件分开的。
ON 子句使语句具有更高的易读性。
SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM employees e JOIN departments d
ON (e.department_id = d.department_id);
使用 ON 子句创建多表连接
SELECT employee_id, city, department_name
FROM employees e JOIN departments d
ON d.department_id = e.department_id
JOIN locations l
ON d.location_id = l.location_id;
相关文章推荐
- QTP的那些事--连接oracle的方法
- QTP的那些事--连接oracle的简单方法(附源码)
- .NET 连接oracle
- java连接各种数据库(mysql,sql server,oracle,db2)
- 动软代码生成器连接Oracle 11g
- pl/sql developer连接oracle数据注意事项
- Oracle 多表连接
- Win7 64位 的VS2010 ASP.NET连接 Oracle 11g
- Java 连接 Oracle 单例模式
- oracle 10G 表空间移动 , TNS 监听程序所有适用例程都无法建立新连接,service_died 12537, c3p0连接池参数
- win7,win8 下PLSQL developer 连接不上64位Oracle 的解决方法 不安装orcal 使用PLSQL的组件 使用它可以不安装oracle连接数据库
- EntityFrameWork连接Oracle及错误总结
- 都是防火墙惹的祸--Oracle连接总是断
- Java使用JDBC连接Oracle_MSSQL实例
- Oracle导dmp出现文件ORA-12154: TNS: 无法解析指定的连接标识符问题的解决方案
- 已安装oracle客户端,PL/SQL连接失败
- PL/SQL连接不上ORACLE
- 不安装oracle客户端如何使用plsql连接数据库
- oracle 连接新创建的实例
- SHOUG线上活动 Maclean Liu分享《学习甲骨文数据库的自由之翼-与Oracle的世界相连接》