设为首页 加入收藏

TOP

SQL各种连接查询详解(二)
2014-11-23 19:10:05 来源: 作者: 【 】 浏览:59
Tags:SQL 各种 连接 查询 详解
rders o full outer join customers c on c.id=o.customer_id

minus

select o.id,o.order_number,o.customer_id,c.id,c.name

from orders o inner join customers c on c.id=o.customer_id;

查询结果如下:

五、自然连接(natural inner join):

说真的,这种连接查询没有存在的价值,既然是sql2标准中定义的,就给出个例子看看吧。自然连接无需指定连接列,sql会检查两个表中是否相同名称的列,且假设他们在连接条件中使用,并且在连接条件中仅包含一个连接列。不允许使用on语句,不允许指定显示列,显示列只能用*表示(oracle环境下测 试的)。对于每种连接类型(除了交叉连接外),均可指定natural。下面给出几个例子。

语句14:

select *

from orders o natural inner join customers c;

语句15:

select *

from orders o natural left outer join customers c;

语句16:

select *

from orders o natural right outer join customers c;

语句17:

select *

from orders o natural full outer join customers c;

六、sql查询的基本原理:两种情况介绍。

第一、 单表查询:根据where条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的);然后根据select的选择列选择相应的列进行返回最终结果。

第二、 两表连接查询:对两表求积(笛卡尔积)并用on条件和连接类型进行过滤形成中间表;然后根据where条件过滤中间表的记录,并根据select指定的列返回查询结果。

第三、 多表连接查询:先对第一个和第二个表按照两表连接做查询,然后用查询结果和第三个表做连接查询,以此类推,直到所有的表都连接上为止,最终形成一个中间的结果表,然后根据where条件过滤中间表的记录,并根据select指定的列返回查询结果。

理解sql查询的过程是进行sql优化的理论依据。

七、on后面的条件(on条件)和where条件的区别:

on条件:是过滤两个链接表笛卡尔积形成中间表的约束条件。

where条件:在有on条件的select语句中是过滤中间表的约束条件。在没有on的单表查询中,是限制物理表或者中间查询结果返回记录的约束。在两表或多表连接中是限制连接形成最终中间表的返回结果的约束。

从这里可以看出,将where条件移入on后面是不恰当的。推荐的做法是:

on只进行连接操作,where只过滤中间表的记录。

八、总结

连接查询是sql查询的核心,连接查询的连接类型选择依据实际需求。如果选择不当,非但不能提高查询效率,反而会带来一些逻辑错误或者性能低下。下面总结一下两表连接查询选择方式的依据:

1、 查两表关联列相等的数据用内连接。

2、col_l是col_r的子集时用右外连接。

3、col_r是col_l的子集时用左外连接。

4、col_r和col_l彼此有交集但彼此互不为子集时候用全外。

5、 求差操作的时候用联合查询。

多个表查询的时候,这些不同的连接类型可以写到一块。例如:

select t1.c1,t2.cx,t3.cy

from tab1 t1

inner join tab2 t2 on (t1.c1=t2.c2)

inner join tab3 t3 on (t1.c1=t2.c3)

left outer join tab4 on(t2.c2=t3.c3);

where t1.x >t3.y;

上面这个sql查询是多表连接的一个示范

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇SQL Server万事无忧――备份和恢复 下一篇sql事务(Transaction)用法介绍..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: