栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

〖Python 数据库开发实战 - MySQL篇⑯〗- SQL 语句的条件查询

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

〖Python 数据库开发实战 - MySQL篇⑯〗- SQL 语句的条件查询

万叶集
 隐约雷鸣,阴霾天空。 
 但盼风雨来,能留你在此。 


前言:
✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我 哈士奇 ,一位致力于 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
7IN包含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
序号表达式意义例子
8IS NULL为空comm IS NULL
9IS NOT NULL不为空comm IS NOT NULL
10BETWEEN AND范围sal BETWEEN 2000 AND 3000
11LIKE模糊查询ename like “A”
12REGEXP正则表达式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 


 逻辑运算符

逻辑运算符是用来定义表达式之间的逻辑关系,见下表:

序号表达式意义例子
1AND与关系sal > 3500 AND comm IS NULL
2OR或关系empno = 7935 OR deptno =20
3NOT非关系NOT deptno =20
4XOR异或关系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




转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1025161.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号