关于sql除运算的一点理解
之前一直不能准确理解除运算,试了半天终于明白过来,以下将以一个例子,来说说 我的理解。
先建立两个表,分别是“球队”和“比赛”:
create table 球队
(
球队名 varchar(20),
成立时间 date,
主场 varchar(20),
人数 int,
);
create table 比赛
(
记录编号 int not null,
队名 varchar(20),
比赛编号 int,
场地编号 int,
);
然后插入了四条数据:
insert into 比赛 values(1,'厂州恒太',1,1);
insert into 比赛 values(2,'山鲁东能',1,1);
insert into 比赛 values(3,'下海下港',2,3);
insert into 比赛 values(4,'山鲁东能',2,3);
假设我们要求出所有比赛(两场)都参加了的球队,可以用以下sql语句完成(除法):
select 球队名 from 球队 A where not exists
(
select 比赛编号 from 比赛 B where not exists
(
select * from 比赛 C where C.队名=A.球队名 and C.比赛编号=B.比赛编号
)
);
这里,我们可以理解为两个“for循环”,先循环球队名,再循环比赛编号,由于not exists的缘故,我们执行二重循环最里面的select语句。只要所有都被搜索到,那么可以这么理解:
但若是有一个没有被搜索到,则会是以下过程: