SQL实现关系代数运算
并-交-差的处理
不带ALL表示去重, 而带有ALL表示保留冗余
运算 | SQL语法 |
---|---|
并运算 | UNION [ALL] |
交运算 | INTERSECT [ALL] (mysql中未实现 ) |
差运算 | EXCEPT [ALL] (mysql中未实现 ) |
#学过002号课程的同学 或 学过003号课程的同学
select Sno
from sct.sc
where Cno = '002'
union
select Sno
from sct.sc
where Cno = '003';
#已知两个表Customers(CID, Cname, City, Discnt)和Agents(AID, Aname, City, Percent)
#求客户所在的或者代理商所在的城市
select City
from Customers
union
select City
from Agents;
#既学过001号课程, 又学过002号课程的学生学号
select Sno
from sc
where Cno = '001'
intersect #mysql中并没有实现交运算和差运算
select Sno
from sc
where Cno = '002';
交运算的等价方法
- 取别名 + 自联结
#既学过001号课程, 又学过002号课程的学生学号
select Sno
from sc
where Cno = '001'
intersect #mysql中并没有实现交运算和差运算
select Sno
from sc
where Cno = '002';
#既学过001号课程, 又学过002号课程的学生学号
select Sno
from sc x, sc y
where x.Sno = y.Sno
and x.Cno = '001'
and y.Cno = '002'