表连接这一块必须另建一个文档哇,之前弄的晕乎乎的
1) 唯医网、宝宝树和迅雷的招聘职位有哪些【两种】
两个表通过companyId产生联系,先找出company表中这三个企业的companyId,再在岗位招聘表中查询这几个公司的招聘情况
法1:子查询
select * from data.dataanalyst
where companyId in
(select idcompany from data.company
where companyShortName in ('唯医网','宝宝树','迅雷'))
结果

但是上述查询只显示了dataanalyst表中的内容,未显示company的情况
法2:
select * from data.dataanalyst as d
inner join data.company as c
on d.companyId = c.idcompany
where c.companyShortName in ('唯医网','宝宝树','迅雷');
结果


可见,查询结果已将两个表连接起来
2) 150-500人(或者以外)公司规模的岗位有多少?占比多少?【两种】
先查询出150-500人规模的公司,再计算相应的招聘数量,招聘总量,最后进行计算
法1:
select count(*) as n1,(select count(positionId) from data.dataanalyst) as n2,
count(*)/(select count(positionId) from data.dataanalyst) as prob
from data.dataanalyst
where companyId in
(select idcompany from data.company
where companySize = '150-500人')
结果

法2:
select count(t.idcompany) as n1,count(*) as n2,count(t.idcompany)/count(*)
as prob from data.dataanalyst as d
left join
(select * from data.company
where companySize = '150-500人') as t
on d.companyId = t.idcompany
结果

150-500以外的查询需将子查询【companySize = '150-500人'】修改为【companySize <> '150-500人'】
利用法2语句可计算150-500人以外规模企业的招聘总数
select count(*) from data.dataanalyst as d
left join
(select * from data.company
where companySize = '150-500人') as t
on d.companyId = t.idcompany
where t.idcompany is null
结果为3884
3) inner join:两个表完全匹配上的,两个表的交集
4) left join:左边主表完全输出,右边的表能匹配上就输出相应值,不能匹配上就输出null,right join与之类似
5) full join并集,不管A表或B表,拼凑在一起,拼不上的返回null,MySQL不支持full join
MySQL中有一个union(去掉重复值)和union all(保留重复值)
SELECT education FROM data.dataanalyst as da
UNION
SELECT companySize FROM data.company
where companySize <> "150-500人"
结果有点像R里的rbind

网友评论