一、算数运算符
- 算数运算符主要用于数学运算,其可以连接运算符前后的两个数值或表达式
运算符 名称 作用 示例 + 加法运算符 计算两个值或表达式的和 SELECT A+B - 减法运算符 计算两个值或表达式的差 SELECT A-B * 乘法运算符 计算两个值或表达式的乘积 SELECT A*B /或DIV 除法运算符 计算两个值或表达式的商 SELECT A/B或者SELECT A DIV B %或MOD 求模(求余)运算符 计算两个值或表达式的余数 SELECT A%B或者SELECT A MOD B - 举例(取模运算的结果的符号与被模数的符号相同):
- 在Java语言中,结果是1001。但是在MySQL中,是101。因为在MySQL中,+没有连接作用,只表示加法运算。此时,会将字符串转换为数值(隐式转换):
- 在MySQL中,只有单引号中是数字时,才能进行隐式转换,如果转换数值不成功,就转换为0:
二、比较运算符
- 比较运算符用来对表达式左边的操作数额右边的操作数进行比较,比较的结果为真则返回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; > 大于运算符 判断前面的值、字符串或表达式是否大于后面的值、字符串或表达式 SELECT C FROM TABLE WHERE A > B; >= 大于等于 判断前面的值、字符串或表达式是否大于等于后面的值、字符串或表达式 SELECT C FROM TABLE WHERE A >= B; - 举例:
- 注意,WHERE后面跟的条件判断结果是1(即true),才会被筛选出来。而commission_pct = NULL的结果始终是NULL(等于运算符和不等于运算符,它们的左右两边的操作数如果有NULL,那么返回结果必然是NULL):
- 安全等于运算符(<=>)与等于运算符(=)的作用是相似的,唯一的区别是安全等于运算符可以用来对NULL进行判断。在两个操作数均为NULL时,其返回值为1,而不是NULL;当一个操作数为NULL时,其返回值为0,而不为NULL
- 非符号类型的运算符:
运算符 名称 作用 示例 IS NULL 为空运算符 判断值、字符串或表达式是否为空 SELECT B FROM TABLE WHERE A IS NULL; IS NOT NULL 不为空运算符 判断值、字符串或表达式是否不为空 SELECT B FROM TABLE WHERE A IS NOT NULL; LEAST 最小值运算符 在多个值中返回最小值 SELECT LEAST(A,B) FROM TABLE; GREATEST 最大值运算符 在多个值中返回最大值 SELECT GREATEST(A,B) FROM TABLE; BETWEEN AND 两值之间的运算符 判断一个值是否在两个值之间 SELECT D FROM TABLE WHERE C BETWEEN A AND B; ISNULL 为空运算符 判断值、字符串或表达式是否为空 SELECT B FROM TABLE WHERE ISNULL(A); IN 属于运算符 判断一个值是否为列表中的任意一个值 SELECT B FROM TABLE WHERE A IN (A,B); NOT IN 不属于运算符 判断一个值是否不是一个列表中的任意一个值 SELECT B FROM TABLE WHERE A NOT IN (A,B); LIKE 模糊匹配运算符 判断一个值是否符合模糊匹配规则 SELECT C FROM TABLE WHERE A LIKE B; REGEXP 正则表达式运算符 判断一个值是否符合正则表达式的规则 SELECT C FROM TABLE WHERE A REGEXP B; RLIKE 正则表达式运算符 判断一个值是否符合正则表达式的规则 SELECT C FROM TABLE WHERE A RLIKE B; - 举例:
- _(下划线)代表一个不确定的字符:
- REGEXP运算符:
- '^'匹配以该字符后面的字符开头的字符串
- '$'匹配以该字符前面的字符结尾的字符串
- '.'匹配任何一个单字符
- "[...]"匹配在方括号内的任何字符。例如,"[abc]"匹配"a"或"b"或"c"。为例命名字符的范围,使用一个'-'。"[a-z]"匹配任何字母,"[0-9]"匹配任何数字
- '*'匹配0个或多个在它前面的字符。例如,"x*"匹配任何数量的'x'字符,"[0-9]*"匹配任何数量的数字
- 当字符串与数字进行运算或比较时,如果它能转换成数值,就用转换后的数值与数字进行运算或比较。如果它不能转换成某个数值,它就会被转换为0
- 当两个字符串进行比较时 ,依次比较它们相应位置字符的ASCII码值
- 当两个字符串进行运算时,把这两个字符串转为数值
三、逻辑运算符
- 逻辑运算符主要用来判断表达式的真假,在MySQL中,逻辑运算符的返回结果为1、0或NULL(逻辑运算符的操作数必须是本身就能得出真或假的)
运算符 作用 示例 NOT 或 ! 逻辑非 SELECT NOT A AND 或 && 逻辑与 SELECT A AND B或者SELECT A && B OR 或 || 逻辑或 SELECT A OR B或者SELECT A || B XOR 逻辑异或 SELECT A XOR B(左右两边的判断结果不一样,就是真) - 举例:
四、位运算符
- 位运算符是在二进制数上进行计算的运算符。位运算符会先将操作数变成二进制数,然后进行运算,最后将计算结果从二进制数变回十进制数
运算符 作用 示例 & 按位与 SELECT A & B | 按位或 SELECT A | B ^ 按位异或 SELECT A ^ B ~ 按位取反 SELECT ~A >> 按位右移 SELECT A>>1(1代表移动1位) << 按位左移 SELECT B<<1(1代表移动1位) - 按位与(以12 & 5为例):12的二进制表示为00001100,5的二进制表示为00000101。把0当作假,1当作真。&理解为且,因此0 & 1为0。计算结果为00000100,转为十进制,得到4
- 按位或(以12 | 5为例):12的二进制表示为00001100,5的二进制表示为00000101。把0当作假,1当作真。|理解为或,因此0 | 1为1。计算结果为00001101,转为十进制,得到13
- 按位异或(以为12 ^ 5为例):12的二进制表示为00001100,5的二进制表示为00000101。把0当作假,1当作真。^理解为异或,因此计算结果为00001001,转为十进制,得到9
- 按位取反运算符,就是将给定的值的二进制逐位进行取反操作,0变成1,1变成0
- 左移:以十进制数4为例,4对应的二进制是00000100。将整体左移一位,变成00001000。转为十进制是8
- 右移:以十进制数8为例,8对应的二进制是00001000。将整体右移一位,变成00000100。转为十进制是4
五、运算符的优先级
- OR可以和AND一起使用,但是在使用时要注意两者的优先级,由于AND的优先级高于OR,因此先对AND两边的操作数进行运算,再与OR中的操作数结合
- ()的优先级最高,最先计算()里的
六、课后练习
- 选择工资不在5000到12000的员工的姓名和工资
- 选择在20或50号部门工作的员工姓名和部门号
- 选择公司中没有管理者的员工姓名及jod_id
- 选择公司中有奖金的员工姓名,工资和奖金级别
- 选择员工姓名的第三个字母是a的员工姓名
- 选择姓名中有字母a和k的员工姓名
- 显示出表employees表中first_name以'e'结尾的员工信息
- 显示出表employees部门编号在80-100之间的姓名、工种
- 显示出表employees的manager_id是100,101,110的员工姓名、工资和管理者id
该笔记根据尚硅谷的MySQL课程整理