目录
[1. 算数运算符](#1. 算数运算符)
[2. 比较运算符](#2. 比较运算符)
[2.1 等号运算符(=)](#2.1 等号运算符(=))
[2.2 不等于运算符 !=](#2.2 不等于运算符 !=)
[3.1 空运算 IS NULL、 IS NOT NULL、 ISNULL](#3.1 空运算 IS NULL、 IS NOT NULL、 ISNULL)
[3.2 区间查询 BETWEEN](#3.2 区间查询 BETWEEN)
[3.3 包含查询 IN、 NOT IN](#3.3 包含查询 IN、 NOT IN)
[4. 逻辑运算符](#4. 逻辑运算符)
[4.1 AND(逻辑与)、OR(逻辑或)](#4.1 AND(逻辑与)、OR(逻辑或))
[4.2 NOT(逻辑非)](#4.2 NOT(逻辑非))
一、mysql运算符
1. 算数运算符
算术运算符 | |||
---|---|---|---|
运算符 | 名称 | 作用 | 示例 |
+ | 加 | 计算两个值或表达式的和 | SELECT A + B |
- | 减 | 计算两个值或表达式的差 | SELECT A-B |
* | 乘法 | 计算两个值或表达式的乘积 | SELECT A*B |
/或DIV | 除法 | 计算两个值或表达式的商 | SELECT A/B |
• ⼀个整数类型的值对整数进行加法和减法操作 ,结果还是⼀个整数;
• ⼀个整数类型的值对浮点数进行加法和减法操作 ,结果是⼀个浮点数;
• 加法和减法的优先级相同 ,进行先加后减操作与进行先减后加操作的结果是⼀样的;
• 在Java中 ,+ 的左右两边如果有字符串 ,那么表示字符串的拼接。但是在MySQL中 + 只表示数值相加。如果遇到非数值类型 ,先尝试转成数值 ,如果转失败 ,就按 0 计算。(补充: MySQL 中字符串拼接要使用字符串函数CONCAT()实现)
• ⼀个数乘以整数1和除以整数1后仍得原数;
• ⼀个数乘以浮点数1和除以浮点数1后变成浮点数 ,数值与原数相等;
• ⼀个数除以整数后 ,不管是否能除尽 ,结果都为⼀个浮点数;
• ⼀个数除以另⼀个数 ,除不尽时 ,结果为⼀个浮点数 ,并保留到小数点后4位;
• 乘法和除法的优先级相同 ,进行先乘后除操作与先除后乘操作 ,得出的结果相同。
• 在数学运算中 ,0不能用作除数 ,在MySQL中 ,⼀个数除以0为NULL。
2. 比较运算符
比较运算符用来对表达式左边的操作数和右边的操作数进行比较,比较的结果为真则返回1,比较的结果为假则返回0,其他情况则返回NULL
|---------|------|-------------------|---------------------------------|
| 比较运算符 ||||
| 运算符 | 名称 | 作用 | 示例 |
| = | 等于 | 判断两个值,字符串或表达式是否相等 | SELECT C FROM TABLE WHERE A=B |
| !=或<> | 不等于 | 判断两边是否不相等 | SELECT C FROM TABLE WHERE A!=B |
| < | 小于 | 判断前边是否小于后边 | SELECT C FROM TABLE WHERE A<B |
| <= | 小于等于 | 判断前边是否小于等于后边 | SELECT C FROM TABLE WHERE A<=B |
| > | 大于 | 判断前边是否大于后边 | SELECT C FROM TABLE WHERE A>B |
| >= | 大于等于 | 判断前边是否大于等于后边 | SELECT C FROM TABLE WHERE A>=B |
2.1 等号运算符(=)
判断等号两边的值、字符串或表达式是否相等 ,如果相等则返回1 ,不相等则返回 0。
在使用等号运算符时 ,遵循如下规则:
- 如果等号两边的值、字符串或表达式都为字符串 ,则MySQL会按照字符串进行比较 ,其比较的是每个字符串中字符的ANSI编码是否相等。
- 如果等号两边的值都是整数 ,则MySQL会按照整数来⽐较两个值的大小。
- 如果等号两边的值⼀个是整数 ,另⼀个是字符串 ,则MySQL会将字符串转化为数字进行比较。
- 如果等号两边的值、字符串或表达式中有⼀个为NULL ,则比较结果为NULL。
2.2 不等于运算符 !=
不等于运算符(<>和!=)用于判断两边的数字、字符串或者表达式的值是否不相等 ,如果不相等 则返回1 ,相等则返回0。
不等于运算符不能判断NULL值。如果两边的值有任意⼀个为NULL ,或两边都为NULL ,则结果为NULL。
3.非符号类型的运算符
|-------------|---------|--------------------|---------------------------------------------|
| 非符号运算符 ||||
| 运算符 | 名称 | 作用 | 示例 |
| is null | 空运算符 | 判断值,字符串或表达式是否为空 | SELECT C FROM TABLE WHERE A IS NULL |
| is not null | 非空运算符 | 判断值,字符串或表达式是否不为空 | SELECT C FROM TABLE WHERE A IS NOT NULL |
| between and | 区间运算符 | 判断一个值是否在两值之间 | SELECT C FROM TABLE WHERE A BETWEEN B AND D |
| in | 属于运算符 | 判断一个值是否属于列表中的任意一个值 | SELECT C FROM TABLE WHERE D IN(A,B) |
| not in | 不属于运算符 | 判断一个值是否不是列表中的任意一个值 | SELECT C FROM TABLE WHERE D NOT IN(A,B) |
| like | 模糊匹配运算符 | 判断一个值是否符合模糊匹配 | SELECT C FROM TABLE WHERE A LIKE B |
3.1 空运算 IS NULL、 IS NOT NULL、 ISNULL
sql
-- commission_pct为null的数据
SELECT last_name, salary, commission_pct FROM employees
WHERE commission_pct IS NULL;
-- 或
SELECT last_name, salary, commission_pct FROM employees
WHERE ISNULL(commission_pct);
-- commission_pct不为null的数据
SELECT last_name, salary, commission_pct FROM employees
WHERE commission_pct IS NOT NULL;
3.2 区间查询 BETWEEN
BETWEEN 条件下界1 AND 条件上界2(查询条件1和条件2范围内的数据 ,包含边界)
sql
-- 查询⼯资在6000到8000的员⼯信息
SELECT employee_id, last_name,salary FROM employees
WHERE salary BETWEEN 6000 AND 8000;
-- WHERE salary >= 6000 AND salary <= 8000;
-- 查询⼯资不在6000到8000的员⼯信息
SELECT employee_id, last_name,salary
FROM employees
WHERE salary NOT BETWEEN 6000 AND 8000;
-- WHERE salary < 6000 or salary > 8000;
3.3 包含查询 IN、 NOT IN
sql
-- 查询部⻔为10,20,30部⻔的员⼯信息
SELECT last_name, salary, department_id FROM employees
WHERE department_id = 10 OR department_id = 20 OR department_id = 30;
--WHERE department_id IN (10,20,30);
-- 查询⼯资不是6000、7000、8000的员⼯信息
SELECT last_name, salary, department_id FROM employees
WHERE salary NOT IN (6000,7000,8000);
3.4模糊查询LIKE
sql
-- 查询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%';
--WHERE last_name LIKE'%a%e%' OR last_name LIKE '%e%a%';
-- 查询last_name中第⼆个字符是'a'的员⼯信息
SELECT last_name FROM employees
WHERE last_name LIKE '_a%';
-- 查询第⼆个字符是'_'且第三个字符是'a'的员⼯信息
SELECT last_name FROM employees
WHERE last_name LIKE '_\_a%';
4. 逻辑运算符
逻辑运算符主要用来判断表达式的真假 ,在MySQL中 ,逻辑运算符的返回结果为1、0或者NULL。 MySQL中支持的逻辑运算符如下:
|----------|--------|--------|----------------------------------|
| 逻辑运算符 ||||
| 运算符 | 名称 | 作用 | 示例 |
| NOT或! | 逻辑非 | 逻辑非 | SELECT NOT A... |
| AND或&& | 逻辑与 | 逻辑与 | SELECT A AND B 或 SELECT A && B |
| OR或|| | 逻辑或 | 逻辑或 | SELECT A OR B或SELECT A||B |
4.1 AND(逻辑与)、OR(逻辑或)
逻辑与(AND或&&)运算符
当给定的所有值均为非0值 ,并且都不为NULL时 ,返回1;
当给定的⼀个值或者多个值为0时则返回0;否则返回NULL。
逻辑或(OR或||)运算符
当给定的值都不为NULL ,并且任何⼀个值为非0值时 ,则返回1 ,否则返回0;
当⼀个值为NULL ,并且另⼀个值为非0值时 ,返回1 ,否则返回NULL;
当两个值都为NULL时 ,返回NULL。
sql
-- AND、OR
SELECT last_name,salary,department_id FROM employees
WHERE department_id = 10 or department_id = 20;
-- WHERE department_id = 10 || department_id = 20;
-- WHERE department_id = 50 AND salary > 6000;
--WHERE department_id = 50 && salary 6000;
注意:
OR可以和AND⼀起使用,但是在使用时要注意两者的优先级,由于AND的优先级高于OR,因此先 对AND两边的操作数进行操作,再与OR中的操作数结合。
4.2 NOT(逻辑非)
逻辑非(NOT或!)运算符表表示当给定的值为0时返回1;
• 当给定的值为⾮0值时返回0;
• 当给定的值为NULL时,返回NULL