expore_inload 2019-04-05 13:39 采纳率: 0%
浏览 390
已采纳

sql代码解释(关于自联结,where子句)

在Access2016数据库中的一张表,有三个字段,字段以及相应的数据如下:

p   n   i
1   a   1
2   b   2
2   c   3
3   d   4
3   e   5
4   f   6
字段名分别是p,n,i,表名记为aa。字段p和i的内容均为数字,n的内容为文本。

图片说明

在查询的SQL视图中输入如下语句:

SELECT p
FROM aa AS t1
WHERE p in (select p from aa t2 where t1.n < t2.n);

点击运行后,得到如下的结果:

查询结果

目前不太懂这句sql语句的含义,为什么运行之后会得到这样的结果,希望懂行的人能帮忙解释下。

这句话涉及自联结,难点在于where子句,本来想先看select子句,奈何t1表是在select主句中用到,所以比较难推理。

  • 写回答

1条回答 默认 最新

  • 当否 2019-04-05 15:13
    关注

    重点在于sql语句的执行顺序,首先被执行的是from关键字,将你要操作的表建立成虚拟表t1,t2,接着是where,子句的where是在比较t1t2的n字段,这里的比较是通过p字段来识别的,结果集返回n字段为b和d这两行数据,然后最后主句的where条件筛选了这个临时的结果集的p字段展示。也就是说这个句子是在找n字段更小的记录。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?