SQL多表查询
情况一:
我们现在两个表,一个学生Student表,一个性别Gender表。Student : id name gender 。Gender :: key value
有如下值:
Student :
001 xy 1
002 xyy 1
003 小红 0
Gender
0 女
1 男
2 其他
那么我们先看一个表 Student,我要查找性别为男的学生
select id,name,gender from Student where gender = '1';
那我们多表查询,找到男学生,性别显示不再是0,1,2 而是汉字
select s.id,s.name,g,value
from Student s,Gender g
where s.gender = '1'
and g.key = s.gender (正确)// 两条记录
看到了吗?我们不仅要写s.gender = '1' 还要写g.key = s.gender。也就是不仅要判断值等于什么,而且要写出关联字段的相等关系。
select s.id,s.name,g,value
from Student s,Gender g
where s.gender = '1' (错误)// 2*3 = 6条记录 2个男学生*3个性别表记录(笛卡儿积)
select s.id,s.name,g,value
from Student s,Gender g
whereg.key = s.gender (错误)// 3条记录,3个学生,不分性别
情况二:
我们现在两个表,一个学生Student表,一个参数CS表。Student : id name gender , status。CS :: key value name
有如下值:
Student :
001 xy 1 0
002 xy 1 0
003 xh 0 0
CS
gender 0 女
gender 1 男
gender 2 其他
status 0 在校
status 1 离校
我现在要 取出姓名,性别,在校状态。
select s.name,xb.mc,zt.mc
from Student s,
(select key value name from CS where key = 'gender') xb,
(select key value name from CS where key = 'status') zt
where s.gender = xb.value
and s.status = zt.value;
这就不能向情况一中一样简单的两表关联了。你不可能CS.key又等于gender又等于status吧。
最后更新:2017-04-02 22:16:26