今天碰到一个Oracle不等于的问题,最后搜索了一下,发现下面资料,拿来跟大家分享一下
关于Oracle中的不等于号:
在Oracle中,
<>
!=
~=
^=
都是不等于号的意思。都可以使用。
但是奇怪是的, 我想拿出price不是180000的商品时:(price是Number类型的)
SELECT id, name FROM product where price<> 180000;
执行这个语句时,priceis null 的记录不出来。也就是拿不到price是null的商品。必须使用:
SELECT id, name FROM product where price<> 180000 or price is null;才行。
字符串的字段存在同样的问题。
记住:null只能通过is null或者is not null来判断,其它操作符与null操作都是false。
======================================================================================================
测试:select * from test where name<>'xn'。只能查出name非空的记录。去掉name<>'xn'就可以了。这种写法有问题。
然后用了instr(name,'xn')=0 来判断,如果name非空的话,判断还是有效的。如果name为空,这个判断又出问题了。不得已只得采取instr(concat(name,'xx'),'xn') = 0来判断,因为就算name为空,当和'xx'连接后,也会不为空的。
所以最后的sql语句为:
select * from test where instr(concat(name,'xx'),'xn') = 0 来查询name字段不等于'xn'的记录。
或者可以用 select * from test where nvl(name,'xx')<>'xn' 来查询name字段不等于'xn'的记录。
在Oracle中,
<>
!=
~=
^=
都是不等于号的意思。都可以使用。
但是奇怪是的, 我想拿出price不是180000的商品时:(price是Number类型的)
SELECT id, name FROM product where price<> 180000;
执行这个语句时,priceis null 的记录不出来。也就是拿不到price是null的商品。必须使用:
SELECT id, name FROM product where price<> 180000 or price is null;才行。
字符串的字段存在同样的问题。
记住:null只能通过is null或者is not null来判断,其它操作符与null操作都是false。
======================================================================================================
测试:select * from test where name<>'xn'。只能查出name非空的记录。去掉name<>'xn'就可以了。这种写法有问题。
然后用了instr(name,'xn')=0 来判断,如果name非空的话,判断还是有效的。如果name为空,这个判断又出问题了。不得已只得采取instr(concat(name,'xx'),'xn') = 0来判断,因为就算name为空,当和'xx'连接后,也会不为空的。
所以最后的sql语句为:
select * from test where instr(concat(name,'xx'),'xn') = 0 来查询name字段不等于'xn'的记录。
或者可以用 select * from test where nvl(name,'xx')<>'xn' 来查询name字段不等于'xn'的记录。
相关推荐
在Oracle数据库中,不等于号(Not Equal To)有多种表达方式,包括 `<>`, `!=`, `~=` 和 `^=`。虽然这些符号在大多数情况下可以互换使用,但它们在处理`NULL`值时可能会产生不同的结果,这是本文讨论的重点。 在...
除了上述通配符之外,Oracle SQL还支持一些其他符号,这些符号虽然不直接作为通配符使用,但在SQL查询中同样发挥着重要作用。 ##### 1. `=`、`>`、`、`、`>=`、`<>` - **含义**:比较运算符,用于比较两个值之间的...
Oracle的PL/SQL是一种强大的编程语言,用于在Oracle数据库中执行复杂的数据库操作。它结合了SQL的查询功能和过程性编程语言的控制结构,使得数据库管理和应用开发更为灵活高效。SQL*Plus是Oracle提供的一种命令行...
这是因为NULL值在SQL中具有特殊的意义,不能使用等于(=)或不等于()运算符来比较。 2. Oracle的系统预定义角色: 在Oracle中,系统预定义角色如DBA、RESOURCE等提供了对数据库进行管理或特定操作的权限。DBA角色...
- 对于不等于操作`<>`,Oracle可能不会使用索引,除非索引是反向键索引。在大多数情况下,使用等值比较(`=`)更有利于索引的使用。 6. **IN和NOT IN子句**: - 当`IN`或`NOT IN`子句中的列表非常大时,全表扫描...
ROWNUM只能使用小于等于(<, )符号,不能使用大于等于(>, >=),并且如果使用等号(=),只能等于1。另外,ROWNUM可以与子查询结合,通过ORDER BY排序后,利用ROWNUM创建顺序号,如:`SELECT * FROM (SELECT a.*, ...
例如,如果你想要知道Oracle数据库的主版本号,可以在SQL*Plus环境中执行以下命令: ```sql SET SERVEROUT ON EXEC DBMS_OUTPUT.PUT_LINE (DBMS_DB_VERSION.VERSION); ``` 这将直接输出数据库的主版本号,如10代表...
Oracle.ManagedDataAccess.Core.2.12.0-beta2 是Oracle公司为.NET Core平台提供的官方数据库访问驱动,主要用于在.NET Core应用程序中连接并操作Oracle数据库。这个版本号表明它是2.12版本的第二个β(beta)测试版...
数据库最大连接数修改与 Oracle ...2. shutdown immediate:立即关闭数据库,数据库并不立即关闭,而是在 Oracle 执行某些清除工作后才关闭。 3. shutdown abort:直接关闭数据库,正在访问数据库的会话会被突然终止。
- `<>`表示不等于,`between`用于指定范围,`is null`或`is not null`检查字段是否为空值。 - `like`用于模式匹配,`_`代表任意单个字符,`%`代表零个或多个字符。 7. **ORDER BY子句**: - `order by`用于排序...
4. **避免使用星号(*)**:在`SELECT`语句中使用`*`意味着获取所有列,Oracle需要查询数据字典来获取列名,这会消耗额外的时间。指定所需的列名可提高查询效率。 5. **优化WHERE子句**:应根据索引顺序和范围大小...
4. 修改表名的命令:在Oracle中,使用`RENAME`语句可以直接改表名,但题目中提供的其他选项并不正确。`ALTER TABLE RENAME`实际上是`ALTER TABLE`的一部分,而`ALTER TABLE MOVE`用于更改表的存储属性,`ALTER TABLE...
在AWR报告中,包括了数据库实例的多种信息,如数据库名称、数据库ID、实例标识号、版本号、是否为RAC架构、主机名等。同时,报告还会展示快照的标识、快照时间、活动会话数、每个会话的游标数、数据库耗时(DBTime)...
- 在Oracle中,撇号用于表示字符串中的特殊字符,如两个相邻的单引号表示一个实际的撇号。 - **示例**: - `SELECT * FROM suppliers WHERE supplier_name LIKE '%''%'`:此查询将返回所有供应商名称中包含撇号的...
Oracle中的外连接是数据库查询中的一种重要连接类型,它允许用户获取所有来自一个表的数据,即使这些数据在另一个表中没有匹配的记录。这与内连接不同,内连接只返回两个表中有匹配记录的结果。 首先,我们要理解外...
包括算术运算(加减乘除)、比较运算(等于、不等于、大于、小于等)、逻辑运算(AND、OR、NOT)等,用于构建复杂的查询条件。 14.6 Oracle中的特殊判式: 如`IFNULL`、`NVL`、`COALESCE`等,用于处理NULL值。 ...