sql常用联合查询的 join on 、 left join(左连接) 、 right join (右连接)、inner join (等值连接)以及常用的集合运算有:union、unionall、minus、intersect的效果和总结。

若有人问我用select * from a,b where a.id=b.id;这种基础的语法就能完成我想要的结果,为什么用join等语法呢,答案是:这样做,极大的提高的查询效率。

首先接着用上一篇的book表和pbook表:

首先把join on和inner join 放在一起:

select  * from   book a    join  ( select id,name,price from   pbook) b on   a.id=b.id;
select * from book a inner join ( select id,name,price from pbook) b on a.id=b.id;

相比较这结果一模一样,只返回两个表中联结字段id相等的行 ,所以想  可以理解为  join on  与inner join on 相同

接着我们看左、右连接比较:

select  * from   book a    left join  ( select id,name,price from   pbook) b on   a.id=b.id;
select * from book a right join ( select id,name,price from pbook) b on a.id=b.id;

明显能看出,左连接以左表为主,左表全部显示,右表只显示关联的,其余为空,总行数是左表的行。右连接是以右表为主,显示右边所有行,左表关联的行显示,其余为空

补充说明以及应用推广:

假设 三个或者4个表作为连接,分组 查询a表的某个字段,b表的某个字段,c表的某个字段,且根据一定的条件作为约束

select A.f_cjdwBH AS f_cjdwBH,
A.F_CJDWMC AS F_CJDWMC,
SUM(F_YCLYCZ_JZ) F_ZRCL,
SUM(B.F_YCZ) F_YCZ
from XY_CLYC_DJZRCLYC A
left JOIN XY_CLYC_QKZRCLYC B
ON A.F_QKMC = B.F_QKMC
AND A.F_NY = B.F_NY
left Join XY_CLYC_DWYCZRCL c
on a.f_qkbh=c.F_MCBH
and a.f_ny=c.f_qj left join XY_XYZD_QKXYCJDW d
on a.f_qkmc=d.f_qkmc
and d.f_nd= '' WHERE A.F_QKMC='无人区'
AND A.F_YCKSSJ = ''
AND A.F_YCJSSJ = ''
AND A.F_NY >= ''
AND A.F_NY <= '' GROUP BY A.F_CJDWBH, A.F_CJDWMC

由此推广应用。 重点说明:join on 的on后面是可以跟and条件,但是在多表查询的时候,把筛选条件 最好写在最后的where 条件下面,不能跟在某一个on 中。on只应用于2个表的关系条件

下面 常用的集合运算的比较:

首先我们比较一下union 和union all 结果比较

select   * from  book      union  select id,name,price from   pbook;
select * from book union all select id,name,price from pbook;

这里能够看出:union 和union all 把相同列合并了,union对合并的数据去掉了重复行并且进行了排序。而union all 则是把2个表合起来,没有排序或者去重。

提示:1.表面上看union对数据进行排序,但是不能保证排序一定正确。(在oralce10之前是排序去重,之后是Hash UNIQUE运算去重,而它只比较散列值不进行排序)

           2.当数据量很大时,速率上来讲,union all 会比union 快很多。

提示补充:union 和union all 不会对比你的2个表的字段是否相等进行匹配,只对比要合并的2个表 是否有相等数量的字段列,且字段列类型相等,合并之后以左表字段为主。

比如 a,b表: a表3列数据,id,username,age ;b表数据如下:id,guojia,rq  最后的结果都是以a表为主显示的列。

  合并之后:

下一组比较:minus,intersect

select   * from  book      minus select id,name,price from   pbook;
select * from book intersect (select id,name,price from pbook)

很明显:minus是把2个表冲突数据提出来,而intersect是把2个表的相同数据提出来

本文为博主原创,如有转载,请标记文章出处:http://www.cnblogs.com/mobeisanghai/p/7544544.html
 作者:漠北桑海

oracle中 常用的 join on 相关和 集合运算的总结的更多相关文章

  1. Oracle中 (+)与left join 的用法区别

    Oracle中 (+)与left join 的用法区别 原创 2017年01月11日 13:33:42 6648 select * from a,b where a.id=b.id(+); (+)写在 ...

  2. Oracle中常用的系统函数

    本文主要来梳理下Oracle中的常用的系统函数,掌握这些函数的使用,对于我们编写SQL语句或PL/SQL代码时很有帮助,所以这也是必须掌握的知识点. 本文主要包括以下函数介绍:1.字符串函数2. 数值 ...

  3. Oracle 中常用数据字典大总结

    原文出处:小宝马的爸爸 - 梦想的家园 前面呢,也断断续续的介绍了一些诸如 Sql*Plus 等等关于 Oracle 的基本的内容, 对于 Oracle 这样的大型数据库呢,自身的运行和维护也是个不得 ...

  4. oracle中常用的两个伪列

    伪列 伪列就行oracle中的一个列表,但世界上它并未存储在表中,伪列可以被查询但是不能被插入或者更改. rowID 该伪列返回该行地址,可以使用rowID值来定位表中的一行.通常rowID值可以标识 ...

  5. oracle中常用函数

    1.oracle中 trunc 是截取的函数,用在日期类型上,就是截取到的日或时间. select trunc(sysdate) from dual   默认是截取系统日期到日,得到 2012-12- ...

  6. Oracle组函数、多表查询、集合运算、数据库对象(序列、视图、约束、索引、同义词)等

    count组函数:(过滤掉空的字段) select count(address),count(*) from b_user max() avg() min(),sum() select sum(age ...

  7. Oracle(2)之多表查询&子查询&集合运算

    多表查询 笛卡尔积 同时查询多张表时,每张表的每条数据都要和其它表的每条数据做组合.如下栗子,我们发现产生的总记录数是 56 条,还发现 emp 表是 14 条,dept 表是 4 条,56 条正是 ...

  8. Oracle 多表查询、查询运算符和集合运算

    一.多表查询 1.内连接 一般使用INNER JOIN关键字指定内连接,INNER可以省略,默认表示内连接.查询结果中只包含两表的公共字段值相等的行,列可以是两表中的任意列 2.外连接 包括左外连接. ...

  9. 【Oracle】Oracle中常用的系统函数

    Oracle SQL 提供了用于执行特定操作的专用函数.这些函数大大增强了 SQL 语言的功能.函数可以接受零个或者多个输入参数,并返回一个输出结果.在Oracle还可以自定义函数,关于更多信息可以查 ...

随机推荐

  1. shell脚本学习(一):shell脚本开发的基本规范和习惯

    1.脚本第一行指定脚本解释器 #!/bin/bash 或 #!/bin/sh 2.脚本开头增加作者.脚本作用描述等信息 1 #!/bin/bash 2 #Author: iskylite 3 #Blo ...

  2. python基础6 迭代器 生成器

    可迭代的:内部含有__iter__方法的数据类型叫可迭代的,也叫迭代对象实现了迭代协议的对象 运用dir()方法来测试一个数据类型是不是可迭代的的. 迭代器协议是指:对象需要提供next方法,它要么返 ...

  3. JQ编写楼层效果

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  4. Leetcode题解(九)

    28.Implement strStr()-------KMP算法(*) 题目 这道题目其实就是实现KMP算法,并且该算法也是比较经典的算法,需要很好的掌握: 贴上几个介绍字符串匹配的算法说明链接 h ...

  5. Cable master

    Problem Description Inhabitants of the Wonderland have decided to hold a regional programming contes ...

  6. replace to

    要注意的是:插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据. MySQL replace into 有三种形式: 1. repla ...

  7. HTML5与搜索引擎优化[转载]

    原文:http://lusongsong.com/reed/398.html 我觉得HTML5的兴起完全是因为iPhone和iPad,自从Adobe停止开发flash.Android4.0不支持fla ...

  8. Problem E: 可变长数组

    Problem E: 可变长数组 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 472  Solved: 368[Submit][Status][Web ...

  9. java中表示二进制、八进制、十进制、十六进制

    1.进制 进制是一种记数方式 ,可以用有限的数字符号代表所有的数值.由特定的数值组成. 2.进制的表现形式 二进制: 由0和1两个数字组成. 八进制: 由0-7数字组成,为了区分与其他进制的数字区别, ...

  10. pie.htc 在IE下不起作用~~~

    一直用的IE11 然后选择其中的兼容模式来测试IE 7~10的情况. 最近由于客户要求 圆角阴影兼容IE,只能选择PIE.HTC的方案. 但是反复测试发现不起作用. 官方文档的几种说明: 1. pie ...