[MySQL] 运算符(四)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: [MySQL] 运算符(四)

3.4 逻辑异或运算符

逻辑异或(XOR)运算符是当给定的值中任意一个值为NULL时,则返回NULL;如果两个非NULL的值都是0或者都不等于0时,则返回0;如果一个值为0,另一个值不为0时,则返回1。

XOR :追求的"异"

SELECT 1 XOR -1, 1 XOR 0, 0 XOR 0, 1 XOR NULL, 
       # 1 XOR 1 为 0
       # 0 XOR 1 为 1
       1 XOR 1 XOR 1, 
       # 0 XOR 0 为 0
       # 0 XOR 0 为 0
       0 XOR 0 XOR 0;

4 位运算符

位运算符是在二进制数上进行计算的运算符。位运算符会先将操作数变成二进制数,然后进行位运算,最后将计算结果从二进制变回十进制数。

MySQL支持的位运算符如下:

运算符 作用
& 按位与
| 按位或
^ 按位异或
~ 按位取反
>> 按位右移
<< 按位左移

4.1 按位与运算符

按位与(&)运算符将给定值对应的二进制数逐位进行逻辑与运算。当给定值对应的二进制位的数值都为1时,则该位返回1,否则返回0。

4.2 按位或运算符

按位或(|)运算符将给定的值对应的二进制数逐位进行逻辑或运算。当给定值对应的二进制位的数值有一个或两个为1时,则该位返回1,否则返回0。

4.3 按位异或运算符

按位异或(^)运算符将给定的值对应的二进制数逐位进行逻辑异或运算。当给定值对应的二进制位的数值不同时,则该位返回1,否则返回0。

4.4. 按位取反运算符

按位取反(~)运算符将给定的值的二进制数逐位进行取反操作,即将1变为0,将0变 为1。

4.5. 按位右移运算符

按位右移(>>)运算符将给定的值的二进制数的所有位右移指定的位数。右移指定的位数后,右边低位的数值被移出并丢弃,左边高位空出的位置用0补齐。

4.6. 按位左移运算符

按位左移(<<)运算符将给定的值的二进制数的所有位左移指定的位数。左移指定的位数后,左边高位的数值被移出并丢弃,右边低位空出的位置用0补齐。

在一定范围内满足:每向左移动1位,相当于乘以2;每向右移动一位,相当于除以2。

SELECT
    12&5,
    12|5,
    12^5,
    ~(-2),
    4<<1,
    4>>1
FROM dual;

5 运算符的优先级

数字编号越大,优先级越高,优先级高的运算符先进行计算。可以看到,赋值运算符的优先级最低,使用“( )”括起来的表达式的优先级最高。

6 运算符练习

【题目】

# 1.选择工资不在5000到12000的员工的姓名和工资 
# 2.选择在20或50号部门工作的员工姓名和部门号 
# 3.选择公司中没有管理者的员工姓名及job_id 
# 4.选择公司中有奖金的员工姓名,工资和奖金级别 
# 5.选择员工姓名的第三个字母是a的员工姓名 
# 6.选择姓名中有字母a和k的员工姓名 
# 7.显示出表 employees 表中 first_name 以 'e'结尾的员工信息 
# 8.显示出表 employees 部门编号在 80-100 之间的姓名、工种 
# 9.显示出表 employees 的 manager_id 是 100,101,110 的员工姓名、工资、管理者id

【解答】

# 1.选择工资不在5000到12000的员工的姓名和工资
SELECT last_name, salary
FROM employees
WHERE salary NOT BETWEEN 5000 AND 12000;
# 或者
SELECT last_name, salary
FROM employees
WHERE salary<5000 OR salary>12000;

# 2.选择在20或50号部门工作的员工姓名和部门号
SELECT last_name, department_id
FROM employees
WHERE department_id=20 OR department_id=50;
# 或者
SELECT last_name, department_id
FROM employees
WHERE department_id IN (20, 50);

# 3.选择公司中没有管理者的员工姓名及job_id
SELECT last_name, job_id
FROM employees
WHERE manager_id IS NULL;
# 或者
SELECT last_name, job_id
FROM employees
WHERE manager_id <=> NULL;

# 4.选择公司中有奖金的员工姓名,工资和奖金级别
SELECT last_name, salary, commission_pct
FROM employees
WHERE commission_pct IS NOT NULL;

# 5.选择员工姓名的第三个字母是a的员工姓名
SELECT last_name
FROM employees
WHERE last_name LIKE '__a%';

# 6.选择姓名中有字母a和k的员工姓名
SELECT last_name
FROM employees
WHERE last_name LIKE '%a%' AND last_name LIKE '%k%';
# 或者
SELECT last_name
FROM employees
WHERE last_name LIKE '%a%k%' OR last_name LIKE '%k%a%';

# 7.显示出表 employees 表中 first_name 以 'e'结尾的员工信息
SELECT employee_id, first_name, last_name
FROM employees
WHERE first_name LIKE '%e';
# 或者
SELECT employee_id, first_name, last_name
FROM employees
WHERE first_name REGEXP 'e$';

# 8.显示出表 employees 部门编号在 80-100 之间的姓名、工种
SELECT last_name, job_id
FROM employees
WHERE department_id BETWEEN 80 AND 100;

# 9.显示出表 employees 的 manager_id 是 100,101,110 的员工姓名、工资、管理者id
SELECT last_name, salary, manager_id
FROM employees
WHERE manager_id IN (100, 101, 110);


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
8月前
|
关系型数据库 MySQL Java
MYSQL运算符和分页
MYSQL运算符和分页
47 0
|
6天前
|
SQL 关系型数据库 MySQL
mysql基本查询、运算符、排序和分页
mysql基本查询、运算符、排序和分页
|
8月前
|
SQL 关系型数据库 MySQL
MySql where 查询条件与运算符
MySql where 查询条件与运算符
68 0
|
6天前
|
SQL 安全 关系型数据库
MySQL技能完整学习列表3、SQL语言基础——3、SQL运算符和函数
MySQL技能完整学习列表3、SQL语言基础——3、SQL运算符和函数
38 0
|
6天前
|
关系型数据库 MySQL 数据库
【MySQL进阶之路丨第十七篇(完结)】一文带你精通MySQL运算符
【MySQL进阶之路丨第十七篇(完结)】一文带你精通MySQL运算符
25 0
|
6天前
|
存储 关系型数据库 MySQL
MySQL基础篇(运算符、排序分页、多表查询、函数)-3
MySQL基础篇(运算符、排序分页、多表查询、函数)
58 0
|
6天前
|
SQL 关系型数据库 MySQL
MySQL基础篇(运算符、排序分页、多表查询、函数)-2
MySQL基础篇(运算符、排序分页、多表查询、函数)
41 0
|
6天前
|
SQL 关系型数据库 MySQL
MySQL基础篇(运算符、排序分页、多表查询、函数)-1
MySQL基础篇(运算符、排序分页、多表查询、函数)
72 0
|
6天前
|
关系型数据库 MySQL 数据库
【MySQL进阶之路丨第十七篇(完结)】一文带你精通MySQL运算符
【MySQL进阶之路丨第十七篇(完结)】一文带你精通MySQL运算符
27 0
|
9月前
|
SQL 安全 关系型数据库
MySQL运算符大总结
MySQL运算符大总结