`

oracle 连接 join at

阅读更多
--1 等值连接
SELECT * FROM EMP e, dept d where e.deptno = d.deptno;


SELECT * FROM EMP e join DEPT d on e.deptno = d.deptno;


--2 外连接
--Dept 是主表,全部显示,把dept写在前面
SELECT * FROM SCOTT.DEPT D ,EMP E
WHERE D.DEPTNO = E.DEPTNO(+)

-- Dept 是主表,全部显示,把dept写在前面
SELECT D.DEPTNO, COUNT(E.EMPNO)
  FROM DEPT D
  LEFT JOIN EMP E ON D.DEPTNO = E.DEPTNO
 GROUP BY D.DEPTNO
 
 
 --3全连接 ((左右两表都不加限制) )
 SELECT * FROM DEPT D FULL JOIN EMP E ON D.DEPTNO = E.DEPTNO;
 

--4自然连接  NATURAL (自动找到匹配的字段)
SELECT * FROM EMP E NATURAL JOIN  DEPT D


SELECT DEPTNO, COUNT(E.EMPNO)
  FROM DEPT D
  NATURAL LEFT JOIN EMP E   -- 重点
 GROUP BY DEPTNO

SELECT * FROM DEPT D NATURAL FULL JOIN EMP E;

--5 自连接

--6 不等连接

--7笛卡尔集

 

常见的有下面五种连接方式:按照查询计划
嵌套循环连接(nestedloops),
排序合并连接(sort-merge),
群集连接(cluster join),
哈希连接(hash join),
索引连接(index join)


连接类型:
内连接,相等连接
外联结,包括左外连接,右外连接,全外连接
自连接
自然连接(相等连接的一种特列)
不等连接

 

 

 

http://www.kaoshi365.com/oraclerz/show_1180_4101_2.html

 

 首先还是说明一下,为什么要使用连接(join)?原因有两点:

  1)经常有需要访问多个表中字段的情况

  2)用子查询也可以实现上面的功能,但是效率相当低下。使用连接可以大大提高效率。

  连接(Join)的基本结构:

  select ... from table1 t1 join table2 t2 on ti.id = t2.id;

  join前后是两个需要连接的表,on表示的是连接的条件。传统的写法是不使用join关键字,使用where表示条件:

  select ... from table1 t1, table2 t2 where ti.id = t2.id;

  一般是两个表进行连接,三个表的连接语法稍有不同:

  普通写法:select ... from a join b on a.id = b.id

  join c on b.id = c.id;

  传统写法:select ... from a, b, c where a.id = b.id and b.id = c.id;

  1,对等连接

  上面的就是一种对等连接,即默认的join方式。特点是只显示连接的表中存在而且相等的记录。其它的

  记录均不显示。

  传统的写法也是一种对等连接,只显示匹配条件的记录。

  2,左/右连接

  有时需要将进行连接的其中一个表作为基准显示全部的数据,根据连接条件在其它表中可能会出现无法

  匹配的数据,此时就用空值来代替。比如显示员工信息时,有的员工可能还没有分配到某个具体的部门

  (新进员工),其所属部门一项就没有数据,但是员工仍然需要显示,即员工表数据需要全部显示。

  具体语法:

  select ... from table1 t1 left join table2 t2 on ti.id = t2.id; --左连接

  或

  select ... from table1 t1 right join table2 t2 on ti.id = t2.id; --右连接

  左还是右的区别,简单地说左(右)连接就是指join的左(右)边是基准表,全部数据都要显示,根据

  连接条件无法进行连接的记录就用空值代替。

  比如:

  select e.empno, e.ename, d.dname from emp e left join dept d on e.deptno = d.deptno;

  还没有分配到某个具体的部门的员工的e.deptno肯定是没有值的,无法满足“e.deptno = d.deptno”的

  条件,但由于是左连接,左边的员工表的数据必然会显示,这时该员工的部门名称就是空值。

  若是right join ... on,就表示部门表的数据全部显示,员工表中无法连接的数据就是空值代替,意思

  就是说这个部门还没有员工,因为在员工表中没有一条记录的deptno与该部门的deptno相匹配(可能是

  刚刚成立的新部门)

  3,全连接

  简单说就是左右连接的全部表示,根据连接条件在任意一方表中出现无法匹配的情况,不满足条件的部

  分均用空值代替。

  具体语法:

  select ... from table1 t1 full join table2 t2 on ti.id = t2.id;

用2中例子来说,可能有时候需要把整个公司的员工和部门信息做一个总览,可以对员工表和部门表做一

  个全连接:

  select e.empno, e.ename, d.dname from emp e full join dept d on e.deptno = d.deptno;

  就可以知道员工所属的部门以及部门下面的员工,那些新进员工和刚刚成立的新部门也会显示在其中,

  也就是结果中有空值的部分。

  但需要注意的是,全连接的效率比较低,通常不推荐使用。

  PS:

  在Oracle中,对于左/右连接和全连接还有一种特殊的表示方法,使用“(+)”符号,例如:

  select ... from table1 t1, table2 t2 where ti.id = t2.id(+); --左连接

  select ... from table1 t1, table2 t2 where ti.id(+) = t2.id; --右连接

  select ... from table1 t1, table2 t2 where ti.id(+) = t2.id(+); --全连接

  4,自然连接

  这是Oracle的一种特有的连接方式。它自动连接两个表中数据类型和名称相同的字段,然后根据条件自

  动地将他们连接起来。

  具体语法:

  select ... from table1 t1 left natural join table2 t2;

  比如:

  select emp.ename, dept.dname from emp natural join dept;

  这里并没有指定连接的条件,实际上oracle自动的将员工表中的deptno和部门表中的deptno做了连接。

  也就是实际上相当于:

  select emp.ename,dept.dname from emp join dept on emp.deptno = dept.deptno;

  因为这两张表的这两个字段deptno的类型和个名称完全相同。所以使用natural join时被自然的连接在

  一起了。

  PS:

  如果自然连接的两个表仅是字段名称相同,但数据类型不同,那么将会返回一个错误。

  5,自连接

  简单地说就是自己和自己进行连接,连接的条件就是本表的主键。通常认为在数据库中存在父子关系

  时,应该设计成两张表。但如果父子都是同一实体,就可以简化设计成一张表。比如,查看员工及直接

  上级的名字: (上级也是员工,上级的数据也是员工数据,也应该存储在员工表中。)

 

分享到:
评论

相关推荐

    oracle-join用法

    本文将深入探讨Oracle的JOIN用法,包括内连接(INNER JOIN)、外连接(LEFT JOIN, RIGHT JOIN, FULL JOIN)以及自然连接(NATURAL JOIN),并结合实例进行说明。 1. **内连接(INNER JOIN)**: 内连接返回两个表中满足特定...

    Oracle连接工具plsql11x64位

    Oracle连接工具plsql11x64位Oracle连接工具plsql11x64位Oracle连接工具plsql11x64位Oracle连接工具plsql11x64位Oracle连接工具plsql11x64位Oracle连接工具plsql11x64位Oracle连接工具plsql11x64位Oracle连接工具...

    oracle连接需要的驱动

    标题提到的"oracle连接需要的驱动"指的是Oracle JDBC驱动,它允许Java应用程序通过JDBC(Java Database Connectivity)接口与Oracle数据库进行通信。 Oracle JDBC驱动主要有四种类型: 1. ** Thin Driver (jdbc:...

    Oracle连接类Oracle连接类

    Oracle连接类Oracle连接类Oracle连接类Oracle连接类Oracle连接类

    Oracle连接常见问题

    Oracle连接常见问题 Oracle连接常见问题

    oracle 左连接 右连接学习

    Oracle 中的连接(Join)是一种强大的工具,用于将两个或多个表合并成一个结果集。在学习 Oracle 连接时,可能会感到困惑,因为有多种类型的连接,每种类型都有其特点和应用场景。下面我们将详细介绍 Oracle 中的左...

    Oracle连接字符串

    "Oracle 连接字符串多种方法" Oracle 连接字符串是指连接 Oracle 数据库的字符串书写方法,本文总结了多种连接 Oracle 数据库的字符串书写方法。 一、标准连接字符串 标准连接字符串是最基本的连接字符串格式,...

    oracle客户端连接远程服务器

    标题中提到的“Oracle客户端连接远程服务器”,是指使用Oracle数据库客户端软件来建立与远程Oracle数据库服务器的连接。Oracle数据库是一种广泛使用的商业数据库系统,它支持多用户并发访问并保证数据的一致性,适用...

    oracle连接的包

    为了与Oracle数据库进行交互,开发人员通常需要一个连接包,这个包包含了必要的驱动程序和API,使得应用程序能够通过JDBC(Java Database Connectivity)或其他接口与Oracle数据库通信。在Java开发中,这种连接包...

    强制释放Oracle数据连接方案

    ### 强制释放Oracle数据连接方案 在日常的数据库管理工作中,我们经常遇到数据库连接超限的情况,这通常是由于大量的数据库连接未被正确关闭或回收所导致的。本文将详细介绍如何查看并调整Oracle数据库的连接数量...

    oracle 数据库,在C++中用连接池实现高速连接与访问.rar

    本话题将深入探讨如何在C++环境中利用连接池技术实现对Oracle数据库的高速连接与访问。 一、Oracle数据库基础 Oracle数据库提供了一套完整的数据管理解决方案,包括事务处理、数据仓库、网络数据库、安全性等。它的...

    oracle数据库连接工具

    oracle数据库连接工具:toad oracle 11

    C#中连接oracle连接方法

    本篇将详细介绍C#中连接Oracle数据库的方法,包括所需的组件、连接字符串的构建以及使用ADO.NET进行数据操作的基本步骤。 首先,你需要在你的项目中引入Oracle客户端库。Oracle提供了一个名为ODP.NET(Oracle Data ...

    非常好用的oracle连接工具 ob10

    非常好用的oracle连接工具 ob10(免安装已破解),方便导入导出,比较明了,跟pl/sql可以媲美的哦。

    oracle连接db2数据库的步骤

    标题:“Oracle 连接 DB2 数据库的详细步骤” 本文将详细介绍如何在 Oracle 环境中配置和连接到 DB2 数据库,包括获取必要的信息、配置 ODBC 数据源、修改 Oracle 相关配置文件以及验证连接。以下是一步步的详细...

    oracle连接查询SQL性能测试

    3. **连接类型**:不同的连接类型(如INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN)对性能有显著影响。理解每个连接类型的工作原理并根据需求选择合适的连接方式是关键。 4. **子查询与连接的比较**:在某些情况...

    oracle连接配置

    Oracle 连接配置是一种常用的数据库连接方式,它允许用户通过指定的连接字符串连接到 Oracle 数据库中。在本文中,我们将详细介绍 Oracle 连接配置的步骤和注意事项。 连接字符串的组成 Oracle 连接字符串通常由三...

    sap 与 oracle数据库的连接

    SAP与Oracle数据库的连接 SAP系统与Oracle数据库的连接是SAP开发中的一个重要步骤,该连接允许SAP系统访问Oracle数据库中的数据,实现数据交换和共享。在本文中,我们将详细介绍SAP开发中模块连接Oracle数据库的...

Global site tag (gtag.js) - Google Analytics