SQL多表查询

情况一:

我们现在两个表,一个学生Student表,一个性别Gender表。Student : id name gender 。Gender :: key value

有如下值:

Student :

001xy 1

002xyy 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 :

001xy 1 0

002xy 1 0

003xh 00

CS

gender 0 女

gender1 男

gender2 其他

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吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值