SQL:列<>'*.*'是什么意思?

use*_*578 2 sql oracle

我有一个现有的代码,我在下面找到了表上的条件.

SELECT * FROM MYTABLE WHERE MYCOLUMN <> '*.*';
Run Code Online (Sandbox Code Playgroud)

有没有之间的差异MYCOLUMN <> '*.*'MYCOLUMN <> '*';

什么MYCOLUMN <> '*.*'意思?

Ale*_*ole 5

有没有之间的差异MYCOLUMN <> '*.*'MYCOLUMN <> '*'

是的,您正在将不同的文本文字与不等式比较条件进行比较.

*没有任何特殊含义.具体来说,它不是通配符.从模式看起来,您的列可能包含文件名,并且您稍后在操作系统级别对值进行一些处理,它们可能是通配符.但实际的查询并不是这样.

<>是相同的!=,因此您正在寻找列的整个内容不是'*.*'第一种情况下的文字字符串的行,或者列的整个内容不是'*'第二种情况下的文字字符串的行.没有值可以匹配这两个条件,除了null.(并且null也不匹配 - 因为它不等于不等于任何东西;但是比较的结果是'未知',因此它不包括在结果集中).

作为演示:

create table t42(id number, mycolumn varchar2(20));
insert into t42 (id, mycolumn) values (1, '*');
insert into t42 (id, mycolumn) values (2, 'The*is embedded');
insert into t42 (id, mycolumn) values (3, 'The * is embedded');
insert into t42 (id, mycolumn) values (4, '*.*');
insert into t42 (id, mycolumn) values (5, 'The*.*is embedded');
insert into t42 (id, mycolumn) values (6, 'The *.* is embedded');
insert into t42 (id, mycolumn) values (7, 'No asterisk');
insert into t42 (id, mycolumn) values (8, null);
Run Code Online (Sandbox Code Playgroud)

对于第一个条件,仅排除ID 3和8(3因为条件为真,8因为它是未知的):

select * from t42 where MYCOLUMN <> '*.*';

        ID MYCOLUMN            
---------- --------------------
         1 *                   
         2 The*is embedded     
         3 The * is embedded   
         5 The*.*is embedded   
         6 The *.* is embedded 
         7 No asterisk         

6 rows selected. 
Run Code Online (Sandbox Code Playgroud)

对于第二个条件,仅排除ID 1和8:

select * from t42 where MYCOLUMN <> '*';

        ID MYCOLUMN            
---------- --------------------
         2 The*is embedded     
         3 The * is embedded   
         4 *.*                 
         5 The*.*is embedded   
         6 The *.* is embedded 
         7 No asterisk         

6 rows selected. 
Run Code Online (Sandbox Code Playgroud)