2 yc3354 YC3354 于 2017.01.03 15:56 提问

【新人求解答】sql 自身连接问题

求年龄大于王波的学员姓名?
表格如下:

学生

学号 | 姓名 | 性别 | 年龄

9901 | 陈平 | 男 | 19

9902 | 王波 | 男 | 20

9903 | 张莉 | 女 | 21

教程示例代码是:

Select s1.姓名,s1.年龄,s1.性别 from 学生 s1, 学生 s2 where s1.姓名='王波' and s1.年龄<s2.年龄

但是显示结果是:

| 姓名 | 年龄 | 性别

1 | 王波 | 20 | 男

修改为
Select s1.姓名,s1.年龄,s1.性别 from 学生 s1, 学生 s2 where s2.姓名='王波' and s1.年龄>s2.年龄

能够显示正确结果,这是什么原因?求解释!!!

7个回答

u012976158
u012976158   2017.01.03 17:23
已采纳

你的第一句sql:Select s1.姓名,s1.年龄,s1.性别 from 学生 s1, 学生 s2 where s1.姓名='王波' and s1.年龄 至于你的第二句sql:Select s1.姓名,s1.年龄,s1.性别 from 学生 s1, 学生 s2 where s2.姓名='王波' and s1.年龄>s2.年龄 是正确的

你主要的问题是两张表你没搞清楚 拿哪张表里面的'王波',如果你拿的是第一张表里面的'王波'作比较,那么你比较的就是第二张表,那么你查询的字段应该为第二张表中的字段,所以这也就是你第一句sql的问题。你的第二句sql 相当于前面一段话反过来,也就是拿第二张表中的'王波'作比较,查的是第一张表中符合条件的字段,所以select 后面应该是第一张表s1.字段

qiufengwuqing123
qiufengwuqing123   2017.01.03 18:00

Select s1.姓名,s1.年龄,s1.性别 from 学生 s1, 学生 s2 where s1.姓名='王波' and s1.年龄<s2.年龄
这条取的是s1的值,而s1.姓名='王波'限制了取这条记录的相关数据,要正确的话换为
Select s2.姓名,s2.年龄,s2.性别 from 学生 s1, 学生 s2 where s1.姓名='王波' and s1.年龄<s2.年龄

xinxin_0
xinxin_0   2017.01.03 16:17

from 学生 s1, 学生 s2?你的写法有问题吧

Cyan1009
Cyan1009   2017.01.03 16:22

s1.姓名='王波' and s1.年龄s2.年龄 表示: ?>20 貌似都应该是张莉 21

YC3354
YC3354 跟着教程做,但是结果是错误的,改成第二条才显示正确结果!!
11 个月之前 回复
qq_20757171
qq_20757171   2017.01.03 16:39

因为你的第一个例子取的是s1的数据,取s2的数据就对了

YC3354
YC3354 我知道下面的是对的,我是想知道这是为什么!!!
11 个月之前 回复
jjl123jjl123
jjl123jjl123   2017.01.03 16:53

我觉得用子查询写好理解点

  select s2.* from 学生 s2 where s2.age > (select s1.age from 学生 s1 where s1.姓名 = '王波')

如果是s1.*显示的就是 姓名 = '王波' 这条数据

YC3354
YC3354 我知道这样写好理解,我只是想弄清楚 为什么!
11 个月之前 回复
sinzen
sinzen   2017.01.03 17:02

select 学号 ,姓名 ,性别 , 年龄 from 学生 where 年龄 > ( select 年龄 from 学生 where 姓名 = ‘王波’ )

YC3354
YC3354 我知道,谢谢!
11 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片