`

left join、inner join : on与where 区别

    博客分类:
  • sql
阅读更多

a表   left join  b表    时必定连接一张表

a表永远保留 ,操作的全是b表)

(1)如果on条件作用在b表字段上,则不符合条件的时候,当前b表所有的内容都清空
(2)如果加on条件作用在a表字段上,则不符合条件的时候,清空当前b表的所有记录
(3)where条件是作用在连接后的复合表的记录(a、b表当成一个整体),不符合条件,直接删除这条组合记录

table :   STUDENT(id, name);        CLASS(id, class):
                id    name                     id            class
                 1    "张三"                     1             no.1
                 2  “李四”                   2             no.2
                 3  “王五”                   3             no.2
                 4    "赵六"                   

Sql语句1: SELECT a.id, a.name, b.class FROM STUDENT AS s LEFT JOIN CLASS AS c ON s.id=c.id AND s.name="张三";
id        name          class
  1       "张三"          no.1
  2     “李四”       (不符合条件清空)
  3     “王五”       (不符合条件清空)
  4       "赵六"         (不符合条件清空)

Sql语句2: SELECT a.id, a.name, b.class FROM STUDENT AS s LEFT JOIN CLASS AS c ON s.id=c.id AND c.class="no.2";
id        name          class
  1       "张三"         (不符合条件清空)
  2     “李四”       no.2
  3     “王五”       no.2
  4       "赵六"         (不符合条件清空)

Sql语句3: SELECT a.id, a.name, b.class FROM STUDENT AS s LEFT JOIN CLASS AS c ON s.id=c.id WHERE s.name="张三";
id        name          class
  1       "张三"          no.1
(不符合条件清空)
(不符合条件清空)
(不符合条件清空)

Sql语句4: SELECT a.id, a.name, b.class FROM STUDENT AS s LEFT JOIN CLASS AS c ON s.id=c.id WHERE c.class="no.2";
id        name          class
(不符合条件清空)
  2     “李四”       no.2
  3     “王五”       no.2
(不符合条件清空)

******************************************************
inner join 只有符合条件的数据才显示 ON 和WHERE 作用相同

Sql语句5: SELECT a.id, a.name, b.class FROM STUDENT AS s INNER JOIN CLASS AS c ON s.id=c.id AND s.name="张三";
id        name          class
  1       "张三"          no.1
 (不符合条件清空)
 (不符合条件清空)
 (不符合条件清空)

Sql语句6: SELECT a.id, a.name, b.class FROM STUDENT AS s INNER JOIN CLASS AS c ON s.id=c.id AND c.class="no.2";
id        name          class
(不符合条件清空)
  2     “李四”       no.2
  3     “王五”       no.2
(不符合条件清空)

Sql语句7: SELECT a.id, a.name, b.class FROM STUDENT AS s INNER JOIN CLASS AS c ON s.id=c.id WHERE s.name="张三";
id        name          class
  1       "张三"          no.1
(不符合条件清空)
(不符合条件清空)
(不符合条件清空)

Sql语句8: SELECT a.id, a.name, b.class FROM STUDENT AS s INNER JOIN CLASS AS c ON s.id=c.id WHERE c.class="no.2";
id        name          class
(不符合条件清空)
  2     “李四”       no.2
  3     “王五”       no.2
(不符合条件清空)
分享到:
评论

相关推荐

    join on 语句及扩展

    Join on/inner join on/full join on/full outer join on/left join on/right join on/cross join on; 在使用jion时,on和where条件的区别;

    解析sql语句中left_join、inner_join中的on与where的区别

    以下是对在sql语句中left_join、inner_join中的on与where的区别进行了详细的分析介绍,需要的朋友可以参考下

    pcw0118#ZXBlog#七种inner join1

    第一种inner join: 第二种left join: 第三种right join: 第四种left join where b.id is null: 第五种

    LINQ to SQL语句之Join和Order By

    [t0].[Discontinued] FROM [dbo].[Products] AS [t0] LEFT OUTER JOIN [dbo].[Suppliers] AS [t1] ON [t1].[SupplierID] = [t0].[SupplierID] WHERE ([t1].[Country] = @p0) AND ([t0].[UnitsInStock] = @p1) -- @p0...

    MySQL数据库:USING子句.pptx

    表名1 INNER JOIN 表名2 USING (列名) [WHERE 条件表达式] 外连接语法格式如下: 表名1 LEFT| RIGHT JOIN 表名2 USING (列名) [WHERE 条件表达式] ; 【例】 查找Members表中所有订购过图书的会员的姓名。 SELECT ...

    K3触发器实现对物料单据管控 .txt

    left join seorder as t4 on t4.finterid=t3.forderinterid where isnull(t4.fbillno,'no')<>'no' and t2.finterid=@finterid240 return end --控制委外加工生产任务单领料日期不对小于计划开工日期 if (@...

    MySQL中join语句的基本使用教程及其字段对性能的影响

    … FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona table1 通常称为左表,table2 称为右表。ON 关键字用于设定匹配条件,用于限定在结果集合中想要哪些行。如果需要指定其他条件,后面可以加上 WHERE 条件...

    30条SQL优化建议SQL优化手册MySQL性能调优.docx

    7、7、尽量避免在索引列上使用mysql的内置函数,8、应尽量避免在 where 子句中对字段进行表达式操作,这将导致系统放弃使用索引而进行全表扫,9,Inner join 、left join、right join,优先使用Inner join,如果是...

    Mysql联表update数据的示例详解

    [INNER JOIN | LEFT JOIN] T1 ON T1.C1 = T2. C1 SET T1.C2 = T2.C2, T2.C3 = expr WHERE condition 更详细地看看MySQL UPDATE JOIN语法: 首先,在UPDATE子句之后,指定主表(T1)和希望主表连接表(T2)。 第二,指定...

    ACCESS语法

    订单日期 FROM 客户 INNER JOIN 订单 ON 客户.客户编号 = 订单.客户编号 11-2 查询指令 多资料表查询指令 LEFT及RIGHT JOIN SELECT 客户.公司名称, 客户.连络人姓名, 订单.客户编号 FROM 客户 LEFT JOIN 订单 ON...

    MySQL中基本的多表连接查询教程

     由于其返回的结果为被连接的两个数据表的乘积,因此当有WHERE, ON或USING条件的时候一般不建议使用,因为当数据表项目太多的时候,会非常慢。一般使用LEFT [OUTER] JOIN或者RIGHT [OUTER] JOIN  2. 内连接INNER ...

    SQL入门常见问题总结与实用技巧介绍.docx

    减少JOIN的数量和规模,优先考虑INNER JOIN和LEFT JOIN。 使用EXISTS替代IN子句提高效率。 数据类型与查询优化 适当的数据类型选择: 根据实际数据范围和精度选择合适的数值类型。 避免过度使用TEXT/BLOB类型,可能...

    MySQL命令大全

    grant update,delete on mydb.TestTable to NewUserName@HostName identified by “password”; 若要给此用户赋予他在相应对象上的权限的管理能力,可在GRANT后面添加WITH GRANT OPTION选项。而对于用插入User表...

    超实用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、说明:日程安排提前五分钟提醒 SQL: select * from 日程安排 where datediff('minute',f...

    node-mysql-oil:node-mysql 上的 slick api

    db({select: 'avg(t_main) as average, sum(t1.amount) as total',from: 't_main',join: [{inner: 't_join1 t1', on: 't1.main_id = t_main.id'}, {left: 't_join2 t2', on: 't2.join_id = t1.id'}],where: ['t1....

    MYSQL常用命令大全

    grant update,delete on mydb.TestTable to NewUserName@HostName identified by "password"; 若要给此用户赋予他在相应对象上的权限的管理能力,可在GRANT后面添加WITH GRANT OPTION选项。而对于用插入User表添加的...

    SQL 语法 SQL 总结 SQL教程

    SQL Inner Join SQL Left Join SQL Right Join SQL Full Join SQL Union SQL Select Into SQL Create DB SQL Create Table SQL Constraints SQL Not Null SQL Unique SQL Primary Key SQL Foreign Key ...

    精通SQL数据库连接.doc

    SELECT * FROM User INNER JOIN Event USING (userid);   控制JOIN的顺序 JOIN声明中并不要求做插入,但你可以在涉及多于两个表格时使用插入来改变JOIN声明的顺序。通常地,JOIN声明或者从左至右处理(以在查询中...

Global site tag (gtag.js) - Google Analytics