子查询如何在MySQL中运行?

时间:2014-01-10 12:47:38

标签: mysql

我们熟悉常用语法:

select col1 from tab1 t1 where not exists(select col2 from tab2 t2 where t2.col2 > t1.col1)
select col1 from tab1 t1 where not exists(select col2 from tab2 t2 where t2.col2 < t1.col1)

现在让我们有一个名为标签的简单表:

    col
----------

     1
     2
     3
     4
     5
     6


----------

现在让我们查询:

select col from tab t1 where not exists(select col from tab t2 where t2.col < t1.col)

此查询结果为:1

select col from tab t1 where not exists(select col from tab t2 where t2.col > t1.col)

此查询结果为:6

所以,我想了解MySQL是如何做到这一点的?我对此缺乏理论知识。

1 个答案:

答案 0 :(得分:0)

查询中的

select col from tab t1 where not exists(select col from tab t2 where t2.col < t1.col)

select col from tab t1

选择所有条目,然后选择

中的子查询
where not exists(select col from tab t2 where t2.col < t1.col)

选择小于它想要与之匹配的当前条目的每个条目。因此对于第一个查询中的条目1,它没有条目,因为没有小于1的条目,那么

not exists()

启动,因为子查询没有结果,not exists为true,整个查询返回1。

不会返回任何其他值,因为对于任何其他值,您将在子查询中获得结果,从而使not exists()保留值false