多表查询,即查询可以从两个或多个表中获取数据。在Oracle中,有两种类型的连接格式:ANSI SQL连接格式和Oracle特有的连接格式。Oracle建议采用符合ANSI标准的连接格式。

1、内连接

(1)Oracle中特有的连接语法为:

SELECT table1.column,table2.column

FROM table1,table2

WHERE table1.column1=table2.column2;

如:

SQL> SELECT e.empno,e.ename,e.job,e.hiredate,e.sal,d.dname

2  FROM emp e ,dept d

3  WHERE e.deptno=d.deptno;

EMPNO ENAME      JOB       HIREDATE                   SAL DNAME

---------- ---------- --------- ------------------- ---------- --------------

7782 CLARK      MANAGER   1981-06-09 00:00:00       2450 ACCOUNTING

7839 KING       PRESIDENT 1981-11-17 00:00:00       5000 ACCOUNTING

7934 MILLER     CLERK     1982-01-23 00:00:00       1300 ACCOUNTING

7566 JONES      MANAGER   1981-04-02 00:00:00       2975 RESEARCH

7788 SCOTT      ANALYST   1987-04-19 00:00:00       3000 RESEARCH

7876 ADAMS      CLERK     1987-05-23 00:00:00       1100 RESEARCH

7902 FORD       ANALYST   1981-12-03 00:00:00       3000 RESEARCH

7844 TURNER     SALESMAN  1981-09-08 00:00:00       1500 SALES

7521 WARD       SALESMAN  1981-02-22 00:00:00       1250 SALES

7499 ALLEN      SALESMAN  1981-02-20 00:00:00       1600 SALES

7900 JAMES      CLERK     1981-12-03 00:00:00        950 SALES

7698 BLAKE      MANAGER   1981-05-01 00:00:00       2850 SALES

7654 MARTIN     SALESMAN  1981-09-28 00:00:00       1250 SALES

13 rows selected.

(2)ANSI SQL的标准内连接语法为:

SELECT table1.column,table2.column

FROM table1 INNER JOIN table2

ON table1.column1=table2.column2;

如:

SQL> SELECT e.empno,e.ename,e.job,e.hiredate,e.sal,d.dname

2  FROM emp e INNER JOIN dept d

3  ON e.deptno=d.deptno;

EMPNO ENAME      JOB       HIREDATE                   SAL DNAME

---------- ---------- --------- ------------------- ---------- --------------

7782 CLARK      MANAGER   1981-06-09 00:00:00       2450 ACCOUNTING

7839 KING       PRESIDENT 1981-11-17 00:00:00       5000 ACCOUNTING

7934 MILLER     CLERK     1982-01-23 00:00:00       1300 ACCOUNTING

7566 JONES      MANAGER   1981-04-02 00:00:00       2975 RESEARCH

7788 SCOTT      ANALYST   1987-04-19 00:00:00       3000 RESEARCH

7876 ADAMS      CLERK     1987-05-23 00:00:00       1100 RESEARCH

7902 FORD       ANALYST   1981-12-03 00:00:00       3000 RESEARCH

7844 TURNER     SALESMAN  1981-09-08 00:00:00       1500 SALES

7521 WARD       SALESMAN  1981-02-22 00:00:00       1250 SALES

7499 ALLEN      SALESMAN  1981-02-20 00:00:00       1600 SALES

7900 JAMES      CLERK     1981-12-03 00:00:00        950 SALES

7698 BLAKE      MANAGER   1981-05-01 00:00:00       2850 SALES

7654 MARTIN     SALESMAN  1981-09-28 00:00:00       1250 SALES

13 rows selected.

2、外连接

(1)Oracle中特有的连接语法为:

--右外连接

SELECT table1.column,table2.column

FROM table1, table2

WHERE table1.column1(+)=table2.column2;

--左外连接

SELECT table1.column,table2.column

FROM table1, table2

WHERE table1.column1=table2.column2(+);

注意:

右外连接:当(+)符号在等号左边,将返回table2表中的所有数据。

左外连接:当(+)符号在等号右边,将返回table1表中的所有数据。

等号两边不能同时都加(+)符号

(2)ANSI SQL标准中的连接、右连接和全连接语法为:

SELECT table1.column,table2.column

FROM table1

[LEFT|RIGHT|FULL OUTER JOIN table2

ON (table1.column=table2.column)];

3、交叉连接(笛卡尔积)

如果在进行连接的时候没有指定连接条件,则会产生笛卡尔积,返回的记录数是两个表中记录数的乘积。

4、自然连接

前提要求:两个表中有相同名称、相同数据类型的列。如果两个标的列名相同而数据类型不相同,也不能进行自然连接。自然连接使用NATRUAL JOIN关键字

如:

SQL> SELECT e.empno,e.ename,e.job,e.hiredate,e.sal,d.dname

2  FROM emp e NATURAL JOIN dept d;

EMPNO ENAME      JOB       HIREDATE                   SAL DNAME

---------- ---------- --------- ------------------- ---------- --------------

7782 CLARK      MANAGER   1981-06-09 00:00:00       2450 ACCOUNTING

7839 KING       PRESIDENT 1981-11-17 00:00:00       5000 ACCOUNTING

7934 MILLER     CLERK     1982-01-23 00:00:00       1300 ACCOUNTING

7566 JONES      MANAGER   1981-04-02 00:00:00       2975 RESEARCH

7788 SCOTT      ANALYST   1987-04-19 00:00:00       3000 RESEARCH

7876 ADAMS      CLERK     1987-05-23 00:00:00       1100 RESEARCH

7902 FORD       ANALYST   1981-12-03 00:00:00       3000 RESEARCH

7844 TURNER     SALESMAN  1981-09-08 00:00:00       1500 SALES

7521 WARD       SALESMAN  1981-02-22 00:00:00       1250 SALES

7499 ALLEN      SALESMAN  1981-02-20 00:00:00       1600 SALES

7900 JAMES      CLERK     1981-12-03 00:00:00        950 SALES

7698 BLAKE      MANAGER   1981-05-01 00:00:00       2850 SALES

7654 MARTIN     SALESMAN  1981-09-28 00:00:00       1250 SALES

13 rows selected.

【SQL】多表查询的更多相关文章

  1. sql多表查询之一:Where 和 On的秘密

    原文 sql多表查询之一:Where 和 On的秘密 对于还在SQL初级阶段的朋友来说,sql多表查询问题是一个比较有趣也容易出错的技术.什么时候会用到sql多表查询呢?是在两张或两张以上表单中通过某 ...

  2. oracle SQL多表查询

    SQL多表查询 1.集合理论 1.1 什么是集合 具有某种特定性质的事物的总体. 集合的特性:无序性.互异性.确定性. 一个集合可以小到从一个表中取出一行中的一列.              1 ro ...

  3. SQL联表查询

    数据库中最最常用的语法----select.简单的select语法很直白: select column from table where expression: 从((from)存储数据的地方(tab ...

  4. Sql Server的艺术(四) SQL多表查询

    表的基本连接 SQL的一个重要特性就是能通过JOIN关键词,从多个交叉表中查询.分析数据. 连接表的目的 在关系数据库中,数据表设计的一个重要原则就是要避免冗余性. 减少了冗余信息,节省了数据库存储空 ...

  5. sql多表查询(单表查询略过)

    表library: 表borrow: 表reader: 1.等值连接:(常用) 原理:将多张表组合成一个逻辑大表,即字段相加记录相乘(笛卡尔积). 语法:select * from 表A,表B whe ...

  6. SQL多表查询总结

    前言 连接查询包括合并.内连接.外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要.只有真正了解它们之间的区别,才能正确使用. 一.Union UNION 操作符用于合并两个或多个 SELE ...

  7. sql 多表查询结果验证

    1.笛卡尔积 定义: 设A,B为集合,用A中元素为第一元素,B中元素为第二元素构成的有序对,所有这样的有序对组成的集合 ,叫做A与B的笛卡尔积,记作AxB. 上面有一个很关键的词为“有序”,因此,我们 ...

  8. 【数据库】sql连表查询

    SQL总结 连表查询 连接查询包括合并.内连接.外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要. 只有真正了解它们之间的区别,才能正确使用. 1.Union UNION 操作符用于合并两 ...

  9. Server Sql 多表查询、子查询和分页

    一.多表查询:根据特定的连接条件从不同的表中获取所需的数据 多表查询语法: SELECT table1.column, table2.column FROM table1, table2 WHERE ...

  10. sql 两表查询后 更新某表中部分字段

    这是上一个sql更新某表字段的一个延伸,在更新表数据时,实际上会有多表数据查询场景,查询后,只需要更新某一个表中的数据,以下提供两个方法, 第一种使用update 两表查询 update api_ma ...

随机推荐

  1. Linux之iptables(二、基本认识和组成)

    iptables的基本认识 Netfilter组件 内核空间,集成在linux内核中 扩展各种网络服务的结构化底层框架 内核中选取五个位置放了五个hook(勾子) function(INPUT.OUT ...

  2. Jupyter Notebook 下安装 PHP 内核

    我最近被强烈安利了 Jupyter Notebook 这个交互式笔记本.然后试用了它自带的 Python 内核后,这个应用整体给我的感觉很不错,就去搜索了下它所支持的其它内核 Jupyter Kern ...

  3. elisp 编程 if 特殊表

    elisp中的 if 特殊表与其他语言中的 if 语句逻辑上并无二致,关键在于如何使用. (if (> 4 3) (message "4 is greater than 3" ...

  4. 【转载】Apache shutdown unexpectedly启动错误解决方法

    http://blog.csdn.net/dong123dddd/article/details/21372179 xampp启动时显示的错误为: 9:52:41  [Apache] Attempti ...

  5. 敏捷开发系列学习总结(2)——Bug修改流程

    原则,力求各司其职,简单明了. 1. 测试人员提交bug ⑴ 标题: [ 模块名称 ] 问题描述 ⑵ 内容: 问题重现步骤的描述,最好贴上图片. 因为一图胜万言. ⑶ 指定责任人: 根据bug指定责任 ...

  6. Java8新特性之forEach遍历

    参考文章: https://www.cnblogs.com/billyu/p/6118008.html

  7. springCloud学习-服务消费者(Feign)

    1.简介 Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单.使用Feign,只需要创建一个接口并注解.它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解.Fei ...

  8. SUSE Linux Enterprise Serve 12 试用体验

    SUSE Linux Enterprise Serve 12 试用体验 大家都知道德国出产的奔驰.宝马.等车型以精美.可靠.耐用而著称.而相同出自德国人之手的Suse Linux .即使是被收购也是一 ...

  9. springmvc 处理lsit类型的请求參数映射成实体属性

    <table align="center" cellspacing="10"> <tr> <td> 母码数目:<inp ...

  10. linux 搭建https server (apache)

    一.  安装准备 1.    安装Openssl  要使Apache支持SSL,须要首先安装Openssl支持.这里使用的是openssl-0.9.8k.tar.gz    下载Openssl:htt ...