一、返回的结果不同
FROM a,b查询a、b里面所有的数据。如例句:SELECT * FROM a,b WHERE a.id=b.id,也就是a与b表返回关联的数据。
FROM a LEFT JOIN b关键字会从左表a那里返回所有的行,即使在右表b中没有匹配的行。如例句:SELECT * FROM a LEFT JOIN b ON a.id=b.id,也就是返回a与b表关联的数据及空值。
二、适用范围不同
SELECT * FROM a,b 只适合某种数据库,如SQL server,而在oracle不可用。
SELECT * FROM a LEFT JOIN b 在SQL server、oracle中都可用。
扩展资料
from a join b 与 from a, b 产生的临时表结果集 都是执行笛卡尔积即(select * from a cross join b )两表的行乘积数。
on :与取得结果集同步进行数据刷选及过滤。
where : 获得结果集之后,才进行数据刷选及过滤。
执行顺序:on在上游,where在中游,having在下游。
1、数据进行的结构,即返回的结构不一样。
FROM a,b:select * from a ,b where a.aid = b.bid这是仅取出匹配的数据。此时的取出的是: 1,a1,b1,2,a2,b2 。
a LEFT JOIN b : elect * from a left join b on a.aid = b.bid首先取出a表中所有数据,然后再加与a,b匹配的的数据。
2、数据的使用范围不同。
FROM a,b: 只适合某种数据库,如SQL server,而在oracle不可用。
a LEFT JOIN b :在SQL server、oracle中都可用。
都是属于select语句的句子。
扩展资料:
SELECT语句返回用指定的条件在一个数据库中查询的结果,返回的结果被看作记录的集合。
语法:SELECT [predicate] { * | table.* | [table.]field1 [AS alias1] [, [table.]field2 [AS alias2] [, ...]]} FROM tableexpression [, ...] [IN externaldatabase] [WHERE... ] [GROUP BY... ] [HAVING... ] [ORDER BY... ] [WITH OWNERACCESS OPTION]。
说明:predicate可选参数,该参数可取值为ALL(缺省值)、DISTINCT、DISTINCTROW 或TOP。如果该参数为ALL,则返回SQL语句中符合条件的全部记录;如果为DISTINCT,则省略选择字段中包含重复数据的记录;如果为DISTINCTROW,则省略基于整个重复记录的数据,而不只是基于重复字段的数据;如果为TOP n(n为一个整数),则返回特定数目的记录,且这些记录将落在由 ORDER BY 子句指定的前面或后面的范围中。
参考资料来源:百度百科-SELECT语句
给个通俗的解释吧.
例表a
aid adate
1 a1
2 a2
3 a3
表b
bid bdate
1 b1
2 b2
4 b4
两个表a,b相连接,要取出id相同的字段
select * from a ,b where a.aid = b.bid这是仅取出匹配的数据.
此时的取出的是:
1 a1 b1
2 a2 b2
那么left join 指:
select * from a left join b on a.aid = b.bid
首先取出a表中所有数据,然后再加上与a,b匹配的的数据
此时的取出的是:
1 a1 b1
2 a2 b2
3 a3 空字符
同样的也有right join
指的是首先取出b表中所有数据,然后再加上与a,b匹配的的数据
此时的取出的是:
1 a1 b1
2 a2 b2
4 空字符 b4
楼上正解