`
xiaoxiong_it
  • 浏览: 129967 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

left join on 后跟and和where区别

 
阅读更多

       相信很多朋友在写sql的时候会用到 left join on,right join on, inner join on 这种连接方式,但是如果想在我们连接的表中去过滤某个条件该怎么做呢,是直接在 on 后面加 and 还是直接在where中加条件呢?之前自己遇到这种情况总是先去做尝试,对于这其中的原理不明白。通过网上搜索以及自己实践,把自己的见解以及网上搜到的一些结果写下来,以便以后回顾使用。

 

数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。

left join on :

1. on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。 on 后面跟and条件,先会在右边表中对and条件进行过滤,然后再跟左边主表进行关联。

2. where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

 

示例:

表table1

id    no

1     101

2     102

3     103

4     104

5     105

 

表table2

no     name

101   a

103   b

104   c

 

SELECT * FROM table1 t1  LEFT JOIN table2 t2  ON (t1.no = t2.no AND t2.no='103')

查询结果如下:

t1.id    t1.no    t2.no    t2.name

1         101     (null)     (null) 

2         102     (null)     (null) 

3         103     103       b

4         104     (null)     (null) 

5         105     (null)     (null)

 

SELECT * FROM table1 t1  LEFT JOIN table2 t2  ON t1.no = t2.no WHERE t2.no='103'

查询结果如下:

t1.id    t1.no    t2.no    t2.name

3         103     103       b

 

其实以上结果的关键原因就是left join,right join,full join的特殊性,不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。

而inner jion没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。

 

 

 

 

 

 

分享到:
评论

相关推荐

    ACCESS查询器 可用sql查询语句

    条件可以是列的值、比较运算符和逻辑运算符的组合,如 `WHERE 列1 = '值' AND 列2 > 10`。 3. GROUP BY和HAVING子句:用于对数据进行分组并筛选组。`GROUP BY`后跟一列或多列名,`HAVING`则在分组后设置条件。例如...

    sql多表关联语句

    left join (SELECT PP_VALUE, PP_NAME FROM SYSTEM_PARAMETERS where PP_TABLE = 'F_Company_EU_Info' and PP_FIELD = 'Identification') f on a.Identification = f.PP_VALUE ``` - **左连接(left join)**: 左连接...

    数据库复习题

    - **SQL语句**:`SELECT t1.Tname, t1.Prof FROM teacher t1 JOIN teacher t2 ON t1.Prof <> t2.Prof WHERE t1.Depart = '计算机系' AND t2.Depart = '电子工程系';` - **知识点**:使用表连接进行条件筛选。 ###...

    sql常用语句(提升篇)

    - 复杂的联查操作,如`SELECT * FROM a LEFT INNER JOIN b ON a.a = b.b RIGHT INNER JOIN c ON a.a = c.c INNER JOIN d ON a.a = d.d WHERE 条件;` 12. **日程提醒**: - 提前五分钟提醒:`SELECT * FROM 日程...

    DmlSQL2.zip

    SQL2支持多种JOIN操作,包括INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN,用于合并多个表的数据。例如,通过员工ID连接员工表和部门表: ```sql SELECT * FROM 员工 e INNER JOIN 部门 d ON e.部门ID = d.部门ID;...

    sql之select语句

    在使用外连接时,注意`ON`关键字后跟连接条件,而不是`WHERE`。在某些旧的SQL方言中(如Oracle),可以使用`(+)`操作符来表示外连接,但这在标准SQL中已经不再推荐。 在实际应用中,`SELECT`语句的灵活性非常高,...

    MySQL命令大全

    在进行开发和实际应用中,用户不应该只用root用户进行连接数据库,虽然使用root用户进行测试时很方便,但会给系统带来重大安全隐患,也不利于管理技术的提高。我们给一个应用中使用的用户赋予最恰当的数据库权限。如...

    SQL循序渐进,SQL入门基础

    - **外部连接**:LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN。 - **示例**:合并两个表中的记录,去除重复项: ```sql SELECT * FROM Table1 UNION SELECT * FROM Table2; ``` #### 24. 嵌入SQL - **概念**:将...

    Sql Server 生成实体类

    - `LEFT JOIN sys.extended_properties g on a.id = g.major_id AND a.colid = g.minor_id`: 左连接`sys.extended_properties`表,获取列的扩展属性。 #### 3. WHERE子句: - `WHERE b.name is not null`: 排除...

    oracle 数据库查询

    此外,还有`LEFT JOIN`、`RIGHT JOIN`和`FULL OUTER JOIN`等不同类型的联接。 聚合函数如`COUNT`、`SUM`、`AVG`、`MAX`和`MIN`用于对一组值进行计算。`GROUP BY`和`HAVING`则用于对结果进行分组和过滤。例如,按...

    第10章 多表查询.doc

    2. **WHERE子句与AND操作符**:在查询10号部门员工的`job`和20号部门的`location_id`时,可以使用`WHERE`子句结合`AND`操作符来指定条件。 3. **SELECT语句与条件判断**:选择所有有奖金的员工,需要检查`emp`表中...

    s q l 应 用

    例如,连接`Stores`和`Sales`表基于`store_id`列,可以使用`SELECT * FROM Stores INNER JOIN Sales ON Stores.store_id = Sales.store_id`。 #### 外部连接(Outer Join) 外部连接包括`LEFT OUTER JOIN`、`RIGHT...

    SQL数据库语句测试.docx

    FROM emp e LEFT JOIN emp m ON e.mgr = m.empno; ``` **知识点:** - `LEFT JOIN`:左外连接,保留左表的所有行,并在右表中找到匹配项。如果没有找到匹配项,则用NULL填充右表中的列。 - 本题展示了如何使用外连接...

    SQL语言.docSQL语言.doc

    6. **多表连接查询**:`JOIN`操作允许从多个表中联合查询数据,`INNER JOIN`、`LEFT JOIN`、`RIGHT JOIN`和`FULL JOIN`等提供了不同类型的连接方式。自我连接是连接同一张表的特殊情况,用于比较表中的行或解决特定...

    非常全面的sql语句全集

    - **使用JOIN连接表**:通过INNER JOIN、LEFT JOIN、RIGHT JOIN或FULL JOIN等,可以结合多个表的数据。例如,`SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id;` - **使用外连接查看不满足连接...

    sql基本练习-详细

    主要有INNER JOIN(内连接)、LEFT JOIN(左连接)、RIGHT JOIN(右连接)和FULL JOIN(全连接)。 - UNION操作:合并两个或多个SELECT查询的结果集,去除重复行。 - SUBQUERY(子查询):在另一个SQL语句中嵌套一...

    数据库系统原理课件:第4章 SQL语言.ppt

    多表连接查询允许从多个表中获取数据,如`INNER JOIN`、`LEFT JOIN`、`RIGHT JOIN`等。子查询则可以在一个查询语句内部嵌套另一个查询,以满足更复杂的查询需求。 在实际应用中,SQL的这些功能使得开发者和数据库...

    SQL语言入门教pdf

    有几种类型的JOIN,包括INNER JOIN(内连接)、LEFT JOIN(左连接)、RIGHT JOIN(右连接)和FULL OUTER JOIN(全外连接)。 7. **子查询与集合函数**:子查询是在一个查询中嵌套另一个查询,用于实现更复杂的筛选...

    Oracle SQL语法速查&Oracle_Errors.rar

    5. **联接操作**:如INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN,用于合并来自两个或更多表的数据。 6. **事务处理**:BEGIN、COMMIT、ROLLBACK用于控制数据的原子性和一致性,确保数据的完整性。 7. **...

Global site tag (gtag.js) - Google Analytics