一.运算符(括号内的先运算)
1.算术运算符
(1)与字符运算会把字符当作0
(2)除数为0,结果为NULL
(3)取余结果的正负与%前面的那个数一样
| 运算符 |
含义 |
| + |
加 |
| - |
减 |
| * |
乘 |
| /或DIV |
除 |
| %或MOD |
取余 |
2.比较运算符
(1)结果为真返回1,为假返回0,否则返回NULL
(2)可用于有字符串的比较
(3)有NULL出现,结果就为NULL
(4)安全等于可用于NULL的运算,其他与等于一样;当两边操作数都是NULL返回1,否则返回0
| 运算符 |
含义 |
| = |
等于 |
| <=> |
安全等于 |
| <>或!= |
不等于 |
| < |
小于 |
| <= |
小于等于 |
| > |
大于 |
| >= |
大于等于 |
| 运算符 |
名称 |
解释 |
| IS NULL |
为空运算符 |
判断值,字符串或表达式是否为空 |
| IS NOTNULL |
不为空运算符 |
判断值,字符串或表达式是否不为空 |
| LEAST |
最小值运算符 |
在多个值中返回最小值 |
| GREATEST |
最大值运算符 |
在多个值中返回最大值 |
| BETWEEN…AND… |
两值之间的运算符 |
判断一个值是否在两个值之间 |
| ISNULL |
为空运算符 |
判断一个值,字符串或表达式是否为空 |
| IN |
属于运算符 |
判断一个值是否为列表中的任意一个值 |
| NOT IN |
不属于运算符 |
判断一个值是否不是列表中的任意一个值 |
| LIKE |
模糊匹配运算符 |
判断一个值是否符合模糊匹配规则 |
| REGEXP |
正则表达式运算符 |
判断一个值是否符合正则表达式规则 |
| RLIKE |
正则表达式运算符 |
判断一个值是否符合正则表达式规则 |
SELECT B FROM TABLE WHERE A IS NULL;SELECT B FROM TABLE WHERE A IS NOT NULL;SELECT D FROM TABLE WHERE C LEAST(A,B);SELECT D FROM TABLE WHERE C GREATEST(A,B);SELECT D FROM TABLE WHERE C BETWEEN A AND B;SELECT B FROM TABLE WHERE ISNULL(A);#相当于函数SELECT D FROM TABLE WHERE C IN(A,B);SELECT D FROM TABLE WHERE C NOT IN(A,B);SELECT C FROM TABLE WHERE A LIKE B;SELECT C FROM TABLE WHERE A REGEXP B;SELECT C FROM TABLE WHERE A RLIKE B;#模糊匹配,%代表匹配任意字符 _一个下划线代表一个不确定的字符SELECT last_name FROM employees WHERE last_name LIKE 'a';#查询带a的SELECT last_name FROM employees WHERE last_name LIKE '%a%';#查询只要有a的SELECT last_name FROM employees WHERE last_name LIKE 'a%';查询a开头的SELECT last_name FROM employees WHERE last_name LIKE '_a%';查询第二个字是a的,一个_是一个占位符
3.转义字符
(1)+符合
(2)用关键字声明:ESCAPE 字符(中间有空格)
SELECT last_name FROM employees WHERE last_name LIKE '&_a%' ESCAPE &;#查询已_开头的
4.逻辑运算符
(1)对NULL进行逻辑运算时,结果为不确定。一般数据库表属性都会设为NOT NULL,来简化对NULL的条件判断
| 运算符 |
含义 |
| !或NOT |
逻辑非 |
| AND或&& |
逻辑与 |
| OR或|| |
逻辑或 |
| XOR |
逻辑异或 |
5.位运算符
| 运算符 |
作用 |
| & |
按位与 |
| ! |
按位或 |
| ^ |
按位异或 |
| ~ |
按位取反 |
| >> |
按位右移 |
| << |
按位左移 |
6.运算符得优先级
(1)有括号先算括号内
(2)同一优先级从左往右执行
7.练习
#选择工资不在5000-12000的员工的姓名和工资SELECT employ_name,salary FROM employees WHERE salary NOT BETWEEN 5000 AND 12000;SELECT employ_name,salary FROM employees WHERE salary < 5000 OR salary > 12000;#选择在20或50号部门工作的员工的姓名和部门号SELECT employ_name,department_id FROM employees WHERE department_id=20 OR department_id=50;SELECT employ_name,department_id FROM employees WHERE department_id IN (20,50);#选择公司中没有管理者的员工姓名及job_idSELECT employ_name,job_id FROM employees WHERE manger_id IS NULL;SELECT employ_name,job_id FROM employees WHERE manger_id <=> NULL;--安全等于#选择公司中有奖金的员工姓名,工资及奖金级别SELECT employ_name,salary,grade_price FROM employees WHERE grade_price IS NOT NULL;SELECT employ_name,salary,grade_price FROM employees WHERE NOT grade_price <=> NULL;#选择员工姓名的第三个字母是a的员工姓名SELECT employ_name FROM employees WHERE employ_name LIKE '__a%';#选择姓名有字母a和k的员工姓名SELECT employ_name FROM employees WHERE employ_name LIKE '%a%k%' OR employ_name LIKE '%k%a%';SELECT employ_name FROM employees WHERE employ_name LIKE '%a%' AND employ_name LIKE '%k%';#显示出表employees表中first_name以e结尾的员工信息SELECT employ_information FROM employees WHERE first_name LIKE '%e';#显示出表employees部门编号在80-100之间的姓名,工资SELECT employ_name,salary FROM employees WHERE department_id>=80 AND department_id<=100;SELECT employ_name,salary FROM employees WHERE department_id BETWEEN 80 AND 100;#显示出表employees的manger_id是100,101,110的员工姓名,工资,管理者idSELECT employ_name,salary,root_id FROM employees WHERE manger_id=100 OR manger_id=101 OR manger_id=110;SELECT employ_name,salary,root_id FROM employees WHERE manger_id IN (100,101,110);