多表查询,即查询可以从两个或多个表中获取数据。在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. 4.bool组合查询

    主要知识: 学习bool组合查询 bool嵌套     1.搜索发帖日期为2017-01-01,或者帖子ID为XHDK-A-1293-#fJ3的帖子,同时要求帖子的发帖日期绝对不为2017-01-02 ...

  2. NLTK学习笔记(七):文本信息提取

    目录 实体识别:分块技术 分块语法的构建 树状图 IOB标记 开发和评估分块器 命名实体识别和信息提取 如何构建一个系统,用于从非结构化的文本中提取结构化的信息和数据?哪些方法使用这类行为?哪些语料库 ...

  3. 费用最少的一款赛门铁克SSL证书

    Symantec Secure Site SSL证书,验证域名所有权和企业信息,属于Symantec Class 3企业(OV)验证 级SSL证书,为40位/56位/128/256位自适应加密,目前连 ...

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

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

  5. 无管理员帐号的WIN7,如果使用自己的JDK版本?

    因为公司的电脑只有普通权限, 而且JDK版本低了. 那我只好用BAT脚本来导入自己的环境啦,毕竟每次在CMD窗口输入太繁琐. set JAVA_HOME=D:\JDK8 set CLASSPATH=D ...

  6. [bzoj2743][HEOI2012]采花_树状数组

    采花 bzoj-2743 HEOI-2012 题目大意:给定n朵花,每朵花有一个种类,m次询问:一段区间中至少出现两朵花的种类的个数. 注释:$1\le n,m\le10^6$. 想法:这个题超级像H ...

  7. JAVA大数据项目+整理的Mysql数据库32条军规

    http://www.jianshu.com/users/a9b2d43bb94e/latest_articles

  8. php集成环境安装与測试

    一. 软件下载 1. AppServ 2.5.10包括的软件有Apache.Apache Monitor.PHP.MySQL.PHP-Nuke.phpMyAdmin. 2. 下载地址: http:// ...

  9. 【Nginx】模块化设计

    高度模块化的设计是Nginx的架构基础.全部模块都是以ngx_module_t结构体表示,该结构体内部定义了7个回调方法.它们负责模块的初始化和退出.commands成员是一个包括有ngx_comma ...

  10. java wait 与 notify sleep

    来自:http://blog.csdn.net/zyplus/article/details/6672775 有适当的代码修改. 在JAVA中,是没有类似于PV操作.进程互斥等相关的方法的.JAVA的 ...