一.运算符(括号内的先运算)
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_id
SELECT 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的员工姓名,工资,管理者id
SELECT 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);