2.2 非符号类型的比较运算符
2.2.1 IS NULL \ IS NOT NULL \ ISNULL
空运算符( IS NULL \ ISNULL )判断一个值是否为NULL,如果为NULL则返回1,否则返回0。
非空运算符(IS NOT NULL)判断一个值是否不为NULL,如果不为NULL则返回1,否则返回0。
查询表中 commission_pct 为 null 的数据有哪些:
SELECT last_name, salary, commission_pct FROM employees WHERE commission_pct IS NULL; # 或 SELECT last_name, salary, commission_pct FROM employees # ISNULL 是一个判断值是否为空的函数 # 值为空返回1,反之返回0 WHERE ISNULL(commission_pct);
查询表中commission_pct不为null的数据有哪些:
SELECT last_name, salary, commission_pct FROM employees WHERE commission_pct IS NOT NULL; # 或 SELECT last_name, salary, commission_pct FROM employees # 先找出 commission_pct 为 null # 然后对结果进行取反 WHERE NOT commission_pct <=> NULL;
2.2.2 LEAST() \ GREATEST()
- 最小值运算符 LEAST()
- 语法格式为:
LEAST(值1,值2,...,值n)
。 - 其中,“值n” 表示参数列表中有n个值。
- 在有两个或多个参数的情况下,返回最小值。
- 假如任意一个自变量为NULL,则LEAST()的返回值为NULL。
- 最大值运算符 GREATEST()
- 语法格式为:
GREATEST(值1,值2,...,值n)
。 - 其中,n表示参数列表中有n个值。
- 当有两个或多个参数时,返回值为最大值。
- 假如任意一个自变量为NULL,则GREATEST()的返回值为NULL。
SELECT LEAST(1, 2, 4), GREATEST(1, 2, 4), LEAST('g','b','t','m'), GREATEST('g','b','t','m'), LEAST('g','b','t','m', NULL), GREATEST('g','b','t','m', NULL) FROM DUAL;
当参数是整数或者浮点数时,LEAST将返回其中最小的值;当参数为字符串时,返回字母表中顺序最靠前的字符;当比较值列表中有NULL时,不能判断大小,返回值为NULL。
当参数中是整数或者浮点数时,GREATEST将返回其中最大的值;当参数为字符串时,返回字母表中顺序最靠后的字符;当比较值列表中有NULL时,不能判断大小,返回值为NULL。
2.2.3 BETWEEN … AND …
BETWEEN 条件下界1 AND 条件上界2 (查询条件1和条件2范围内的数据,包含边界)
查询工资在6000 到 8000的员工信息:
SELECT employee_id,last_name,salary FROM employees WHERE salary BETWEEN 6000 AND 8000; # 或 SELECT employee_id,last_name,salary FROM employees WHERE salary>=6000 AND salary<=8000; # 或 SELECT employee_id,last_name,salary FROM employees WHERE salary>=6000 && salary<=8000;
注意:
两个数值的位置不能对调
交换6000 和 8000之后,查询不到数据:
SELECT employee_id,last_name,salary FROM employees WHERE salary BETWEEN 8000 AND 6000;
查询工资不在6000 到 8000的员工信息:
SELECT employee_id,last_name,salary FROM employees WHERE NOT (salary BETWEEN 6000 AND 8000); # 或 SELECT employee_id,last_name,salary FROM employees WHERE salary NOT BETWEEN 6000 AND 8000; # 或 SELECT employee_id,last_name,salary FROM employees WHERE salary < 6000 OR salary > 8000; # 或 SELECT employee_id,last_name,salary FROM employees WHERE salary < 6000 || salary > 8000;
2.2.4 IN (SET) / NOT IN (SET)
IN运算符用于判断给定的值是否是IN列表中的一个值,如果是则返回1,否则返回0。如果给定的值为NULL,则结果为NULL。
NOT IN运算符用于判断给定的值是否不是IN列表中的一个值,如果不是IN列表中的一个值,则返回1,否则返回0。
SELECT 'a' IN ('a', 'b', 'c'), 1 IN (2, 3), 1 NOT IN (2, 3), NULL IN (1, 2), NULL NOT IN (1, 2), 1 IN (1, NULL), NULL IN (1, NULL) FROM DUAL;
查询部门为10,20,30部门的员工信息:
SELECT employee_id, last_name, department_id FROM employees WHERE department_id IN (10, 20, 30);
查询工资不是6000,7000,8000的员工信息
SELECT employee_id, last_name, salary FROM employees WHERE salary NOT IN (6000, 7000, 8000);
2.2.5 LIKE
LIKE运算符主要用来匹配字符串,通常用于模糊匹配,如果满足条件则返回1,否则返回0。如果给定的值或者匹配条件为NULL,则返回结果为NULL。
LIKE运算符通常使用如下通配符:
- “%”:匹配0个或多个字符。
- “_”:只能匹配一个字符。
SELECT NULL LIKE 'ABC', 'ABC' LIKE NULL FROM DUAL;
查询last_name中包含字符’a’的员工信息:
SELECT last_name FROM employees WHERE last_name LIKE '%a%';
查询last_name中以字符’a’开头的员工信息:
SELECT last_name FROM employees WHERE last_name LIKE 'a%';
查询last_name中包含字符’a’且包含字符’e’的员工信息:
SELECT last_name FROM employees WHERE last_name LIKE '%a%' AND last_name LIKE '%e%'; # 或 SELECT last_name FROM employees # 包含 a e 可能 a 在前也可能 e 在前 WHERE last_name LIKE '%a%e%' OR last_name LIKE '%e%a%'