【标题问题】
“7月登录表”里记录了7月登录的用户信息。“8月登录表”里记录了是8月登录的用户信息。
问题1:7月、8月两个月登录人数共有几
问题2:7月未登录但8月登录的人数有几
【问题1解题思绪】
查询7月登录和8月登录人数的总和
1.7月和8月两个月登录的用户数据别离在“7月登录表”和”8月登录表”中,涉及到多个表,所以要用到多表联合
2.能够通过“表的加法”(union)先将两张表合在一路,那里两张表相加时需要去掉反复值,所以要用“union”而不克不及用“union all”
1 select 用户ID 2 from 7月份登录表 3 union 4 select 用户ID 5 from 8月份登录表;3.通过汇总函数“count()”对合并后的表停止统计,把上一步的查询成果做为那一步的子查询
1 select count(distinct 用户ID) 2 from ( 3 select 用户ID 4 from 7月份登录表 5 union 6 select 用户ID 7 from 8月份登录表 8 ) as a;查询成果
【本题考点】
1.用“union” 或 “union all” 停止表的加法运算。若是需要保留两个表中反复呈现的数据行,需要利用“union all”
2.SQL子查询的应用。子查询就是一次性的视图,还记得子查询的应用场景吗?我们对照下面的图来复习一下
3.本题要出格留意,因为做了两个表的加法,产生了一个新表,MySQL要求每一个新产生的表都要有一个别号(as 别号),不然就会报错(每一个新产生出来的表都必需有一个本身的别号)
【问题2解题思绪】
查询7月未登录,同时8月登录的人数
1.那道标题问题的关键在于要明白7月未登录,同时8月登录的人在哪里。我们能够画一个文氏图明晰地把那部门数据表示出来:
右边圆圈代表“7月登录的人”右边圆圈代表“8月登录的人”,通过图形能清晰地看出来暗影部门就是我们要找的“7月未登录,同时8月登录的人”
2.若何把暗影部门的数据找出来呢?我们先要用SQL把右边表的数据取出来,然后再去掉右边和右边共有部门的数据,那时我们想到通过“表的联合”,能够通过“右联合”,完成上面的操做
1 select 2 from 7月份登录表 as a 3 right join 8月份登录表 as b;3.留意那里我们找的是下图中框出部门的数据,所以要加一个前提:
7月份登录表.用户ID is null
1 select 2 from 7月份登录表 as a 3 right join 8月份登录表 as b 4 on a.用户ID=b.用户ID 5 where a.用户ID is null;4.最初再用汇总函数统计去重后的用户人数
1 select count(distinct 用户ID) as 人数 2 from 7月份登录表 as a 3 right join 8月份登录表 as b 4 on a.用户ID=b.用户ID 5 where a.用户ID is null;查询成果
【本题考点】
本题用到了右联合的应用,几种联合和它们的用法还记得吗,我们来复习一下
1.什么是联合
联合是表与表之间的联系关系关系
2.内联合、左联合、右联合和全联合别离对照下图复习一下吧
当现实营业中想要生成固定行数的表单或者出格申明了要某一张内外的全数数据时,使左联合或者右联合。
其他情况下,利用内联合,获取两个表的公共部门。
保举:从零学会SQL?