【SQL】多表查询
多表查询,即查询可以从两个或多个表中获取数据。在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】多表查询的更多相关文章
- sql多表查询之一:Where 和 On的秘密
原文 sql多表查询之一:Where 和 On的秘密 对于还在SQL初级阶段的朋友来说,sql多表查询问题是一个比较有趣也容易出错的技术.什么时候会用到sql多表查询呢?是在两张或两张以上表单中通过某 ...
- oracle SQL多表查询
SQL多表查询 1.集合理论 1.1 什么是集合 具有某种特定性质的事物的总体. 集合的特性:无序性.互异性.确定性. 一个集合可以小到从一个表中取出一行中的一列. 1 ro ...
- SQL联表查询
数据库中最最常用的语法----select.简单的select语法很直白: select column from table where expression: 从((from)存储数据的地方(tab ...
- Sql Server的艺术(四) SQL多表查询
表的基本连接 SQL的一个重要特性就是能通过JOIN关键词,从多个交叉表中查询.分析数据. 连接表的目的 在关系数据库中,数据表设计的一个重要原则就是要避免冗余性. 减少了冗余信息,节省了数据库存储空 ...
- sql多表查询(单表查询略过)
表library: 表borrow: 表reader: 1.等值连接:(常用) 原理:将多张表组合成一个逻辑大表,即字段相加记录相乘(笛卡尔积). 语法:select * from 表A,表B whe ...
- SQL多表查询总结
前言 连接查询包括合并.内连接.外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要.只有真正了解它们之间的区别,才能正确使用. 一.Union UNION 操作符用于合并两个或多个 SELE ...
- sql 多表查询结果验证
1.笛卡尔积 定义: 设A,B为集合,用A中元素为第一元素,B中元素为第二元素构成的有序对,所有这样的有序对组成的集合 ,叫做A与B的笛卡尔积,记作AxB. 上面有一个很关键的词为“有序”,因此,我们 ...
- 【数据库】sql连表查询
SQL总结 连表查询 连接查询包括合并.内连接.外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要. 只有真正了解它们之间的区别,才能正确使用. 1.Union UNION 操作符用于合并两 ...
- Server Sql 多表查询、子查询和分页
一.多表查询:根据特定的连接条件从不同的表中获取所需的数据 多表查询语法: SELECT table1.column, table2.column FROM table1, table2 WHERE ...
- sql 两表查询后 更新某表中部分字段
这是上一个sql更新某表字段的一个延伸,在更新表数据时,实际上会有多表数据查询场景,查询后,只需要更新某一个表中的数据,以下提供两个方法, 第一种使用update 两表查询 update api_ma ...
随机推荐
- 使用 Cordova 打包 app
1.安装nodejs 2.安装 cordova npm install -g cordova 3.Cordova 打包成安卓APK需要用到ANT打包工具,首先配置好java环境: 下载安装Java J ...
- springcloud(六):给Eureka Server服务器端添加用户认证
1. 还未完成 ,客户端有点问题,后期完善 2.
- 《奋斗吧!菜鸟》 第八次作业:Alpha冲刺
项目 内容 这个作业属于哪个课程 任课教师链接 作业要求 https://www.cnblogs.com/nwnu-daizh/p/11012922.html 团队名称 奋斗吧!菜鸟 作业学习目标 A ...
- Django——6 模型基础ORM 数据库连接配置 模型的创建与映射 数据的增删改查
Django Django的ORM简介 数据库连接配置 模型的创建与映射 数据库的增删改查 增数据 查数据及补充 改数据 删数据 Django的ORM系统分析 ORM概念:对象关系映射(Objec ...
- Restful传递数组参数的两种方式
第一种,直接传递数组 js直接传递数组 var data = ["123","456"];that.loadDictionarys(data).subscrib ...
- 巧克力棒&&新年的巧克力棒
巧克力棒 题目描述 LYK 找到了一根巧克力棒,但是这根巧克力棒太长了,LYK 无法一口吞进去.具体地,这根巧克力棒长为 n,它想将这根巧克力棒折成 n 段长为 1 的巧克力棒,然后慢慢享用.它打算每 ...
- springCloud学习-断路器(Hystrix)
1.问题分析 在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用.为了保证其高 ...
- 64位CentOS6.5下Eclipse用Java连接mysql
1.到官网上下载jdbc驱动,我下载的是mysql-connector-java-5.0.8.tar.gz 2.解压下载到的文件 tar -zxvf mysql-connector-java-5.0. ...
- Windows超级卸载工具Total Uninstaller,能完全卸载.NET Framework
https://github.com/tsasioglu/Total-Uninstaller
- 前端控制器是整个MVC框架中最为核心的一块,它主要用来拦截符合要求的外部请求,并把请求分发到不同的控制器去处理,根据控制器处理后的结果,生成相应的响应发送到客户端。前端控制器既可以使用Filter实现(Struts2采用这种方式),也可以使用Servlet来实现(spring MVC框架)。
本文转自http://www.cnblogs.com/davidwang456/p/4090058.html 感谢作者 前端控制器是整个MVC框架中最为核心的一块,它主要用来拦截符合要求的外部请求,并 ...