首页 新闻 会员 周边 捐助

Join和非Join的区别

0
悬赏园豆:100 [已解决问题] 解决于 2010-12-06 10:06

 

 

 

请各位谈谈二者的本质区别
说明
Northwind数据库 Orders,Customers,Employees三张表
第一段非Join的查询

1 SELECT
2 O.OrderID 订单编号,
3 O.OrderDate 订单日期,
4 (E.FirstName+E.LastName) as 员工姓名,
5 C.ContactName as 客户姓名
6  FROM
7 Orders as O,
8 Employees as E,
9 Customers as C
10  WHERE
11 O.EmployeeID = E.EmployeeID
12 AND O.CustomerID = C.CustomerID
13 AND O.OrderDate
14 BETWEEN '1996-07-01' and '1996-07-15'
15  GO
16
17
18  

 

第二段是Join的用法

1 SELECT
2 O.OrderID 订单编号,
3 O.OrderDate 订单日期,
4 (E.FirstName+E.LastName) as 员工姓名,
5 C.ContactName as 客户姓名
6 FROM
7 Orders O JOIN Employees E
8 ON
9 O.EmployeeID = E.EmployeeID
10 JOIN
11 Customers C
12 ON
13 O.CustomerID = C.CustomerID
14 WHERE
15 O.OrderDate BETWEEN '1996-07-01' and '1996-07-15'

 

显然,两种查询的结果是一致的。它们之间的本质区别在哪呢。哪个更好

YZGJTSJT的主页 YZGJTSJT | 初学一级 | 园豆:100
提问于:2010-12-05 17:27
< >
分享
最佳答案
0

第一种耗的内存大很多,性能也更低:因为在from 阶段:会生成一张中间临时表供 where 条件进行筛选;第一种情况,是四个表的笛卡尔集;第二种情况是四个表的笛卡尔集并使用 ON 条件进行过滤后的临时表供 where 条件进行筛选。第二种情况一般情况下要比第一种情况少很多行记录,占更少内存,性能更高。

收获园豆:60
HUHU慈悲 | 大侠五级 |园豆:9973 | 2010-12-05 19:18
sql sever中应该是一样的吧,大侠?
沉默的糕点 | 园豆:1786 (小虾三级) | 2010-12-05 23:07
嗯, 指的是SQL Server
HUHU慈悲 | 园豆:9973 (大侠五级) | 2010-12-06 09:01
其他回答(3)
0

我只能告诉你   Join 更好!!

 

具体看看这个 http://hi.baidu.com/qianko/blog/item/e9fd15ca2449258fc817680a.html

收获园豆:20
蓝天阔白云空 | 园豆:145 (初学一级) | 2010-12-05 17:39
0

他两个的功能是一样的,但是join是ANSI(一个国际标准制定组织)在ANSI SQL-92标准中制定的标准,他被各大数据库支持,所以你的join语句可以在SQL SERVER ,MYSQL,Oracle等上都能运行,但是非join的只有微软的数据库支持的比较好。说的通俗点就是一个是标准用法,一个是微软的产品的用法。即兼容性问题。从这可以看出来join的方式好

收获园豆:20
时间都去哪了 | 园豆:51 (初学一级) | 2010-12-05 17:58
0

波形图你还有源码吗?

Mr_LiangJianan | 园豆:200 (初学一级) | 2018-06-22 15:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册