【新人求解答】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.年龄

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

你的第一句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.字段

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

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

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

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

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

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

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

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.年龄