如何使用SQL系列 之 如何在SQL中使用比较运算符和IS NULL运算符

这篇具有很好参考价值的文章主要介绍了如何使用SQL系列 之 如何在SQL中使用比较运算符和IS NULL运算符。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

在某些结构化查询语言 (SQL)语句中,WHERE子句可以用来限制给定操作会影响哪些行。他们通过定义特定的条件来做到这一点,这些条件被称为搜索条件,每一行必须满足才会受到影响。搜索条件由一个或多个谓词组成,它们是特殊的表达式,计算结果为“true”、“false”或“unknown”,并且操作只影响那些WHERE子句中的每个谓词计算结果为“true”的行。

SQL允许用户编写包含各种不同类型谓词的搜索条件,每种谓词都使用特定的操作符来计算行。本指南将概述两种类型的谓词及其使用的操作符:比较操作符IS NULL操作符。

虽然本指南在示例中只使用SELECT语句,但这里解释的概念可以用于许多SQL操作。特别是,WHERE子句及其搜索条件是UPDATEDELETE操作的关键组成部分。

前期准备

为了学习本指南,你需要一台运行某种使用SQL的关系数据库管理系统(RDBMS)的计算机。

注意:请注意,许多RDBMS使用它们自己独特的SQL实现。虽然本教程中概述的命令适用于大多数RDBMS,但如果你在MySQL以外的系统上测试它们,确切的语法或输出可能会有所不同。

你还需要一个装载了一些示例数据的数据库和表,可以在其中练习使用相关命令。

连接到MySQL并设置一个示例数据库

如果SQL数据库系统运行在远程服务器上,请从本地设备SSH到服务器:

ssh sammy@your_server_ip

然后打开MySQL服务器提示符,将==sammy==替换为你的MySQL用户账户的名称:

mysql -u sammy -p

创建一个名为comparison_null_db的数据库:

CREATE DATABASE comparison_null_db;

如果数据库成功创建,您将收到这样的输出:

OutputQuery OK, 1 row affected (0.01 sec)

要选择comparison_null_db数据库,运行以下USE语句:

USE comparison_null_db;
OutputDatabase changed

选择comparison_null_db后,在其中创建一个表。

为了跟随本指南中使用的例子,想象一下你和你的一群朋友都决定变得更加活跃,并把跑步作为一种锻炼。为此,你的朋友都设定了下个月想跑多少英里的个人目标。你决定在一个SQL表中记录朋友的里程目标,以及他们实际跑的英里数,这个表包含以下三列:

  • name:每个朋友的名字,使用varchar数据类型表示,不超过15个字符
  • goal:每个朋友希望在过去的一个月里跑多少英里的目标,使用int数据类型表示为整数
  • result:每个朋友在一个月里最终跑了多少英里,同样用int表示

运行下面的CREATE TABLE语句来创建一个名为running_goals的表,它包含以下三列:

CREATE TABLE running_goals (
name varchar(15),
goal int,
result int
);
OutputQuery OK, 0 rows affected (0.012 sec)

然后加载包含一些示例数据的running_goals表。运行下面的INSERT INTO操作来添加7行数据,代表你的7个朋友,他们的运行目标和结果:

INSERT INTO running_goals
VALUES
('Michelle', 55, 48),
('Jerry', 25, NULL),
('Milton', 45, 52),
('Bridget', 40, NULL),
('Wanda', 30, 38),
('Stewart', 35, NULL),
('Leslie', 40, 44);
OutputQuery OK, 7 rows affected (0.004 sec)
Records: 7 Duplicates: 0 Warnings: 0

注意,其中三行result的值是NULL。在这个例子中,假设这些朋友只是没有报告他们过去一个月的跑步英里数,所以他们的result值被输入为NULL

有了这些,你就可以开始学习如何在SQL中使用比较和IS NULL操作符了。

理解WHERE语句

在任何SQL操作,读取数据从现有表,您可以遵循“从”与“地方”条款来限制数据的操作会影响到什么。WHERE子句通过定义一个搜索条件来实现这一点;不满足条件的行被排除在外,而满足条件的行则被包含在内。

一个搜索条件由一个或多个谓词或表达式组成,这些表达式可以计算一个或多个值表达式并返回“true”、“false”或“unknown”的结果。在SQL中,值表达式——有时也称为标量表达式——是任何返回单个值的表达式。值表达式可以是字面量,如字符串、数值、数学表达式或列名。请注意,几乎总是在WHERE子句谓词中至少有一个值表达式是操作的FROM子句中引用的表中的列的名称。

当运行包含WHERE子句的SQL查询时,DBMS将对FROM子句定义的逻辑表中的每一行应用搜索条件。然后,它将只返回所有谓词在搜索条件中求值为“true”的行。

SQL标准定义了18种类型的谓词,尽管不是每个RDBMS在其SQL实现中都包含每种谓词。下面是5种最常用的谓词类型,以及对每种类型及其使用的操作符的简要说明。

比较:比较谓词比较一个值表达式与另一个值表达式;在查询中,几乎总是至少有一个这样的值表达式是列的名称。这7个比较运算符是:

  • =: 测试两个值是否相等
  • !=: 测试两个值是否不相等
  • <>: 测试两个值是否不相等
  • <: 测试第一个值是否小于第二个值
  • >: 测试第一个值是否大于第二个值
  • <=: 测试第一个值是否小于或等于第二个值
  • >=: 测试第一个值是否大于或等于第二个值

Null:使用IS Null 操作符的谓词测试给定列中的值是否为Null。范围:范围谓词使用BETWEEN操作符测试一个值表达式是否落在两个其他值之间。成员关系:这种类型的谓词使用IN操作符测试一个值是否属于给定集合。模式匹配:模式匹配谓词使用LIKE操作符测试一个值是否与包含通配符的字符串模式匹配

正如引言中提到的,本指南重点介绍如何使用SQL的BETWEENin操作符来过滤数据。如果你想学习如何使用比较或IS NULL操作符,我们建议你看看这篇关于如何在SQL中使用比较和IS NULL操作符的指南。或者,如果你想学习如何使用like操作符来基于包含通配符的字符串模式过滤数据,请跟随我们的指南在SQL中如何使用通配符。最后,如果你想了解更多关于WHERE子句的信息,你可能会对我们关于如何在SQL中使用WHERE子句的教程感兴趣。

比较谓词

WHERE子句比较谓词使用六个比较操作符中的一个来比较两个值表达式。它们通常遵循如下语法:

SELECT column_list
FROM table_name
WHERE column_name OPERATOR value_expression;

WHERE关键字后面是一个值表达式,在大多数SQL操作中,它是一个列的名称。在搜索条件中提供列名作为值表达式,告诉RDBMS使用该列中每一行的值作为该行按搜索条件迭代的值表达式。因为数据库系统按顺序对每一行应用搜索条件,所以比较操作符将根据指定列中的值的搜索条件是否为真来包含或过滤某一行。

为了说明,运行以下查询,它将从running_goals表的namegoal列中返回值。注意,WHERE子句使用了一个比较谓词,它将导致查询仅返回goal值等于40的行:

SELECT name, goal
FROM running_goals
WHERE goal = 40;

你的朋友只有两个目标是在过去的一个月里恰好跑40公里,因此这个查询只返回这两行:

Output+---------+------+
| name    | goal |
+---------+------+
| Bridget |   40 |
| Leslie  |   40 |
+---------+------+
2 rows in set (0.00 sec)

为了说明其他比较操作符是如何工作的,运行以下查询,这些查询与前一个示例相同,只是每个查询使用不同的比较操作符。

<>操作符测试两个值是否相等,因此这个查询返回goal值不等于40的每一行:

SELECT name, goal
FROM running_goals
WHERE goal <> 40;
Output+----------+------+
| name     | goal |
+----------+------+
| Michelle |   55 |
| Jerry    |   25 |
| Milton   |   45 |
| Wanda    |   30 |
| Stewart  |   35 |
+----------+------+
5 rows in set (0.00 sec)

<操作符测试第一个值表达式是否小于第二个值表达式:

SELECT name, goal
FROM running_goals
WHERE goal < 40;
Output+---------+------+
| name    | goal |
+---------+------+
| Jerry   |   25 |
| Wanda   |   30 |
| Stewart |   35 |
+---------+------+
3 rows in set (0.00 sec)

> 操作符用于测试第一个值表达式是否大于第二个:

SELECT name, goal
FROM running_goals
WHERE goal > 40;
Output+----------+------+
| name     | goal |
+----------+------+
| Michelle |   55 |
| Milton   |   45 |
+----------+------+
2 rows in set (0.00 sec)

<=操作符测试第一个值是否小于或等于第二个值:

SELECT name, goal
FROM running_goals
WHERE goal <= 40;
Output+---------+------+
| name    | goal |
+---------+------+
| Jerry   |   25 |
| Bridget |   40 |
| Wanda   |   30 |
| Stewart |   35 |
| Leslie  |   40 |
+---------+------+
5 rows in set (0.00 sec)

>=操作符用于测试第一个值是否大于或等于第二个值:

SELECT name, goal
FROM running_goals
WHERE goal >= 40;
Output+----------+------+
| name     | goal |
+----------+------+
| Michelle |   55 |
| Milton   |   45 |
| Bridget  |   40 |
| Leslie   |   40 |
+----------+------+
4 rows in set (0.00 sec)

等价操作符(’ = ')和不等价操作符(<>)可以像预期的那样处理字符串值。下面的查询返回每一行的name值等于'Leslie'

SELECT name
FROM running_goals
WHERE name = 'Leslie';

因为表中只有一个朋友名为Leslie,所以这个查询只返回这一行:

Output+--------+
| name   |
+--------+
| Leslie |
+--------+
1 row in set (0.00 sec)

在比较字符串值时,<><=>=操作符都会计算字符串的字母关系。换句话说,如果编写一个谓词来测试一个字符串是否“小于”另一个字符串,那么测试的是第一个字符串是否在第二个字符串的字母顺序之前。类似地,如果谓词测试一个字符串是否“大于”另一个字符串,就是测试第一个字符串是否在字母顺序上排在第二个字符串之后。

为了说明这一点,运行下面的查询。这将返回name值“小于”字母“M”的每一行的namegoal值。换句话说,对于name值在字母顺序上排在M之前的每一行,搜索条件将计算为true:

SELECT name
FROM running_goals
WHERE name < 'M';
Output+---------+
| name    |
+---------+
| Jerry   |
| Bridget |
| Leslie  |
+---------+
3 rows in set (0.00 sec)

注意,这个结果集不包含MichelleMilton。这是因为,从字母顺序上讲,单个字母“M”出现在任何以“M”开头且包含多个字母的字符串之前,因此这两个朋友没有出现在结果集中。

Null

在SQL中,NULL是一个保留关键字,用于表示缺失或未知值。Null是一个状态,而不是一个实际的值;它代表零个或一个空字符串。

你可以使用IS NULL操作符来测试给定的值表达式是否为NULL:

. . . 
WHERE column_name IS NULL
. . .

使用这种类型的谓词,数据库系统将查看指定列中的每一行的值,并评估每个值是否为Null。如果列中的值确实为Null,那么搜索条件将为这些行求值为“true”,它们将包含在结果集中。

为了说明,运行以下返回nameresult列的查询:

SELECT name, result
FROM running_goals
WHERE result IS NULL;

这个查询中的WHERE子句中的搜索条件测试了每一行的result值是否为Null。如果是,则谓词的计算结果为" true ",结果集中就包含了这一行:

Output+---------+--------+
| name    | result |
+---------+--------+
| Jerry   |   NULL |
| Bridget |   NULL |
| Stewart |   NULL |
+---------+--------+
3 rows in set (0.00 sec)

因为你的三个朋友还没有报告他们在过去的一个月里最终跑了多少英里,当你向表中加载数据时,这些值被记录为NULL。因此,查询中的搜索条件求值为“true”,因此结果集中只包含这三行。

总结

遵循本指南,您学习了如何使用SQL的比较和“为空”操作符“,”条款来限制一个操作会影响的行。虽然这里显示的命令在大多数关系数据库上都可以工作。但请注意,每个SQL数据库都使用自己独特的SQL标准实现。关于每个命令及其所有选项的更完整描述,读者可以查阅相应DBMS的官方文档。文章来源地址https://www.toymoban.com/news/detail-696039.html

到了这里,关于如何使用SQL系列 之 如何在SQL中使用比较运算符和IS NULL运算符的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包