1.
Bus表
-------
reg_no|
tno |
cno |
-------Cleaner表
---------
cno |
cname |
---------
下面这个是合并自身表格的代码,表示列出Betty(可能是个组长)负责的每辆车所对应的清洁工(cleaner)的名字:select c2.cname
from bus b1, bus b2, cleaner c1, cleaner c2
where c1.cname='Betty'
and b1.cno=c1.cno --对于合并自身表格,能不能解释一下这几行的意思,不大懂
and b1.tno=b2.tno --对于合并自身表格,能不能解释一下这几行的意思,不大懂
and b2.cno=c2.cno --对于合并自身表格,能不能解释一下这几行的意思,不大懂2.这个是4个表的合并,分别是bustype,bus,cleaner和depot四个表,我写了下面的代码,但是报错了,不知道出什么问题,请高手帮忙看看,谢谢!!
Select cl.cno,cl.cname,de.dname,b.reg_no
From cleaner cl,depot de,bus b
Where bustype.cno=cl.cno
And bustype.dno=de.dno
And bustype.reg_no=b.reg_no
Bus表
-------
reg_no|
tno |
cno |
-------Cleaner表
---------
cno |
cname |
---------
下面这个是合并自身表格的代码,表示列出Betty(可能是个组长)负责的每辆车所对应的清洁工(cleaner)的名字:select c2.cname
from bus b1, bus b2, cleaner c1, cleaner c2
where c1.cname='Betty'
and b1.cno=c1.cno --对于合并自身表格,能不能解释一下这几行的意思,不大懂
and b1.tno=b2.tno --对于合并自身表格,能不能解释一下这几行的意思,不大懂
and b2.cno=c2.cno --对于合并自身表格,能不能解释一下这几行的意思,不大懂2.这个是4个表的合并,分别是bustype,bus,cleaner和depot四个表,我写了下面的代码,但是报错了,不知道出什么问题,请高手帮忙看看,谢谢!!
Select cl.cno,cl.cname,de.dname,b.reg_no
From cleaner cl,depot de,bus b
Where bustype.cno=cl.cno
And bustype.dno=de.dno
And bustype.reg_no=b.reg_no
select c2.cname
from bus b1, bus b2, cleaner c1, cleaner c2
where c1.cname='Betty'
and b1.cno=c1.cno --对于合并自身表格,能不能解释一下这几行的意思,不大懂
and b1.tno=b2.tno --对于合并自身表格,能不能解释一下这几行的意思,不大懂
and b2.cno=c2.cno --对于合并自身表格,能不能解释一下这几行的意思,不大懂
-----------
b1是第一个bus表的别名
b2是第二个bus表的别名
c1是第一个cleaner表的别名
c2是第一个cleaner表的别名b1.cno=c1.cno 就是第一个bus表的cno等于第一个cleaner表的cno
b1.tno=b2.tno 就是第一个bus表的tno等于第二个bus表的tno
b2.con=c2.cno 就是第二个bus表的cno等于第二个cleaner表的cno2:
Select cl.cno,cl.cname,de.dname,b.reg_no
From cleaner cl,depot de,bus b
Where bustype.cno=cl.cno
And bustype.dno=de.dno
And bustype.reg_no=b.reg_no
--------
From 中没有bustype表, 在where中为何有bustype表名呢
Select cl.cno,cl.cname,de.dname,b.reg_no
From cleaner cl,depot de,bus b
Where bustype.cno=cl.cno
And bustype.dno=de.dno
And bustype.reg_no=b.reg_nobustype从哪儿来的啊?
Select cl.cno,cl.cname,de.dname,b.reg_no
From cleaner cl,depot de,bus b,bustype bt
Where bt.cno=cl.cno
And bt.dno=de.dno
And bt.reg_no=b.reg_no这样应该就没问题了吧。
你会得到一个笛卡尔积.后面的
and b1.cno=c1.cno
and b2.cno=c2.cno
就是在这个笛卡尔积里面筛选出符合and b1.cno=c1.cno
and b2.cno=c2.cno 这个条件的
比如create table a(a1 int ,a2 varchar(20))
insert a
select 1,'a'
union
select 2,'b'create table c(a1 int ,a2 varchar(20))
insert c
select 1,'a'
union
select 2,'b'
select * from a ,c 得到
1(a.a1) a(a.a2) 1(b.a1) a(b.a2)
2 b 1 a
1 a 2 b
2 b 2 b再看select * from a,c where a.a1=b.a1
在上面的结果中选择出a.a1=b.a1的记录就有
第1行和第四行所以