百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

一文讲懂SQL条件子句WHERE

yuyutoo 2025-01-01 23:26 2 浏览 0 评论

大家好,我是宁一

今天是SQL教程的第五课,来看看WHERE条件子句的用法。

WHERE子句基本语法:

SELECT <字段名> FROM <表名> WHERE <筛选条件>;

1、比较运算符

WHERE子句中,最常用到的就是比较运算符,包括大于(>)、小于(<)、等于(=)、大于等于(>=)、小于等于(<=)、不等于(!=或者<>)。要注意等于是一个等号而不是两个等号。

实例:在Students表中,查出班主任 Tid 不为2的记录。

SELECT *
FROM Students
WHERE Tid <> 2;

也可以对日期或文本进行比较运算。

实例:在Students表中,查出1999年后出生的学生。

SELECT *
FROM Students
WHERE Sage >= '1999-01-01';
-- 注意日期要用引号包裹

2、AND, OR运算符

如果我们有多个筛选条件,就需要用AND、OR运算符连接。

实例:在Students表中,查出1999年后出生,并且性别为女的学生。

SELECT *
FROM Students
WHERE Sage >= '1999-01-01' AND Ssex='女';

如果题目是:查出Students表中,1999年后出生,或者性别为女的学生,就应该用OR来连接了。

如果AND和OR同时使用,要注意AND优先级高于OR,但最好加括号,更加清晰一些。


3、IN运算符

如果我们想要查出姓名为“宁一、柠七、柠九”三个学生,可以这样来查询。

SELECT *
FROM Students
WHERE Sname = '宁一'
  OR Sname = '柠七'
  OR Sname = '柠九';

但这样还是太麻烦了,如果遇到这种多重相等的情况,我们可以使用IN运算符来简化筛选条件

比如上面语句可以写成下面这样。

SELECT *
FROM Students
WHERE Sname IN ('宁一','柠七','柠九');

IN 前面也可以加NOT,会查询出不属于列表的记录。


4、BETWEEN运算符

如果我们要表达范围行的条件,比如查询Sid是2到5之间(包括2和5)的学生,可以这样写:

SELECT *
FROM Students
WHERE Sid >=2 AND Sid <=5;

也可以用BETWEEN运算符简化。

SELECT *
FROM Students
WHERE Sid BETWEEN 2 AND 5;

要注意,BETWEEN和AND要结合使用,不能写作BETWEEN (1000, 3000),别和IN的写法搞混。

BETWEEN … AND区间是包含两端点的,也可以表示日期范围。

实例:在Students表中找出1999年2月到3月出生的学生。

SELECT *
FROM Students
WHERE Sage BETWEEN '1999-02-01' AND '1999-03-31';


5、LIKE运算符

WHERE子句中可以用 = 来设定获取数据的条件,比如查询名为“宁一”的学生,就可以用Sname = ‘宁一’,但是有时候我们需要获取名字含有“宁”的所有记录,这时候就需要用到LIKE运算符。

LIKE运算符可以搭配下面两种通配符使用:

实例:在Students表中,获取学生姓名含有“宁”的所有记录。

SELECT *
FROM Students
WHERE Sname LIKE '%宁%';

如果是获取最后一个字是“宁”的名字,应该这样写:

Sname LIKE '%宁';

如果是获取名字为三个字,并且中间一个字是“宁”的记录,应该这样写:

Sname LIKE '_宁_';

LIKE前面也可以加NOT。

实例:获取Students表中,名字不含有“宁”的所有记录。

SELECT *
FROM Students
WHERE Sname NOT LIKE '%宁%';


6、 REGEXP正则表达式

REGEXP是 regular expression(正则表达式) 的缩写,主要用来搜索字符串,比 LIKE 运算符适用场景要多一些。

我们讲解几个常用的用法:

--查找姓名包含“宁”的学生
WHERE Sname REGEXP '宁';
--查找姓名是“宁”开头的学生
WHERE Sname REGEXP '^宁';
--查找姓名是“宁”结尾的学生
WHERE Sname REGEXP '宁#39;;
--查找姓名是“宁”或“拧“开头的学生
WHERE Sname REGEXP '^[宁柠]';
--查找学生编号Sid是2到5(包括2和5)的学生
WHERE Sid REGEXP '[2-5]';
--查找学生编号Sid是2到5或者7到9(包括2和5,7和9)的学生
WHERE Sid REGEXP '[2-5]|[7-9]';

实例:查找姓名为“宁一”、“宁儿”或“柠七”、“柠九”的学生

SELECT *
FROM Students
WHERE Sname REGEXP '宁[一儿]|柠[七九]';


7、 IS NULL运算符

有时候MySQL中有空数据,我们用IS NULL运算符来找出空值。

比如找出学生姓名为空的记录。

WHERE Sname IS NULL;

找出学生姓名不为空的记录。

WHERE Sname IS NOT NULL;

作业:在学生表中,找出姓名包含“宁”,学生编号在3-7之间(包含3和7),并且在1997年之前出生的学生记录。

SELECT *
FROM Students
WHERE Sname LIKE "%宁%"
AND Sid BETWEEN 3 AND 7
AND Sage < '1997-01-01';


下节课开始来看看 ORDER BY 排序的相关用法。

关注一下,学习SQL不迷路~

相关推荐

二十三种设计模式之-模板方法模式

这是我写二十三种设计模式第二篇文章。这个系列我将持续写下去,欢迎大家关注,点赞和收藏。模板方法模式1.模板方法模式(TemplateMethodPattern)又叫模板模式,在一个抽象的类中,公开...

从 Java 代码逆向工程生成 UML 类图和序列图

前言本文面向于那些软件架构师,设计师和开发人员,他们想使用IBM?Rational?SoftwareArchitect从Java?源代码来逆向工程生成UML类和序列图。逆向工程经常...

作为程序员,还在手动画流程图、类图?看看这个神器

老板看不懂你写的代码,要求你补充流程图。。。客户看不懂你的代码,要求画流程图。。。新同事看不懂你的代码,要求画流程图。。。此时此刻,你的内心是崩溃的。。。曾几何时,我也和你一样崩溃。。。...

使用 seaborn 绘制 12 类图

你好,我是zhenguo今晚分享一个很不错的seaborn可视化实战入门材料,这个实战教程来自于kaggle,使用的是美国警察开枪数据集,大小1M,一共5个csv文件使用seaborn作...

分享一个从源码快速生成UML类图的插件——PlantUML Parser

前言相信每一位程序员都分析过源码,在分析源码过程中,除了了解代码实现的功能(业务逻辑),还需要深入下去了解程序代码的执行过程以及结构,往往在了解代码执行过程(动态模型)前,先对代码的结构(静态模型)有...

需求分析-类图建模

...

还能这么玩?用VsCode画类图、流程图、时序图、...不要太爽

软件设计中,有好几种图需要画,比如流程图、类图、组件图等,我知道大部分人画流程图一般都会用微软的viso绘制,我之前也是这个习惯。viso画图有个不好的地方是需要时刻去调整线条和边框已达到简洁美观,今...

UML:类图关系总结

UML类图几种关系的总结,泛化=实现>组合>聚合>关联>依赖在UML类图中,常见的有以下几种关系:泛化(Generalization),实现(Reali...

小白进阶之路:一文读懂UML-类图

UML类图(UnifiedModelingLanguageClassDiagram)是一种用于可视化和描述系统中类、属性、方法以及它们之间关系的图形化表示方法。我在大学时,学习这个知识总是容易...

餐饮系统大拆解:用类图拆解员工结构与工作职责(1)

编辑导语:利用类图这一方式,产品经理可以更清晰地梳理设计思路,进而推动后续方案的迭代优化,同时结合类图梳理,团队内也能降低沟通成本。具体应该如何拆解?本篇文章里,作者结合餐饮系统,对类图拆解和梳理做了...

软件开发设计文档之「类图」

对象是系统中用来描述客观事物的一个实体,它由对象标识(名称)、属性(状态、数据、成员变量)和服务(操作、行为、方法)三个要素组成,它们被封装为一个整体,以接口的形式对外提供服务。而类则是对具有相同属性...

如何绘制「UML类图」?附内容详解和优质实例分析!

下面这篇文章是笔者整理分析的关于如何绘制「UML类图」的相关内容,大家一起来看看吧!UML图有很多种,但是并非必须掌握所有的UML图,才能完整系统分析和设计工作。一般说来,在UML图中,只要掌握类图、...

UML统一建模语言系列二:类图设计方法及最佳实践

一、前言...

类图(Class Diagram)

类图(ClassDiagram):类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。类一般由三部分组成:类名(Class):每个类都必须有一个...

类图怎么画?简单快速绘制类图的软件

类图是显示模型中的类、类的内部结构和其他类的关系的图表,用来描述系统的结构化设计。类图是由类、包等元素和内容相互连接组成,是最常用的UML图。类图是描述系统中的类以及它们之间的关系的图表,它的主要作用...

取消回复欢迎 发表评论: