搜索
您的当前位置:首页正文

union和union all区别

来源:榕意旅游网
(转)oracle中left join和right join的区别 2009-09-28 15:33

通俗的讲:

A left join B 的连接的记录数与A表的记录数同 A right join B 的连接的记录数与B表的记录数同 A left join B 等价B right join A table A:

Field_K, Field_A 1 a 3 b 4 c

table B: Field_K, Field_B 1 x 2 y 4 z

select a.Field_K, a.Field_A, b.Field_K, b.Field_B

from a left join b on a.Field_K=b.Field_K

Field_K Field_A Field_K Field_B

---------- ---------- ---------- ---------- 1 a 1 x

3 b NULL NULL

4 c 4 z

select a.Field_K, a.Field_A, b.Field_K, b.Field_B

from a right join b on a.Field_K=b.Field_K

Field_K Field_A Field_K Field_B

---------- ---------- ---------- ---------- 1 a 1 x

NULL NULL 2 y

4 c 4 z --

举个例子:

假设a表和b表的数据是这样的。 a b id name id stock 1 a 1 15

2 b 2 50 3 c

select * from a inner join b on a.id=b.id

这个语法是连接查询中的内连接,它产生的结果是 两个表相匹配的记录出现在结果列表中。 根据上面的表,出现的结果是这样的 a.id name b.id stock 1 a 1 15 2 b 2 50 ----------------------------

select * from a,b where a.id=b.id 这个语法是内连接的另外一种写法,其执行结果与inner join 一样

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

select * from a left/right join b on a.id=b.id

这个是外连接语法中的左外连接或右外连接 如果是左外连接的话,它将显示a表的所有记录,

select a.*,b.* from a left join b on a.id=b.id

查询的结果是这样的:

a.id name b.id stock 1 a 1 15 2 b 2 50 3 c null null -------------------------------------------- 如果是右外连接的话,它将显示b表的所有记录,

select a.*,b.* from a right join b on a.id=b.id

查询的结果是这样的:

a.id name b.id stock 1 a 1 15 2 b 2 50 --

select a.*,b.* from a left join b on a.k = b.k

select a.*,b.* from a left outer join b on a.k =b.k

----------上面两种一样left join是left outer join的简写

select a.*,b.* from a left inner join b on a.k = b.k

没有这种写法,错误的语句.

(记录合并)union和union all 的区别 轉 2009-06-05 11:57

在数据库中,union和union all关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。

union在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。

如:

select * from test_union1 union

select * from test_union2

这个SQL在运行时先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。 而union all只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。

从效率上说,union all要比union快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用union all,如下: select * from test_union1 union all

select * from test_union2

使用 union 组合查询的结果集有两个最基本的规则: 1。所有查询中的列数和列的顺序必须相同。 2。数据类型必须兼容

RACLE中2种删除列的方法

alter table qq drop column TIME

alter table qq set unused (\"TIME\") cascade constraints;(注意TIME为字段名,要大写) 第一个命令直接删除一个列,适合应付比较小的表, 第二个命令将一个列标识为unused 然后在系统负载比较轻的时候使用 alter table drop unused columns 删除该列占用的存储空间。 可以使用参数指定一次删除多少行 适合负载比较重,或者表比较大的情况

因篇幅问题不能全部显示,请点此查看更多更全内容

Top