比较运算符
= <=> <> != < <= > >=
# 字符串存在隐式转换。如果转换成数字(数值)不成功,则看做0
# 字符串存在隐式转换。如果转换成数字(数值)不成功,则看做0
# 为什么 1 = 'a' 输出 0 ? 0 = 'a' 输出 1?
# 解释:因为 字符串 'a' 无法转换成数字,则看做是 0,那么 0 = 'a' 即 0 = '0' 成立输出 1
select 1 = 2,1 != 2 ,1 = '1',1 = 'a',0 = 'a'
FROM dual;
# 两边都是字符串的话,则按照ANSI的比较规则进行比较
# 两边都是字符串的话,则按照ANSI的比较规则进行比较
select 'a' = 'a','ab' = 'ab','a' = 'b'
from dual;
# 只要有 NULL 参与判断,结果就为 NULL
# 只要有 NULL 参与判断,结果就为 NULL
select 1 = NULL,NULL = NULL , null = null
from dual;
注意:
1、首先需要注意的是有两条数据 列 commission_pct 的值为空;
2、由于 【只要有 NULL 参与判断,结果就为 NULL】,所以无匹配结果
3、条件改为 commission_pct is null 即可
安全等于 <=>
安全等于运算符(<=>) 与 等于(=)运算符的作用是相似的,唯一的区别 是 '<=>' 可以对 NULL 进行判断。在两个操作数均为 NULL 时,其返回值为 1,而不为 NULL;当一个操作数为 NULL 时,其返回值为 0,而不为 NULL。
练习:查询表中 commission_pct 为空的数据
select *
from employees
where commission_pct <=> NULL;
select *
from employees
where ISNULL(commission_pct);
# LEAST() \ GREATEST() 【最小 \ 最大 】
-- 输出 a,d
-- 按照字母比较规则 a、b、c、d...,a最小、z 最大
select LEAST('a','b','c','d'),GREATEST('a','b','c','d')
FROM dual;
-- 输出最小的数 2
select LEAST(2,6)
FROM dual;
between 条件1 and 条件2 (查询条件1 和 条件2 范围内的数据,包含边界。)
select *
from employees
where salary between 8000 and 9000;
select *
from employees
where salary >= 8000 && salary<=9000;
#工资不在 8000 到 9000的员工
select *
from employees
where salary not between 8000 and 9000;
select *
from employees
where salary < 8000 or salary > 9000;
IN() \ NOT IN() 【包含\不包含】
LIKE '%a%' 模糊查询
% : 代表不确定个数的字符
_ 代表一个不确定的字符
# 查询第二个字符为 'M' 的员工
select *
from employees
where last_name like '_M%';