SQL语句Left join 中On和Where的用法区别

简介: 原文地址:点击打开链接 SQL语句如下: SELECT * FROM 表1  LEFT JOIN 表2 ON 表1.id = 表2.id AND 表2.Name != 'ff'WHERE 表1.NAME != 'aa'         步骤1:返回笛卡尔积(SELECT * FROM 表1 CROSS JOIN 表2)   步骤2:应用ON筛选器(当前的条件为

原文地址:点击打开链接

SQL语句如下:

SELECT * 
FROM 表1  
LEFT JOIN 表2 ON 表1.id = 表2.id AND 表2.Name != 'ff'
WHERE 表1.NAME != 'aa' 

       步骤1:返回笛卡尔积(SELECT * FROM 表1 CROSS JOIN 表2)

  步骤2:应用ON筛选器(当前的条件为  表1.id = 表2.id AND 表2.Name != 'ff')

  步骤3:添加外部行

  这一步只对OUTER JOIN起作用,如果是LEFT JOIN会以左边的表为保留表,如果是RIGHT JOIN会以右边的表为保留表。所谓外部行是指,保留表中的行。即使第二步的ON过滤掉了一些行,在这一步,会根据保留表添加第二步过滤掉的行。当前的例子,不存在这种情况。

  步骤4:应用WHERE筛选器(当前是Name != ‘aa’)过滤前三步所生成虚拟表的数据。

总结:

        如果SQL用的是Left Join ,On后面的条件对Left的表没有作用,只对Right的表有过滤作用,Where语句可以对Left的表有过滤作用。

        如果SQL用的是Right Join ,On后面的条件对Right的表没有作用,只对Left的表有过滤作用,Where语句可以对Right的表有过滤作用。



相关文章
|
29天前
|
SQL 关系型数据库 MySQL
7种SQL Join语句
7种SQL Join语句
17 1
|
4月前
|
SQL
sql 各种join 对比
sql 各种join 对比
30 0
|
6月前
|
SQL 数据库
04SQL - SQL连接 left join
04SQL - SQL连接 left join
25 0
|
3月前
|
SQL Java 数据库连接
这个问题是由于Flink在执行SQL语句时,无法找到合适的表工厂来处理JOIN操作。
【1月更文挑战第17天】【1月更文挑战第85篇】这个问题是由于Flink在执行SQL语句时,无法找到合适的表工厂来处理JOIN操作。
23 8
|
4月前
|
SQL 数据库
SQL FULL OUTER JOIN 关键字:左右表中所有记录的全连接解析
SQL RIGHT JOIN关键字返回右表(table2)中的所有记录以及左表(table1)中的匹配记录。如果没有匹配,则左侧的结果为0条记录。
63 0
|
4月前
|
SQL 数据库
SQL JOIN 子句:合并多个表中相关行的完整指南
SQL LEFT JOIN关键字返回左表(table1)中的所有记录以及右表(table2)中的匹配记录。如果没有匹配,则右侧的结果为0条记录。
58 0
|
6月前
|
SQL 测试技术
软件测试|深入理解SQL CROSS JOIN:交叉连接
软件测试|深入理解SQL CROSS JOIN:交叉连接
41 0
|
6月前
|
SQL
07SQL - letf join 和 inner join 的 区别
07SQL - letf join 和 inner join 的 区别
28 0
|
6月前
|
SQL
06SQL - SQL连接 full join
06SQL - SQL连接 full join
33 0
|
6月前
|
SQL 数据库
05SQL - SQL连接 right join
05SQL - SQL连接 right join
26 0