可以使用“ LIKE”和“ NOT LIKE”过滤数据的非嵌套查询吗?

时间:2018-06-19 17:16:18

标签: sql

在数据库表A的汇总中有一些以相同前缀开头的数据,例如fooABC和foobooABC。我们的应用程序有多个配置文件,每个配置文件都有一个数据库。这些数据的其余部分在一个数据库之间会有所不同。我有一个查询,用于选择以“ foo”开头而不是“ fooboo”开头的数据。

select * 
from (select * 
      from A a 
      where a.field like 'foo%') a1 
where a1.field not like 'fooboo%' 

尽管有效,但我想知道这是否是更好的方法,例如是否进行非嵌套查询。

2 个答案:

答案 0 :(得分:1)

只需使用AND,以便行匹配两个条件

  select * 
  from A a 
  where a.field like 'foo%'
    and a.field not like 'fooboo%'

答案 1 :(得分:1)

您认为如果首先选择foo%,则仅在这些记录上检查fooboo%的条件,而不必在整个表上检查。但这更好还是不好?我建议您让DBMS决定最好的方法,并简单地询问您要查看哪些数据。

这就是SQL的意义:告诉DBMS您想看什么,而不是如何做。

select * 
from A 
where field like 'foo%'
and field not like 'fooboo%';

因此,您的查询非常易于理解(易于维护)。无论如何,一个好的DBMS可能会为两个查询提出相同的执行计划。