oracle 数据库sql 查询语句。通过一个sql语句对多个表分别进行查询。

各个表根据自己相应的查询条件对自己表进行查询,查询完之后将查询结果链接起来,如何写sql语句

用union,举例有S1表(a,b,c,d)和S2表(a,c,d,e)和S3表(f,g),里头的字段不同,但在逻辑上有关系
(如有
s1.b=s2.e
s1.a=s3.f
s1.b=s3.g)
示例如下:
------------------------------------------------------------------------------
select S1.a as x,S1.b as y,S1.c as z from S1
union
select S2.a as x,S2.e as y,S2.c as z from S2
union
select S3.f as x,S3.g as y,'' as z from S3
------------------------------------------------------------------------------
最终结果会是三张表的和,如果S1有10条记录,S2有3条记录,S3有4条记录,则执行本SQL后会得到17条记录,其中来自S3表的数据,第三列一定为空的。追问

我的表其实是s1.a = s2.a s1.a = s3.g,查询出来之后我希望把他们连接起来,做链接,就是现实10条记录,还有如何为每张表的查询加条件
查出来的结果希望是:s1.a s1.b s1.c s1.d s2.a s2.c s2.d s2.e s3.f s3.g

追答

我晕,那连接查询就可以了,在oracle里,只需要使用“(+)”就可以达到你说的效果。

追问

但是不加查询条件,直接取全表的记录的话确实实现了,但是加查询条件了就不行了,比如经过条件筛选之后s1为4条,s2为1条,连接的结果就只剩一条了

追答

试试这个
select S1.*,S2.*,S3.* from S1,S2,S3 where S1.a= S2.a(+) and S1.a=S3.g(+)

================================================================
补充,我去百度找了篇博客介绍连接的,很详细,你可以参考一下。
http://blog.csdn.net/cuiyaonan2000/article/details/8479664

追问

我用的就是这个sql,不过后面还要加各个表的查询条件,加进去就有问题了

追答

因为都是连接的S1表,所以经过条件筛选后如果S1有4条,则肯定查询出4条记录,即使S2只有1条记录,也仅仅是让结果中的3条记录后边的字段值为null而已啊。

===============================================================
我明白你的意思了,把连接写成完整版就可以了,例如
select S1.*,S2.* from S1 left join S2 on S1.a= S2.a and S2.a > 0

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-04
union 、 union all
相似回答