SQL多表查询

来源:互联网 发布:淘宝开店名称叫什么好 编辑:程序博客网 时间:2024/05/16 06:14

 

情况一:

我们现在两个表,一个学生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吧。

 

 

原创粉丝点击