Sql 这两个查询中的差异

Sql 这两个查询中的差异,sql,oracle11g,oracle-sqldeveloper,Sql,Oracle11g,Oracle Sqldeveloper,这两个查询不同吗?我在Oracle SQL中得到了不同的结果,你能解释一下吗 ***第一次查询*** 挑选* 从…起 表1, 表2 其中TABLE1.COL\u ID=TABLE2.COL\u ID 表1.COL1='ABC' 表2.COL1=‘ABC’ 表1.COL2=2015 表1.COL3='X'; ***第二个问题*** 挑选* 从…起 表1, 表2:, 表3 其中TABLE1.COL\u ID=TABLE2.COL\u ID 表1.COL1='ABC' 表2.COL1=‘ABC’ 表

这两个查询不同吗?我在Oracle SQL中得到了不同的结果,你能解释一下吗

***第一次查询***
挑选*
从…起
表1,
表2
其中TABLE1.COL\u ID=TABLE2.COL\u ID
表1.COL1='ABC'
表2.COL1=‘ABC’
表1.COL2=2015
表1.COL3='X';
***第二个问题***
挑选*
从…起
表1,
表2:,
表3
其中TABLE1.COL\u ID=TABLE2.COL\u ID
表1.COL1='ABC'
表2.COL1=‘ABC’
表1.COL2=2015

表1.COL3='X'是的,SQL处理器假定您要将所有三个表连接起来:
table1、table2、table3

您不需要显式地声明
join
子句,如果您不这样做,SQL引擎将处理它

当您使用逗号分隔两个(或更多)表名时,您想要的是笛卡尔乘积。“左”表的每一行都将与右表的每一行“匹配”(连接)

现在,如果您在where子句中编写一些内容,就像在这个“连接”上设置一个条件,告诉您哪些行要与哪些行“连接”


这实际上是“连接”行:),因此join关键字有助于提供更可读的语法,并且更易于理解,因为您“确实”想要连接一些公共值

是的,SQL处理器假定您在暗示一个
联接
所有三个表:
表1、表2、表3

您不需要显式地声明
join
子句,如果您不这样做,SQL引擎将处理它

当您使用逗号分隔两个(或更多)表名时,您想要的是笛卡尔乘积。“左”表的每一行都将与右表的每一行“匹配”(连接)

现在,如果您在where子句中编写一些内容,就像在这个“连接”上设置一个条件,告诉您哪些行要与哪些行“连接”


这实际上是“连接”行:),因此join关键字有助于提供更可读的语法,并且更易于理解,因为您“确实”想要连接一些公共值

是的,SQL处理器假定您在暗示一个
联接
所有三个表:
表1、表2、表3

您不需要显式地声明
join
子句,如果您不这样做,SQL引擎将处理它

当您使用逗号分隔两个(或更多)表名时,您想要的是笛卡尔乘积。“左”表的每一行都将与右表的每一行“匹配”(连接)

现在,如果您在where子句中编写一些内容,就像在这个“连接”上设置一个条件,告诉您哪些行要与哪些行“连接”


这实际上是“连接”行:),因此join关键字有助于提供更可读的语法,并且更易于理解,因为您“确实”想要连接一些公共值

是的,SQL处理器假定您在暗示一个
联接
所有三个表:
表1、表2、表3

您不需要显式地声明
join
子句,如果您不这样做,SQL引擎将处理它

当您使用逗号分隔两个(或更多)表名时,您想要的是笛卡尔乘积。“左”表的每一行都将与右表的每一行“匹配”(连接)

现在,如果您在where子句中编写一些内容,就像在这个“连接”上设置一个条件,告诉您哪些行要与哪些行“连接”


这实际上是“连接”行:),因此join关键字有助于提供更可读的语法,并且更易于理解,因为您“确实”想要连接一些公共值

假设您进行以下查询:

Select * from 
 myTable1 ,myTable2
您将得到(myTable1 rows number)x(myTable2 rows number),因为在没有联接条件的情况下,您将把第一个表中的每一行与第二个表中的每一行组合起来,这称为笛卡尔积,联接为


在您的情况下,第一个查询包含一个,因为使用了
,其中TABLE1.COL\u ID=TABLE2.COL\u ID
,在第二个查询中,第一个联接的结果与table
TABLE3
交叉联接,假设您进行此查询:

Select * from 
 myTable1 ,myTable2
您将得到(myTable1 rows number)x(myTable2 rows number),因为在没有联接条件的情况下,您将把第一个表中的每一行与第二个表中的每一行组合起来,这称为笛卡尔积,联接为


在您的情况下,第一个查询包含一个,因为使用了
,其中TABLE1.COL\u ID=TABLE2.COL\u ID
,在第二个查询中,第一个联接的结果与table
TABLE3
交叉联接,假设您进行此查询:

Select * from 
 myTable1 ,myTable2
您将得到(myTable1 rows number)x(myTable2 rows number),因为在没有联接条件的情况下,您将把第一个表中的每一行与第二个表中的每一行组合起来,这称为笛卡尔积,联接为


在您的情况下,第一个查询包含一个,因为使用了
,其中TABLE1.COL\u ID=TABLE2.COL\u ID
,在第二个查询中,第一个联接的结果与table
TABLE3
交叉联接,假设您进行此查询:

Select * from 
 myTable1 ,myTable2
您将得到(myTable1 rows number)x(myTable2 rows number),因为在没有联接条件的情况下,您将把第一个表中的每一行与第二个表中的每一行组合起来,这称为笛卡尔积,联接为

在您的情况下,第一个查询包含一个,因为使用了
,其中TABLE1.COL\u ID=TABLE2.COL\u ID
,在第二个查询中,第一个联接的结果与table
TABLE3
交叉联接(Q1返回的行数乘以TABLE3中的行数)当连接条件丢失时,Q2导致交叉连接(Q1返回的行数乘以表3中的行数),因为连接条件丢失Q2结果i