关于 FROM a,b 和 a LEFT JOIN b 的区别 ...

2025年03月12日 19:12
有4个网友回答
网友(1):

一、返回的结果不同

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在下游。

网友(2):

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语句

网友(3):

给个通俗的解释吧.
例表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

网友(4):

楼上正解