前言:
✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我 🐶哈士奇🐶 ,一位致力于 TFS - 全栈 赋能的博主 ✌
🏆 CSDN博客专家认证、新星计划第三季全栈赛道 top_1 、华为云享专家、阿里云专家博主 🏆
📫 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
💬 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。💬
🔥 如果感觉博主的文章还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主哦
文章目录
🐳 条件查询🐳 四类运算符🐬 数学运算符🐬 比较运算符 - 1🐬 比较运算符 - 2🐬 逻辑运算符🐬 按位运算符(也叫做二进制按位运算)🐬 WHERE 子句的注意事项🐬 各种子句的执行顺序该章节我们来学习条件查询,有了条件查询,就可以查找出符合条件的查找记录了。比如说 “10” 和 “20” 部门月薪超过 “2000” 的员工信息,只有条件查询才能帮我们筛选出这种想要的信息记录。
🐳 条件查询
很多时候,用户感兴趣的并不是数据表里的全部记录,而只是数据当中能够满足某一种条件或某几种条件的记录。这一类条件要用WHERE
子句来实现数据的筛选,语法如下:
SELECT ...... FROM ...... WHERE 条件 [AND|OR] 条件 ......; -- 如果 WHERE 子句后面的多个条件必须都满足,使用 AND 关键字,代表 "逻辑与" 关系。-- 如果 WHERE 子句后面的多个条件满足一条即可,则使用 OR 关键字,代表 "逻辑或" 关系。
条件查询示例 SQL 如下:
利用 WHERE 子句 与 AND 关键字,实现条件查询的 “逻辑与” 的结果集展示
SELECT empno, ename, sal FROM t_emp WHERE deptno=10 AND sal >= 2000 ;-- 利用 WHERE 子句查询 t_emp 表中 deptno(部门)为 10 ,且月薪大于等于 2000 的员工信息
利用 WHERE 子句 与 AND、OR 关键字,实现条件查询的 “逻辑与”、“逻辑或” 的结果集展示
SELECT empno, ename, sal FROM t_emp WHERE (deptno=10 OR deptno = 20) AND sal >= 2000 ;-- 利用 WHERE 子句查询 t_emp 表中 deptno(部门)为 10 或者 20 ,且月薪大于等于 2000 的员工信息
🐳 四类运算符
使用 WHERE 子句的时候,判断条件是否成立会用到四种运算符,如下:
🐬 数学运算符
以上这些和 Python 中的算术运算符是一样的对于我们来说是没有什么难度的。
数学运算符 SQL 语句示例,如下:
查询 10 部门中年收入超过 15000 且工龄超过 的员工的信息。
SELECT empno, ename, sal, hiredateFROM t_empWHERE deptno = 10 AND (sal + IFNULL(comm,0)) * 12 >=15000AND DATEDIFF(NOW(),hiredate)/365 >= 20-- IFNULL(expr1,expr2):IFNULL 函数的语法,当第一个参数的值为null 的时候,则返回第二个参数的值-- DATEDIFF(expr1,expr2):DATEDIFF 函数的语法,计算第一个日期与第二个日期的偏差时间差-- NOW():NOW 函数可以获得当前日期
🐬 比较运算符 - 1
这些比较运算符的用法呢与 Python 中的比较运算符用法是一样的,没有什么可解释的。接下来我们就编写一个查询语句,去查询 10、 20、 30 部门里 1985年以前入职的,而且不能是 "SALESMAN" 职位的员工。
SQL例句如下:
SELECT empno, ename, sal, deptno, hiredateFROM t_empWHERE deptno IN (10, 20, 30) AND job != 'SALESMAN' AND hiredate < '1985-01-01';
🐬 比较运算符 - 2
SQL 语句示例如下:(查找 “comm” 字段为 “NULL” ,月薪在 2000 到 3000 之间,且姓名中包含有 “A” 字符 的员工信息)
SELECT ename, sal, commFROM t_empWHERE comm IS NULLAND sal BETWEEN 2000 AND 3000 AND ename LIKE "%A%";
再给大家演示一个
正则表达式
的SQL 语句案例:(这里大家需要新增一条
ename字段为中文的数据【通过图形操作点击 "+" 号即可完成】
)
SELECT ename, sal, commFROM t_empWHERE comm IS NOT NULLAND sal BETWEEN 2000 AND 3000 AND ename REGEXP "^[\\u4e00-\\u9fa5]{2,4}$";-- REGEXP:正则表达式匹配的是中文的字符集范围,且中文的长度是 2-4
🐬 逻辑运算符
逻辑运算符是用来定义表达式之间的逻辑关系,见下表:
PS:"XOR" 需要注意的地方是,只有当两个 条件都为 TRUE 或者 FLASE 的情况下才会返回 TRUE 或者 FLASE ;当两个条件不一致的情况下则返回 FLASE 。
接下来看一个 “XOR” 异或关系的 SQL 语句示例:
SELECT deptno, ename, salFROM t_empWHERE NOT deptno IN(10, 20) XOR sal >= 2000;
🐬 按位运算符(也叫做二进制按位运算)
二进制按位运算的本质是将参与运算的两个操作数,按照对应的二进制数逐位进行逻辑运算;所以做
按位运算
之前,会先将操作数变成二进制数,然后进行位运算,计算的结果再从二进制变为十进制输出。(二进制运算在 MySQL 中运用的特别的少,所以这里简单的介绍一下,按位运算符就好了。)按位运算SQL参考示例如下:
🐬 WHERE 子句的注意事项
在 WHERE 子句中,条件执行的顺序是从左到右的。所以我们应该把索引条件,或者筛选掉记录条件最多的条件卸载最左侧。
示例如下:
SELECT empno, ename FROM t_emp WHERE ename = "FORD" AND sal >= 2000;-- 如果说 ename 字段有索引的话,那么索引字段一定要写在条件的左侧,这样可以提高数据集的查询效率。
SELECT empno, ename FROM t_emp WHERE deptno = 10 AND sal >= 2000;-- 从数据表中我们知道月薪大于等于 2000 的人有很多,但是在 10编号 部门的人员却不多。-- 所以通过先筛选部门可以筛选掉大量的数据,如此也是可以提高数据集的查询效率的。
🐬 各种子句的执行顺序
在 SQL 语句中,各种字句的执行顺序的优先级如下
FROM ---> WHERE ---> SELECT ---> ORDER BY ---> LIMIT