这2个SQL查询之间有什么区别?

时间:2019-01-23 15:47:25

标签: sql oracle

这两个SQL查询之间有什么区别?

select b from r where a<10 or a>=10;

和:

select b from R;

这是专门针对Oracle SQL的要求,但应通知用户mysql和MSSQL。 我知道事实有所不同。

2 个答案:

答案 0 :(得分:8)

查询:

select b from r where a<10 or a>=10;

aNULL的行将不会返回(因为NULL < 10NULL >= 10都不为真)。

但是,

select b from R;

将返回所有行。


Oracle设置

CREATE TABLE r ( a INT, b INT );
INSERT INTO r VALUES ( 1,    1 );
INSERT INTO r VALUES ( 2,    2 );
INSERT INTO r VALUES ( NULL, 3 );

查询1

select b from r where a<10 or a>=10;

输出

|  B |
| -: |
|  1 |
|  2 |

查询2

select b from r;

输出

|  B |
| -: |
|  1 |
|  2 |
|  3 |

db <>提琴here

答案 1 :(得分:4)

差异是NULL个值。下面的示例将显示3个结果集。 NULL无法与><运算符进行比较。下面的示例假定您的表中使用普通的int值,而不是将字符串与int等混合。

DECLARE @table TABLE (ID INT)

INSERT INTO @table 
VALUES 
(1),
(3),
(4),
(54345),
(6),
(123),
(235235),
(NULL)

--shows all values
SELECT * 
FROM @table

--exclude null
SELECT * 
FROM @table
WHERE id < 10 
or id >=10

--shows all values
SELECT * 
FROM @table
WHERE id < 10 
or id >=10
or id IS NULL