首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SQL语法—left join on 多条件

.* from a left join b on a1=b1 and a2=b2 and a3=b3 和楼上那个相比,楼上是在联接的时候就过滤了,我的是联接后过滤,两个结果是不一样的 select...a.*, b.* from a left join b on a1=b1 where a2=b2 and a3=b3 在使用left jion时,on和where条件的区别如下: 1、 on条件是在生成临时表时使用的条件...这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉 ---- 重点 先匹配,再筛选where条件。 本文将通过几个例子说明两者的差别。...SELECT a.* FROM product a LEFT JOIN product_details b ON a.id=b.id AND b.weight!...注: 如果你使用 LEFT JOIN 来寻找在一些表中不存在的记录,你需要做下面的测试:WHERE 部分的 col_name IS NULL,MYSQL 在查询到一条匹配 LEFT JOIN 条件后将停止搜索更多行

37.6K72

left join-on-and 与 left join-on-where 和 inner join on 加条件和where加条件的区别

摘要 关于这两种写法的重要知识点摘要如下: left-join 时,即使有相同的查询条件,二者的查询结果集也不同,原因是优先级导致的,on 的优先级比 where 高 on-and 是进行韦恩运算连接生成临时表时使用的条件...在left join下,两者的区别: on是在生成临时表的时候使用的条件,不管on的条件是否起到作用,都会返回左表 (tb_user) 的行。...where则是在生成临时表之后使用的条件,此时已经不管是否使用了left join了,只要条件不为真的行,全部过滤掉。 在多表查询时,on 比 where 更早起作用。...的 写法 left-join-on-and 在连表查询过程中先根据 on-and 条件过滤右表(即 tb_score 表),再执行 join 操作生成临时表,然后对临时表执行 where 条件,因此,on-and...写法会先对右表同时做2个条件的过滤 写法 left-join-on-where 在连表查询过程中先根据 on 条件过滤右表,再执行 join 操作生成临时表,然后对临时表执行 where 条件, 因此

2.3K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    left join on and 与 left join on where的区别

    在使用left jion时,on和where条件的区别如下: 1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。...2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。        ...tab1: id size 1 10 2 20 3 30 表2 tab2: size name 10 AAA 20 BBB 20 CCC 两条SQL: 1、select * formtab1 left...join tab2 on (tab1.size = tab2.size) where tab2.name=’AAA’ 2、select * formtab1 left join tab2 on (tab1...join,right join,full join的特殊性,不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。

    1.2K20

    LEFT JOIN条件在on后面和在where后面的区别

    LEFT JOIN条件在ON后面和在WHERE后面的区别 Persion表 截屏2023-05-26 21.53.03.png City表 截屏2023-05-26 21.53.20.png 简单的...LEFT JOIN SELECT * FROM Person p LEFT JOIN City c ON p.City = c.City 执行结果 截屏2023-05-26 21.55.51.png...我们加上AND条件试试 SELECT * FROM Person p LEFT JOIN City c ON p.City = c.City AND c.City = '北京' 截屏2023-05...2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。...结论 1、LEFT JOIN 今天ON条件过滤时候,只会对右表数据条件过滤,对左表数据没有任何影响 2、WHERE 条件是对结果表进行过滤,所以会对左表数据产生影响 3、INNER JOIN ON

    33120

    Hive的left joinleft outer joinleft semi join三者的区别

    join测试数据 hive left join测试数据 测试1:left join 语句: select * from table1 left outer join table2 on(table1....‘join’ ‘table2’ in join type specifie 我用的HIVE版本是0.8,不支持直接的left join写法; 测试2:left outer join 语句: select...* from table1 left outer join table2 on(table1.student_no=table2.student_no); 结果: 1 name1 1 11 1 name1...测试3:left semi join 语句: select * from table1 left semi join table2 on(table1.student_no=table2.student_no...结论: hive不支持’left join’的写法; hive的left outer join:如果右边有多行和左边表对应,就每一行都映射输出;如果右边没有行与左边行对应,就输出左边行,右边表字段为NULL

    2.8K70

    Hive的left joinleft outer joinleft semi join三者的区别

    join测试数据 测试1:left join 语句: select * from table1 left outer join table2 on(table1.student_no=table2....student_no); 结果: FAILED: Parse Error: line 1:22 cannot recognize input near ‘left’ ‘join’ ‘table2’ in...join type specifier 我用的HIVE版本是0.8,不支持直接的left join写法; 测试2:left outer join 语句: select * from table1...测试3:left semi join 语句: select * from table1 left semi join table2 on(table1.student_no=table2.student_no...结论: hive不支持’left join’的写法; hive的left outer join:如果右边有多行和左边表对应,就每一行都映射输出;如果右边没有行与左边行对应,就输出左边行,右边表字段为

    3.9K50

    数据库系列 | left join加上where条件咋了?

    1SQL语句:left join后面加上where条件 数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户 2SQL LEFT JOIN 关键字 LEFT...3LEFT JOIN 关键字语法 SELECT column_name(s) FROM table_name1 LEFT JOIN table_name2 ON table_name1.column_name...=table_name2.column_name **注释:**在某些数据库中, LEFT JOIN 称为 LEFT OUTER JOIN。..., sql_person.city, sql_order.order_no, sql_order.status FROM sql_person LEFT JOIN sql_order ON...where条件是在临时表生成好后,再对临时表进行过滤的条件 where 条件加上,已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉 过滤条件放在 where后面: 是先连接然生成临时查询结果

    1K10

    mysql left join、right join、inner join用法分析

    四种联接 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join...(“A LEFT JOIN B ON 条件表达式”中的ON)用来决定如何从 B 表中检索数据行。...如果 B 表中没有任何一行数据匹配 ON 的条件,将会额外生成一行所有列为 NULL 的数据,在匹配阶段 WHERE 子句的条件都不会被使用。仅在匹配阶段完成以后,WHERE 子句条件才会被使用。...所以我们要注意:在使用Left (right) join的时候,一定要在先给出尽可能的匹配满足条件,减少Where的执行。...b.id=2;先做left join 再过滤, WHERE 条件查询发生在匹配阶段之后

    3K70

    left join 的 on 条件失效了?查出了不符合条件的数据?

    一、背景 最近发现很多人对 left join 的 on 条件的作用有误解,导致出现 Bug。 由于很多人都不太注意这问题,很容易造成故障。...三、背景知识 3.1 left join left join 是一种连接操作,它会返回左表中的所有行,以及右表中与左表匹配的行。如果右表中没有匹配的行,那么右表中的列将显示为null。...left join 也称为 left outer join。...讲解一下 SELECT * FROM student s left join user u on s.number = u.number ;和 SELECT * FROM student s left...join user u on s.number = u.number and s.level =‘vip’;的区别 五、解决方案 通过本文的学习我们可知, left join 中的 on 仅作用于判断是否匹配的判断

    1.3K20

    sql之left join、right join、inner join的区别

    left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录  right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接)...join sql语句如下:  select * from A left join B  on A.aID = B.bID 结果如下: aID     aNum     bID     bName 1     ...join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的....换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID)....并不以谁为基础,它只显示符合条件的记录. -------------------------------------------- 注:  LEFT JOIN操作用于在任何的 FROM 子句中,组合来源表的记录

    1.6K30

    sql连接查询(inner join、full joinleft join、 right join

    sql连接查询(inner join、full joinleft join、 right join) 一、内连接(inner join) 首先我这有两张表 1、顾客信息表customer ?...内连接的过程: 将符合条件的记录组合起来,放在一张新表里面 二、左连接(left join) 需求:查询哪个顾客(customer_name)在哪一天(create_time)消费了多少钱(money)...sql语句: select c.customer_name, o.create_time, o.money from customer c left join orders o on c.id =...、 从结果可以很清楚的明白右连接的含义: 将右边表的所有记录拿出来,不管右边表有没有对应的记录 四、全连接(full join) 这里要注意的是mysql本身并不支持全连接查询,但是我们可以使用UNION...关键字实现 sql语句: select c.customer_name, o.create_time, o.money from customer c left join orders o on c.id

    4.3K40
    领券