当前位置: 首页 > news >正文

做特产的网站百度云搜索资源入口

做特产的网站,百度云搜索资源入口,四川成都今日最新疫情,西安企业网站建设多少钱目录 一、知识点 二、测试验证 三、引申 一、知识点 left join中关于where和on条件的知识点: 多表left join 是会生成一张临时表。on后面: 一般是对left join 的右表进行条件过滤,会返回左表中的所有行,而右表中没有匹配上的数…

目录

一、知识点

二、测试验证

三、引申


一、知识点

         left join中关于where和on条件的知识点:

  • 多表left join 是会生成一张临时表。
  • on后面: 一般是对left join 的右表进行条件过滤,会返回左表中的所有行,而右表中没有匹配上的数据直接补为null。
  • on后面:如果存在对左表的筛选条件,无论条件真假,仍返回左表中的所有行,只是会影响右表的匹配值。即:on中针对左表的限制条件只会影响右表的匹配内容,并不影响返回的左表行数。
  • where后面:是对两表连接后的数据进行筛选,一般是针对左表的筛选条件。

   例如下面的sql:关联表(右表)的筛选条件如果放置在on后面,则下面sql的执行顺序是:B先按照条件进行过滤,再与A表关联; 

#主表:A; 关联表:B  关联条件:A.id = B.id  筛选条件:B.id >1
A left join B on A.id = B.id and B.id >1;

    筛选条件如果放置在where后面,则下面sql的执行顺序是:A和B先关联,基于生成的临时表再进行where条件过滤。

#主表:A; 关联表:B  关联条件:A.id = B.id  过滤条件
A left join B on A.id = B.id  where  A.id <> 1

二、测试验证

         创建t1 ,t2 两张表

create table if not exists test1( id int comment '用户id',name string comment '用户姓名');insert overwrite table test1
values (1,'a1'),(2,'a2'),(3,'a3'),(4,'a4');create table if not exists test2( id int comment '用户id',province string comment '用户所在省份');insert overwrite table test1
values (1,'hainan'),(2,'beijing'),(5,'sichuan'),(6,'chongqing');
测试1:返回左表所有行,右表符合on条件可匹配上,不满足条件的直接补null
selecttest1.id,test1.name,test2.id,test2.province
from test1
left join test2on test1.id = test2.id;

测试2:on后面增加对右表的限制条件;结论:左表记录全部返回,右表筛选条件生效
selecttest1.id,test1.name,test2.id,test2.province
from test1
left join test2on test1.id = test2.id and test2.province = 'beijing';

测试3:where后面增加对右表的限制条件:where test2.province = 'beijing';
   结论:where后面是对最后的临时表进行记录筛选,行数可能会减少
selecttest1.id,test1.name,test2.id,test2.province
from test1
left join test2on test1.id = test2.id  where test2.province = 'beijing';

测试4:on中增加对左表的限制条件,不影响返回的行数,只影响右表的匹配内容。
selecttest1.id,test1.name,test2.id,test2.province
from test1
left join test2on test1.id = test2.id and test1.name = 'a1';
测试5:where后面增加对左表的限制条件:where test1.name ='a4' 结论:where条件是在最后临时表的基础上进行筛选,返回满足条件的行
selecttest1.id,test1.name,test2.id,test2.province
from test1
left join test2on test1.id = test2.idwhere test1.name = 'a4';

三、引申

        由上述的where和on之间的区别,引申出来的面试题: t1表和t2表的字段如图,计算以下两个sql的值。

--1.输出结果
select  t1.id,t2.id
from t1
left join t2 on t1.id = t2.id and t2.id <>2;--2.输出结果
select  t1.id,t2.id
from t1
left join t2 on t1.id = t2.id 
where t2.id <>2;

解析:

(1)on后面:跟着的是对右表的限制条件  t2.id <>2;

          结论:左表记录全部返回,右表筛选条件生效

  
with t1 as (select 1 as id union allselect 2 as id union allselect 3 as id
),t2 as (select 1 as id union allselect 2 as id union allselect 2 as id)select  t1.id,t2.id
from t1
left join t2 on t1.id = t2.id and t2.id <>2;

输出结果为:

(2)where后面:跟着的是对右表的限制条件  where t2.id <>2;

          结论:最后临时表的基础上进行筛选,最终返回符合where过滤条件的行;

          ps: sql中比较的结果一般有:true, false, null; 而where条件只会过滤出true的结果

with t1 as (select 1 as id union allselect 2 as id union allselect 3 as id
),t2 as (select 1 as id union allselect 2 as id union allselect 2 as id)select  t1.id,t2.id
from t1
left join t2 on t1.id = t2.id
where t2.id <>2;

输出结果为:

补充:

select (1>2)  --> FALSE
select (1<2)  --> true
select (1<null) --> null--所以,sql比较的结果会有三种:false, true, null
http://www.15wanjia.com/news/54095.html

相关文章:

  • 二级学院网站建设报告网站怎么优化推广
  • 重庆奉节网站建设公司推荐培训机构退费纠纷一般怎么解决
  • 青县有做网站的吗网络广告文案案例
  • 贸易公司做推广的网站营销软文300字范文
  • 台州手机网站开发贵港seo关键词整站优化
  • 搭建一个平台需要什么厦门网站综合优化贵吗
  • 微信公众号免费模板网站灰色行业推广渠道
  • 合肥网络推广平台上海关键词优化的技巧
  • 常州云之家网站建设公司怎么样怎样做app推广
  • 双语网站建设费用北京谷歌seo公司
  • 网站做301好不好2023年火爆的新闻
  • 衡水做淘宝网站建设nba最新赛程
  • 武汉网站建设多少钱淮北网站建设
  • 网站主题风格有哪些网页制作培训教程
  • 做图的软件网站广州市新闻发布
  • 学做网站哪里学怎样做网络销售平台
  • 做网站推广被骗seo服务 文库
  • 简述企业网站建设的目的无锡seo优化公司
  • wordpress 如何置顶文章免费seo推广计划
  • 建站网络建立科技开发百度人气榜
  • 网站开发和嵌入式开发哪个软文代写平台有哪些
  • 网站建设的工作描述营业推广是什么意思
  • 安徽省住建厅网站官网seo怎么提升关键词的排名
  • 建设一个用教育网站长沙建站seo公司
  • wordpress构建哈尔滨seo网络推广
  • 一个网站一个月发多少外链比较合适有没有购买链接
  • 解析网站怎么做网站排名优化培训哪家好
  • 7天精通网站建设实录简介242搜索关键词网站
  • 酒店网站搜索引擎优化方案网络营销师证书
  • 夺宝网站建设网页版登录入口