请各位谈谈二者的本质区别
说明
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'
显然,两种查询的结果是一致的。它们之间的本质区别在哪呢。哪个更好
第一种耗的内存大很多,性能也更低:因为在from 阶段:会生成一张中间临时表供 where 条件进行筛选;第一种情况,是四个表的笛卡尔集;第二种情况是四个表的笛卡尔集并使用 ON 条件进行过滤后的临时表供 where 条件进行筛选。第二种情况一般情况下要比第一种情况少很多行记录,占更少内存,性能更高。
他两个的功能是一样的,但是join是ANSI(一个国际标准制定组织)在ANSI SQL-92标准中制定的标准,他被各大数据库支持,所以你的join语句可以在SQL SERVER ,MYSQL,Oracle等上都能运行,但是非join的只有微软的数据库支持的比较好。说的通俗点就是一个是标准用法,一个是微软的产品的用法。即兼容性问题。从这可以看出来join的方式好
波形图你还有源码吗?