`

外连接ON 条件的三个作用及与WHERE 的区别

 
阅读更多
转载
  • http://www.cftea.com/c/2007/12/UIEINMQSAOVJIRP5.asp


SELECT *
FROM a LEFT JOIN b ON a.id=b.id
     AND a.id=1 AND b.id=2
这里 ON 中有三个条件,其意义分别为:

a.id=b.id 两个表的连接条件,只有 a.id 与 b.id 相同的记录才进行匹配。
a.id=1 符合这个条件的记录被另一个表匹配。
b.id=2 符合这个条件的记录去匹配另一个表。
可以看到 a.id=b.id 指定如何匹配;a.id=1 表示谁被匹配(不表示最终结果的筛选条件);b.id=2 表示用谁去匹配(不表示最终结果的筛选条件)。

实例

表 a:

id    v
----
1     a1
2     a2
3     a3
4     a4
5     a5
表 b:


id    v
----
1     b1
2     b2
3     b3
4     b4
5     b5
SQL 语句:

SELECT *
FROM a LEFT JOIN b ON a.id=b.id
     AND a.id=1 AND b.id=2
结果:

1 a1 NULL NULL
2 a2 NULL NULL
3 a3 NULL NULL
4 a4 NULL NULL
5 a5 NULL NULL

为什么会有这样的结果呢,据条件可知:a 表只有第一条记录被匹配,后面的记录都不被匹配;b 表只拿第二条记录去匹配 a 表的第二条记录,可是 a 表的第二条记录不参加匹配,所以 b 表结果全部为 NULL。

我们再看看把条件写在 WHERE 中的结果

SQL 语句:

SELECT *
FROM a LEFT JOIN b ON a.id=b.id
WHERE a.id=1 AND b.id=2
结果:

结果是零条记录,什么也没有,本来连接后结果为:

1 a1 1 b1
2 a2 2 b2
3 a3 3 b3
4 a4 4 b4
5 a5 5 b5
可是并没有符合 a.id=1 且 b.id=2 的记录,所以为零条记录。

再回顾一下 WHERE 中的三个条件。下面的示例演示了:a 表中只有 a.id>1 的记录才参加匹配(但要全部选出来,因为它是左连接的左边的表),b 表中只有 b.id=2 的记录才参加匹配(只有它才有被选出来的机会,因为它是左连接的右边的表)

SQL 语句:

SELECT *
FROM a LEFT JOIN b ON a.id=b.id
     AND a.id>1 AND b.id=2
结果:

1 a1 NULL NULL
2 a2 2    b2
3 a3 NULL NULL
4 a4 NULL NULL
5 a5 NULL NULL 
RIGHT JOIN

RIGHT JOIN 和 LEFT JOIN 类似,只是颠倒一下“主表”和“辅表”,如下 SQL 语句

SELECT *
FROM a RIGHT JOIN b ON a.id=b.id
     AND a.id=1 AND b.id=2
a.id=1 表示用谁去匹配(不表示最终结果的筛选条件);b.id=2 表示谁被匹配(不表示最终结果的筛选条件)。
分享到:
评论

相关推荐

    sql内连接和外连接

    外连接分为三种类型:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)和全外连接(FULL OUTER JOIN)。 **语法**: - **左外连接**: ```sql SELECT column_name(s) FROM table1 LEFT OUTER JOIN ...

    查询语句顺序及外连接

    ### 查询语句顺序及外连接详解 在数据库查询中,SQL语句的执行顺序对于理解和优化查询至关重要。本文将深入探讨查询语句的执行流程,尤其是外连接的应用,通过具体的实例帮助读者掌握这一核心概念。 #### 查询语句...

    sql中的left join及on、where条件关键字的区别详解

    在SQL查询中,JOIN操作是连接两个或多个表格的关键字,用于从多个表格中合并数据。LEFT JOIN(在某些数据库中称为LEFT ...理解这三个关键字的区别和用法是SQL查询中的基本技能,对于处理复杂的数据关联问题至关重要。

    理解oracle中的外连接

    本篇文章将深入探讨这三种外连接的概念、语法以及它们在实际应用中的作用。 1. 左外连接(Left Outer Join) 左外连接返回左表(在JOIN语句前的表)的所有记录,即使在右表中没有匹配的记录。如果右表中没有匹配项...

    SQL内连接与外连接.pdf

    - **右外连接**反之,返回右表的所有行及与左表匹配的行。左表中没有匹配的行时,对应的列值为NULL。 ```sql SELECT column1, column2, ... FROM table1 RIGHT OUTER JOIN table2 ON condition; ``` - **全...

    SQL连接查询中On筛选与Where筛选的区别

    在连接查询中,On筛选和Where筛选虽然看似相似,但它们在特定情况下的作用和效果是有区别的,尤其在处理Outer Join时,这一点显得尤为重要。 首先,我们要了解SQL中的三种基本连接类型:Cross Join、Inner Join和...

    MySQL内连接、外连接的含义和作用以及关联关系的定义

    - **右外连接**:与左外连接相反,返回右表的所有记录及左表中符合条件的记录。 - **全外连接**:返回左表和右表的所有记录。如果任意一侧表中没有匹配项,则结果集中的相应字段为NULL。 **示例**: 假设我们需要...

    数据库:左连接、右连接、全连接

    外连接(OUTER JOIN)是一种连接操作,用于查询多个表中的数据,但不 sadece 返回符合连接条件的数据行,而是返回左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中的所有数据行。外连接可以分为三种...

    数据库连接查询相关外连接内连接

    3. **交叉连接**(Cross Join):返回第一个表中的每一行与第二个表中的每一行的组合,不涉及任何条件。在实际应用中较少用到。 除了连接查询,分组聚合(GROUP BY和HAVING)和子查询也是SQL的重要组成部分。例如,...

    Oracle中的外连接

    Oracle中的外连接是数据库查询中的一种重要连接类型,它允许用户获取所有来自一个表的数据,即使这些数据在另一个表中没有匹配的记录。这与内连接不同,内连接只返回两个表中有匹配记录的结果。 首先,我们要理解外...

    Oracle外连接

    2. **左外连接与普通连接条件的区别**: - 左外连接中,如果左侧的表被指定为保留行表,那么即使右侧的表中没有匹配的记录,左侧的记录也会被保留下来。 - 普通连接条件只返回两个表中完全匹配的记录。 - 例如:`...

    数据库表连接(内外、左右连接).docx

    `SELECT * FROM voteMaster vm LEFT OUTER JOIN voter vt ON vm.id=vt.id UNION ALL SELECT * FROM voteMaster vm RIGHT OUTER JOIN voter vt ON vm.id=vt.id WHERE vm.id IS NULL` 这样的查询可以模拟全外连接的...

    Oracle中的几种表连接区别

    本文将详细介绍Oracle中常见的几种表连接方式及其应用场景,包括内连接(Inner Join)、外连接(Outer Join)、左连接(Left Join)、右连接(Right Join)等,并通过具体的例子来帮助理解每种连接的特点与区别。...

    数据库各种join连接

    数据库各种join连接 数据库中的join连接是指将两个或多个表连接起来,以便检索数据...在写连接查询时,推荐在on后面只跟连接条件,而对中间表限制的条件都写到where子句中。这可以避免查询结果的歧义性和难以理解性。

    sql各种连接

    外连接是 SQL 连接查询中的一种基本类型,它将两个表中的记录组合起来,形成一个新的表,但不只有当两个表中的记录满足连接条件时才会被包括在内。外连接分为左外连接、右外连接和全外连接三种类型。 外连接的特点...

    数据库连接表查询

    - `WHERE` 子句和 `ON` 子句的区别:通常建议将连接条件放在 `ON` 子句中,而将其他过滤条件放在 `WHERE` 子句中。这样可以使查询逻辑更加清晰,并且避免潜在的错误。 - `OUTER` 关键字在某些数据库系统中是可以省略...

    oracle数据库表左连接右连接全连接的认识

    * 左连接:将进行连接的其中一个表作为基准显示全部的数据,根据连接条件在其它表中可能会出现无法匹配的数据,此时就用空值来代替。 * 右连接:与左连接相似,只是基准表换成了右边的表。 * 全连接:简单说就是左右...

    数据库多表连接查询详解

    外连接则返回的是左表、右表或两个表中的所有数据行,而不仅仅是与连接条件相匹配的行。交叉连接则返回的是连接表中所有数据行的笛卡尔积。 在 SQL 语句中,连接查询可以使用 FROM 子句或 WHERE 子句来实现。FROM ...

    SQL的几种连接:内连接、左联接、右连接、全连接、交叉连接

    内连接是最基本的连接类型,它将两个表格中的数据根据某个条件连接起来。内连接可以分为等值连接、不等值连接和自然连接三种。 * 等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出...

Global site tag (gtag.js) - Google Analytics