left join on:

向左关联某个表记录,意思是以左边的表记录为基准,通过关联条件会从左表返回所有的行,即使在右表中没有匹配的行。

举个例子:

select * from A left join B on A.id=B.id

说明:从A表左外联接B表,基于A.id=B.id

和where的区别:

1.on条件是生成临时表的条件,不管on中的条件是否成真,都会返回左边表中的记录(为null显示)。

2.where条件是建立在临时表生成好基础上再对临时表过滤的条件,已经没有left join的含义(必须返回左边表的记录),条件不符合就全部过滤。

假设两张表,

表1-tab1:     表2-tab2:

id name       name class

1  10        10  AA

2  20        20  BB

3  30        20  CC

SQL语句:

1.select * from tab1 left join tab2 on (tab1.name=tab2.name) where tab2.class='AA'

2.select * from tab1 left join tab2 on (tab1.name=tab2.name and tab2.class='AA')

SQL1结果:

1.on的条件为tab1.name=tab2.name,以tab1表为基准,返回所有的值

tab1.id  tab1.name  tab2.name  tab2.class

1       10       10       AA

2       20       20       BB

2       20       20       CC

3       30       NULL     NULL

2.WHERE后的条件tab2.class='AA',查询结果为

tab1.id  tab1.name  tab2.name  tab2.class

1       10       10       AA

SQL2结果:

on的条件为tab1.name=tab2.name and tab2.class='AA',以tab1表为基准返回所有的值

tab1.id  tab1.name  tab2.name  tab2.class

1       10       10       AA

2       20      NULL     NULL

3       30      NULL      NULL

比较以下sql区别:

查询有课程成绩小于60分的同学的学号、姓名,

--以student_id分组:

SELECT student_id,sname FROM test_score s,test_student t WHERE s.num<'60' AND s.student_id=t.sid GROUP BY student_id;

--按student_id去重:

SELECT DISTINCT student_id,sname FROM test_score s,test_student t WHERE s.num<'60' AND s.student_id=t.sid;

--以left join左连接

SELECT DISTINCT student_id,sname FROM test_student t LEFT JOIN test_score s ON s.student_id=t.sid WHERE s.num<'60';

left join on和where的更多相关文章

  1. SQL Server-聚焦IN VS EXISTS VS JOIN性能分析(十九)

    前言 本节我们开始讲讲这一系列性能比较的终极篇IN VS EXISTS VS JOIN的性能分析,前面系列有人一直在说场景不够,这里我们结合查询索引列.非索引列.查询小表.查询大表来综合分析,简短的内 ...

  2. SQL Server-聚焦NOT IN VS NOT EXISTS VS LEFT JOIN...IS NULL性能分析(十八)

    前言 本节我们来综合比较NOT IN VS NOT EXISTS VS LEFT JOIN...IS NULL的性能,简短的内容,深入的理解,Always to review the basics. ...

  3. Nested Loops join时显示no join predicate原因分析以及解决办法

    本文出处:http://www.cnblogs.com/wy123/p/6238844.html 最近遇到一个存储过程在某些特殊的情况下,效率极其低效, 至于底下到什么程度我现在都没有一个确切的数据, ...

  4. c# Enumerable中Aggregate和Join的使用

    参考页面: http://www.yuanjiaocheng.net/ASPNET-CORE/asp.net-core-environment.html http://www.yuanjiaochen ...

  5. 超详细mysql left join,right join,inner join用法分析

    下面是例子分析表A记录如下: aID        aNum 1           a20050111 2           a20050112 3           a20050113 4   ...

  6. join Linq

    List<Publisher> Publishers = new List<Publisher>(); Publisher publish1 = new Publisher() ...

  7. mysql join 和left join 对于索引的问题

    今天遇到一个left join优化的问题,搞了一下午,中间查了不少资料,对MySQL的查询计划还有查询优化有了更进一步的了解,做一个简单的记录: select c.* from hotel_info_ ...

  8. BCL中String.Join的实现

    在开发中,有时候会遇到需要把一个List对象中的某个字段用一个分隔符拼成一个字符串的情况.比如在SQL语句的in条件中,我们通常需要把List<int>这样的对象转换为“1,2,3”这样的 ...

  9. [数据库基础]——图解JOIN

    阅读导航 一.概要 二.JOIN分类 三.JOIN分类详解 一.概要 JOIN对于接触过数据库的人,这个词都不陌生,而且很多人很清楚各种JOIN,还有很多人对这个理解也不是很透彻,这次就说说JOIN操 ...

  10. Spark join 源码跟读记录

    PairRDDFunctions类提供了以下两个join接口,只提供一个参数,不指定分区函数时默认使用HashPartitioner;提供numPartitions参数时,其内部的分区函数是HashP ...

随机推荐

  1. 3.HttpSession

    1 HttpSession概述 1.1 什么是HttpSesssion javax.servlet.http.HttpSession接口表示一个会话,我们可以把一个会话内需要共享的数据保存到HttSe ...

  2. C++ 中 auto 与 decltype 的用法与区别

    最近在恶补 C++ 知识的时候,学习到了一些 C++11 标准的新特性,利用这些新特性,我们能够更快地提高编程效率,从而实现我们的目标,在此特意记下学习过程中所学习到的一些东西,方便日后的回顾和复习. ...

  3. 二十九、layui分页插件的使用

    <div id="page1"></div> <script> //开启分页 var page = 1; function findstoreL ...

  4. 将nginx永久加入到系统环境变量

    php,mysql的永久方法跟这个一样   下来配置环境变量 在/etc/profile 中加入: export NGINX_HOME=/usr/local/nginxexport PATH=$PAT ...

  5. Amazon SNS (Simple Notification Service) Using C# and Visual Studio

    SNS (Amazon Simple Notification Services) Amazon SNS (Amazon Simple Notification Services) is a noti ...

  6. Debugging Beyond Visual Studio – WinDbg

    Getting started with WinDbg: 1. Download the Debugging Tools for Windows from the Microsoft website ...

  7. 2.8 hashlib模块

  8. nginx编译安装指定参数

    --prefix=/app/nginx # 安装目录 --conf-path=/app/nginx/conf/nginx.conf # 配置文件 --sbin-path=/app/nginx/sbin ...

  9. django auth permission

    django 提供内置view处理登陆和退出. 查看django.contrib.auth源码,主要查看三个函数authenticate,login,logout. authenticate(requ ...

  10. 部分安卓机型1px边框无法显示解决方法

    实践发现css样式中使用1px solid 在部分安卓机型无法显示. 网上找到解决方案:使用行内样式设置边框.