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