JOIN
连接组合两个表中的字段记录,包括三种:
INNER JOIN
运算式:连接组合两个表中的字段记录。
LEFT JOIN
运算式:连接组合两个表中的字段记录,并将包含了
LEFT JOIN
左边表中的全部记录。
RIGHT JOIN
运算式:连接组合两个表中的字段记录,并将包含了
RIGHT JOIN
右边表中的全部记录。
INNER JOIN
设定两个表相关联的运算式,以连接组合两个表中的字段记录。
INNER JOIN
语法如下:
FROM
表
1 INNER JOIN
表
2 ON
表
1.
字段
1
比较运算子
表
2.
字段
2
两个表连接的字段,譬如
[
表
1.
字段
1=
表
2.
字段
2]
,必须具有相同的字段类型,但是字段名称不需要相同。
例如,自动编号字段类型可以连接
Long
的字段类型,但是单精整数字段类型不能连接双精整数的字段类型。
比较运算子可为
=
、
<
、
>
、
<=
、
>=
、或
<>
。
JOIN
连接的字段,不可以包含
MEMO
字段类型或
OLE
对象类型,否则会发生错误。
在一个
JOIN
表达式中,可以连结多个
ON
子句:
SELECT fields
FROM
表
1 INNER JOIN
表
2
ON
表
1.
字段
1
比较运算子
表
2.
字段
1 AND
ON
表
1.
字段
2
比较运算子
表
2.
字段
2) OR
ON
表
1.
字段
3
比较运算子
表
2.
字段
3)
JOIN
表达式中,可以为巢状式:
SELECT fields
FROM
表
1 INNER JOIN
(
表
2 INNER JOIN [( ]
表
3
[INNER JOIN [( ]
表
x [INNER JOIN ...)]
ON
表
3.
字段
3
比较运算子
表
x.
字段
x)]
ON
表
2.
字段
2
比较运算子
表
3.
字段
3)
ON
表
1.
字段
1
比较运算子
表
2.
字段
2
在一个
INNER JOIN
中,可以包括巢状式的
LEFT JOIN
或
RIGHT JOIN
,但是在一个
LEFT JOIN
或
RIGHT JOIN
中不能包括巢状式的
INNER JOIN
。
==================================================
看一下一个查询的问题
我有两张表
tab1
字段
aID
bID
tab2
字段
aID
bID
tab1中有记录:
aID bID
as1 19
as2 19
as3 23
as4 45
tab2中有记录:
aID bID
as2 19
as3 19
as4 19
现在需要查找出两张表中bID相等的且bID=19的记录,应该是5条记录
我用的方法是:
方法1:select tab1.aID,tab2.aID from tab1,tab2 where tab1.bID=tab2.bID and tab2.bID=19
方法2:select tab1.aID,tab2.aID from tab1 join tab2 on tab1.bID=tab2.bID where tab1.bID=19
上面两中方法选出的记录都是6条,为什么出这样的问题,应该怎么做呢?
---------------------------------------------------------------
select * form tab1 where bID=19
union all
select * form tab2 where bID=19
---------------------------------------------------------------
create table tab1
(aID char(10),
bID char(10))
go
insert into tab1(aid,bid) values('as1','19')
insert tab1 values('as2','19')
insert tab1 values('as3','38')
insert tab1 values('as4','45')
go
create table tab2
(aID char(10),
bID char(10))
go
go
insert tab2 values('as2','19')
insert tab2 values('as3','19')
insert tab2 values('as4','19')
go
select * from tab1
select * from tab1 where tab1.bid='19'union all select * from tab2 where tab2.bid='19'
斑竹加的话:
1、join 产生的是笛卡尔积。
2、union 会排除重复的记录
3、union all 不会排除重复的记录
union子句
union操作符将两个查询结果合并为一个结果集。为连接查询合并两个表时:列的数日和顺序在查中必须一致;数据类型兼容
语法:
select
语句
union
[
all
]
select
语句
注意:
1
.union运算从最终结果集中删除重复记录,如想不删除重复记录使用all关键字
2
.第一个select语句中不能用order by或compute子句,只能是最后一个select语名后用
例:查询计算机系的学生式年龄不大于19岁的学习,按年龄倒排序
select
*
from
department
where
dept
=
'
computer
'
;
union
;
select
*
from
student
where
age
<=
19
order
by
age
desc
posted on 2007-03-16 17:04
有猫相伴的日子 阅读(1164)
评论(0) 编辑 收藏 所属分类:
pl/sql