| 万叶集 |
|---|
| 隐约雷鸣,阴霾天空。 |
| 但盼风雨来,能留你在此。 |
前言:
✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我 哈士奇 ,一位致力于 TFS - 全栈 赋能的博主 ✌
CSDN博客专家认证、新星计划第三季全栈赛道 top_1 、华为云享专家、阿里云专家博主
如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步
人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。
如果感觉博主的文章还不错的话,还请关注、点赞、收藏三连支持一下博主哦
专栏系列(点击解锁) 学习路线(点击解锁) 知识定位 Python全栈白皮书 零基础入门篇 以浅显易懂的方式轻松入门,让你彻底爱上Python的魅力。 语法进阶篇 主要围绕多线程编程、正则表达式学习、含贴近实战的项目练习 。 自动化办公篇 实现日常办公软件的自动化操作,节省时间、提高办公效率。 自动化测试实战篇 从实战的角度出发,先人一步,快速转型测试开发工程师。 数据库开发实战篇 掌握关系型与非关系数据库知识,提升数据库实战开发能力。 爬虫入门与实战 更新中 数据分析篇 更新中 前端入门+flask 全栈篇 更新中 django+vue全栈篇 更新中 拓展-人工智能入门 更新中 网络安全之路 踩坑篇 记录学习及演练过程中遇到的坑,便于后来居上者 网安知识扫盲篇 三天打鱼,不深入了解原理,只会让你成为脚本小子。 vulhub靶场漏洞复现 让漏洞复现变得简单,让安全研究者更加专注于漏洞原理本身。 shell编程篇 不涉及linux基础,最终案例会偏向于安全加固方向。 [待完结] WEB漏洞攻防篇 2021年9月3日停止更新,转战先知社区等安全社区及小密圈 渗透工具使用集锦 2021年9月3日停止更新,转战先知社区等安全社区及小密圈 点点点工程师 测试神器 - Charles 软件测试数据包抓包分析神器 测试神器 - Fiddler 一文学会 fiddle ,学不会倒立吃翔,稀得! 测试神器 - Jmeter 不仅是性能测试神器,更可用于搭建轻量级接口自动化测试框架。 RobotFrameWork Python实现的自动化测试利器,该篇章仅介绍UI自动化部分。 Java实现UI自动化 文档写于2016年,Java实现的UI自动化,仍有借鉴意义。 MonkeyRunner 该工具目前的应用场景已不多,文档已删,为了排版好看才留着。
文章目录
- 条件查询
- 四类运算符
- 数学运算符
- 比较运算符 - 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 子句的时候,判断条件是否成立会用到四种运算符,如下:
序号 运算符 1 数学运算符 2 比较运算符 3 逻辑运算符 4 按位运算符
数学运算符
序号 表达式 意义 例子 1 + 加法 1+2+3 2 - 减法 5-2-1 3 * 乘法 5*5 4 / 除法 230/15 5 % 求模 10%3
以上这些和 Python 中的算术运算符是一样的对于我们来说是没有什么难度的。
数学运算符 SQL 语句示例,如下:
查询 10 部门中年收入超过 15000 且工龄超过 20年 的员工的信息。
SELECt empno, ename, sal, hiredate FROM t_emp WHERe deptno = 10 AND (sal + IFNULL(comm,0)) * 12 >=15000 AND DATEDIFF(NOW(),hiredate)/365 >= 20 -- IFNULL(expr1,expr2):IFNULL 函数的语法,当第一个参数的值为null 的时候,则返回第二个参数的值 -- DATEDIFF(expr1,expr2):DATEDIFF 函数的语法,计算第一个日期与第二个日期的偏差时间差 -- NOW():NOW 函数可以获得当前日期
比较运算符 - 1
序号 表达式 意义 例子 1 > 大于 sal > 3500 2 >= 大于等于 sal >=3500 3 < 小于 sal <3000 4 <= 小于等于 sal <=3000 5 = 等于 deptno = 10 6 != 不等于 deptno != 30 7 IN 包含 deptno IN (10, 20, 30)
这些比较运算符的用法呢与 Python 中的比较运算符用法是一样的,没有什么可解释的。接下来我们就编写一个查询语句,去查询 10、 20、 30 部门里 1985年以前入职的,而且不能是 "SALESMAN" 职位的员工。
SQL例句如下:
SELECt empno, ename, sal, deptno, hiredate FROM t_emp WHERe deptno IN (10, 20, 30) AND job != 'SALESMAN' AND hiredate < '1985-01-01';
比较运算符 - 2
序号 表达式 意义 例子 8 IS NULL 为空 comm IS NULL 9 IS NOT NULL 不为空 comm IS NOT NULL 10 BETWEEN AND 范围 sal BETWEEN 2000 AND 3000 11 LIKE 模糊查询 ename like “A” 12 REGEXP 正则表达式 ename REGEXP “[a-zA-Z]{4}”
SQL 语句示例如下:(查找 “comm” 字段为 “NULL” ,月薪在 2000 到 3000 之间,且姓名中包含有 “A” 字符 的员工信息)
SELECt ename, sal, comm FROM t_emp WHERe comm IS NULL AND sal BETWEEN 2000 AND 3000 AND ename LIKE "%A%";
再给大家演示一个 正则表达式 的SQL 语句案例:(这里大家需要新增一条 ename 字段为中文的数据【通过图形操作点击 "+" 号即可完成】)
SELECt ename, sal, comm FROM t_emp WHERe comm IS NOT NULL AND sal BETWEEN 2000 AND 3000 AND ename REGEXP "^[\u4e00-\u9fa5]{2,4}$"; -- REGEXP:正则表达式匹配的是中文的字符集范围,且中文的长度是 2-4
逻辑运算符
逻辑运算符是用来定义表达式之间的逻辑关系,见下表:
序号 表达式 意义 例子 1 AND 与关系 sal > 3500 AND comm IS NULL 2 OR 或关系 empno = 7935 OR deptno =20 3 NOT 非关系 NOT deptno =20 4 XOR 异或关系 sal > 2000 XOR comm IS NULL PS:"XOR" 需要注意的地方是,只有当两个 条件都为 TRUE 或者 FLASE 的情况下才会返回 TRUE 或者 FLASE ;当两个条件不一致的情况下则返回 FLASE 。
接下来看一个 “XOR” 异或关系的 SQL 语句示例:
SELECt deptno, ename, sal FROM t_emp WHERe 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



