MySQL-DQL带搜索条件的查询

一.简单搜索条件


😊在上篇文章我们讲解了基本的简单查询,但是在实际的工作中,数据库表中的数据往往是比较多,我们一般也不会全部将数据查出来,我们往往会通过某些条件进行查询,比如姓名 id等等,比如,查询名称为范剑同学的基本信息。

sql 复制代码
SELECT `name`,`number`,`id_number` FROM `student_info` WHERE name='范剑';

其实这个就是where子句,我们可以在where子句之后使用一些条件限制来查询对应的数据,在where子句中还有很多操作限制符号,如下:

sql 复制代码
a = b  // a等于b
a<>b   // a不等于b
a<b    // a小于b
a<=b   // a小于等于b
a>=b   // a大于等于b
a BETWEEN b and c // a满足 b<=a<=c
a Not BETWEEN b and c // a不满足 b<=a<=c

🥴然后我们根据上述的限制符号来写一下下面的几个例子

  1. 查询学号大于20180103的学生信息。
sql 复制代码
SELECT * FROM `student_info` WHERE number > 20180103;
  1. 查询专业不是计算机科学与工程的一些学生信息。
sql 复制代码
SELECT * FROM `student_info` WHERE major<>'计算机科学与工程';
  1. 查询学号在20180102~20180104间的学生信息。
sql 复制代码
SELECT * FROM `student_info` WHERE `number` BETWEEN 20180102 AND 20180104;
  1. 查询学号不在20180102~20180104这个区间内的所有学生信息
sql 复制代码
SELECT * FROM `student_info` WHERE `number` NOT BETWEEN 20180102 AND 20180104;

二.匹配列表中的元素


😁在一些情况下我们并不会仅仅按照某一个条件查询,我们可能查询的是某一类数据,比如计算机学院和航天学学院的学生信息,这种查询情况,上述的条件就无法满足,这个时候我们就需要使用IN和NOT IN。

sql 复制代码
a IN  (b1,b2,b3....)  // a是b1,b2.b3中的某一个
a NOT IN (b1,b2,b3...) // a不是b1,b2,b3中的某一个
  1. 查询软件工程和飞行器设计专业的学生信息。
sql 复制代码
SELECT * FROM `student_info` WHERE `major` IN ('计算机科学','软件工程');
  1. 查询不是这两个专业的学生的信息。
sql 复制代码
SELECT * FROM `student_info` WHERE `major` NOT IN ('计算机科学','软件工程');

三.匹配NULL值


😊在SQL中NULL代表没有值,代表这个数据中你并没有进行数据的填写,所以有的时候我们会匹配某些字段的值是否为NULL。

sql 复制代码
IS NULL  // a IS NULL  a的值为NULL
IS NOT NULL // a IS NOT NULL  a的值不为NULL
  1. 查询student_info表的name列不是NULL的学生记录有哪些
sql 复制代码
SELECT * FROM `student_info` WHERE `name` IS NOT NULL;

四.多个搜索条件的查询


🦊在上述查询中不论是简单的搜索,还是判断是否为NULL等,都是简单的单个搜索条件的查询,接下来我们看下多个条件是如何查询的。

  1. AND操作符:当符合多个条件的时候使用,比如student_score表中找出科目为'母猪的产后护理'并且成绩大于75分的记录。
sql 复制代码
SELECT * FROM `student_score` WHERE `subject`='母猪的产后护理' AND `score` > 75;

如果再增加条件哪?比如再加上一个条件,限定number为20180101的数据。

sql 复制代码
SELECT * FROM `student_score` WHERE `subject`='母猪的产后护理' AND `number`=20180101 AND `score` > 75;
  1. 我们有时需要某条记录在符合某一个搜索条件的时候就将其加入结果集中,这种情况我们可以使用OR操作符来连接多个搜索条件。
sql 复制代码
SELECT * FROM `student_score` WHERE `score` > 95 OR `score` < 55;
  1. 更复杂的搜索条件的组合,比如从student_score表中找出课程为'论萨达姆的战争准备',并且成绩大于95分或者小于55分的记录。
sql 复制代码
SELECT * FROM `student_score` WHERE (`score` > 95 OR `score` < 55) AND `subject` = '母猪的产后护理';

五.通配符


😶‍🌫️有的时候我们并不能精确的查找的自己想要的结果,这个时候我们就需要使用通配符进行模糊查询。

sql 复制代码
% // 代表任意一个字符串
_ // 代表任意一个字符
  1. 查询student_info表中name以'杜'开头的记录
sql 复制代码
SELECT * FROM `student_info` WHERE name LIKE '杜%';
  1. 学生名字里边包含了一个'香'字,那我们可以这么查。
sql 复制代码
SELECT * FROM `student_info` WHERE `name` LIKE '%香%';
  1. 我们想查询姓'范',并且姓名只有2个字符的记录,我们需要使用_通配符
sql 复制代码
SELECT * FROM `student_info` WHERE `name` LIKE '范_';

六.转义通配符


👽有的时候我们表中存储的内容可能本身就包括类似于% _这些字符,但是可能MySQL会识别为通配符,这个情况我们如何解决哪?解决方法就是进行转义,就是告诉MySQL 这个是普通字符。

sql 复制代码
'%'代表普通字符'%'
'_'代表普通字符'_'

相关推荐
biu_biubiu8 分钟前
我开源了 Codebook
前端·vue.js
下山9 分钟前
怎么把带自研插件的 DeepSeek Harness 部署到云服务器
前端
彭亚川Allen16 分钟前
985 在职研究生到底怎么样?是不是水硕?是不是.....?
前端·后端·程序员
YufJi19 分钟前
两棵树,两个线程:一个小程序引擎的架构拆解
前端
super_Omni28 分钟前
Chrome 插件入驻实战:从 Manifest V3 到过审上架的完整路径
大数据·前端·chrome
腾讯数据架构师1 小时前
任务跑完怎么直接出图表?CubeStudio 任务可视化 ECharts 数据格式实操(CSV/JSON + metric.json,11 种图表一键渲染)
前端·json·echarts·数据可视化
小小小米粒1 小时前
不是在构造方法「之前」修饰 Bean、注入;是构造方法跑完之后,才做属性注入,再跑 @PostConstruct。
前端
小李科技1 小时前
【性能优化】事件委托:目标定位与 React/Vue 实战
前端·vue.js·react.js·面试·性能优化·前端框架
QianhangQianping1 小时前
一块大屏的数据在浏览器里怎么变成画面:背景、子屏、前景三层结构
前端·低代码·架构·编辑器·数据可视化·大屏可视化
梦想很大很大2 小时前
让 Codex 自由发挥,给 nvm-desktop 换个 UI
前端·人工智能·设计