这两个SQL查询之间有什么区别?
select b from r where a<10 or a>=10;
和:
select b from R;
这是专门针对Oracle SQL的要求,但应通知用户mysql和MSSQL。 我知道事实有所不同。
答案 0 :(得分:8)
查询:
select b from r where a<10 or a>=10;
a
为NULL
的行将不会返回(因为NULL < 10
或NULL >= 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