练习题1-7-1 :改进“只使用union的比较”
在“比较表和表:检查集合相等性之基础篇”部分,我们学习了只使用了union的SQL语句。当时我们提到,在使用这条SQL语句之前需要事先查一下两张表的行数是否相等。实际上,我们稍微修改一下,就可以不需要判断行数也能直接执行。请考虑一下该如何修改
select
(
case
when count(*)=(select count(*) from tbl_A)
and count(*)=(select count(*) from tbl_B)
then '相等'
else '不相等'
end
) result
from(
select * from tbl_A
union
select * from tbl_B
) tmp;
练习题1-7-2 :精确关系除法运算
在“用差集实现关系除法运算”部分,我们学习了将除法还原成减法来运算的方法。请将这条SQL语句修改一下,实现“精确关系除法运算”(还记得“精确关系除法运算”的定义吗?)不过,这回我们要选择的是刚好拥有全部技术的员工,结果只有神崎一人
select dsitinct emp
from EmpSkills ES1
where not exists(
select skill
from Skills
except
select skill
from EmpSkills ES2
where ES1.emp=ES2.emp
)
and not exists(
select skill
from EmpSkills ES3
where ES1.emp=ES3.emp
except
select skill
from Skills
);
select emp
from EmpSkills ES1
where not exists(
select skill
from Skills
except
select skill
from EmpSKills ES2
where ES1.emp=ES2.emp
)
group by emp
having count(*)=(select count(*) from Skills);