解锁计算机编程能力的关键是条件流控制if - then - else根据某个布尔(true或false)断言的计算,导致程序执行单独的操作的构造。SQL有自己的条件流控制;SQL Case语句。

条件测试的用心构建对于获得预期的结果很重要:

现实世界的条件测试
程序员将派遣到杂货店,说明“拿出一条面包,如果他们有鸡蛋得到十几个”。回到家回家后,他们宣称“他们有鸡蛋。”

SQL大小写语法

SQL Case具有灵活的语法。它的一般形式提供了一些测试条件和相应的结果。测试条件是在SQL Select WHERE子句中所期望的。可选的ELSE部分允许在上述条件都不满足的情况下指定结果;如果没有ELSE子句,则返回NULL。

CASE WHEN condition_one THEN result_one WHEN condition_two THEN result_two ELSE result_three END;

SQL Case语句从顶部开始处理,求值condition_onefirst(并且,如果为真,返回result_one),然后condition_two(如果是真的,返回result_two),如果这两个条件都不满足,则执行ELSE子句并返回result_three

SQL案例的示例表

这个表格描述了人、他们的位置和他们的订单的权重。(生成这个表的SQL代码在本文的最后给出。自己运行所有的SQL代码SQL小提琴)。

人:

的名字 城市 国家 重量
爱丽丝 剑桥 美国 1
鲍勃 康沃尔郡 英国 13
Clarice. 纽约 美国 25
大卫 基韦斯特 美国 12
伊丽莎白 杰克逊维尔 美国 55
Mobeen 布里克斯顿 英国 One hundred.
怎么办呢 布宜诺斯艾利斯 阿根廷 37

使用SQL案例来运送包

SQL案例有两种“风格”:

  • “搜索大小写”语法,它允许各种布尔操作符(如“小于”或“大于”)
  • “简单情况”语法总是使用“is = to”操作符

SQL Case -搜索Case语法

我们可以使用相等测试操作符,=,通过基于目的地国家做出决定来确定如何将一个包裹发送给我们的每个人员。

SELECT NAME, CITY, COUNTRY CASE WHEN COUNTRY = 'USA' THEN 'USPS' WHEN COUNTRY = 'UK' THEN 'Royal Mail' ELSE 'other international shipper' END AS ShippingMethod FROM People ORDER BY ShippingMethod;

运行这一点的业务逻辑,特别是订单乘坐托运人将托运人组合在一起,导致邮政厅的可操作方向:

的名字 城市 国家 ShippingMethod
鲍勃 康沃尔郡 英国 皇家邮政
Mobeen 布里克斯顿 英国 皇家邮政
爱丽丝 剑桥 美国 美国邮政总局
Clarice. 纽约 美国 美国邮政总局
大卫 基韦斯特 美国 美国邮政总局
伊丽莎白 杰克逊维尔 美国 美国邮政总局
怎么办呢 布宜诺斯艾利斯 阿根廷 其他国际托运人

SQL Case -简单的Case语法

SQL CASE还在测试公共值时提供更简单的语法。以上代码可以以更易于读取,可维护的方式编写。

SELECT NAME, CITY, COUNTRY CASE COUNTRY WHEN 'USA' THEN 'USPS' WHEN 'UK' THEN 'Royal Mail' ELSE 'other international shipper' END AS ShippingMethod FROM People ORDER BY ShippingMethod;

由于简单的大小写语法使用相等操作符,它不能处理空值(技术上是因为NULL = NULL不是“true”,而是“未知”)。欢迎来到三值逻辑。相反,SQL提供了两个函数:合并()NullIf ()

合并()

合并()接受任意数量的参数并返回第一个非空参数,如果所有参数都为空,则返回NULL。因此,调用合并(a, b, c)相当于:

CASE WHEN a IS NOT NULL THEN a WHEN b IS NOT NULL THEN b WHEN c IS NOT NULL THEN c ELSE NULL END

NullIf ()

Nullif ()恰好是两个论点。如果两者都是NULL,则返回null,否则返回第一个参数。呼叫NULLIF(值,0)用于防止致命的零除错误(因为零除的处理方式不同。

使用SQL Case对值进行排序

通过共享需要哪种类型的打包,让我们进一步简化收发室中的工作流程。增加大于,>,而不是,<,等式操作符的条件测试,=,将把包分成时间间隔符合运输要求的重量。

在本例中,区间是一种数学术语,表示对具有相邻值的组进行排序;考虑“小”、“中”和“大”——这是很有用的分类,你可以把衣服分类,避免重叠。

选择名称,城市,国家,重量情况下国家当“美国”然后“USPS”当“英国”“皇家邮政”其他的其他国际托运人作为托运人,当重量> 0和重量< = 10 '小'当重量> 10和重量< = 50那么其他媒介的“大”最终从人们按托运人BoxToUse, BoxToUse;

这将导致

的名字 城市 国家 重量 托运人 蓬勃发展
Mobeen 布里克斯顿 英国 One hundred. 皇家邮政
鲍勃 康沃尔郡 英国 13 皇家邮政 媒介
伊丽莎白 杰克逊维尔 美国 55 美国邮政总局
Clarice. 纽约 美国 25 美国邮政总局 媒介
大卫 基韦斯特 美国 12 美国邮政总局 媒介
爱丽丝 剑桥 美国 1 美国邮政总局
怎么办呢 布宜诺斯艾利斯 阿根廷 37 其他国际托运人 媒介

现在邮政厅拥有迅速处理运费所需的一切。

结论

SQL Case提供了通过比较来控制程序流的能力。

要了解更多关于SQL的信息,请注册我们的SQL 188金宝搏安不安全Nanodgree计划描述在细节

开始学习

另一个现实世界的条件测试
程序员的伴侣说:“当你在杂货店购买一些鸡蛋。”程序员留在家里。

SQL案例示例表代码

以下SQL将构建和填充本文中使用的示例表。

CREATE TABLE People (NAME VARCHAR(33), CITY VARCHAR(33), COUNTRY VARCHAR(33), WEIGHT INT);插入人值(“爱丽丝”、“剑桥”、“美国”,1),(“鲍勃”、“康沃尔郡”,“英国”,13),(“克拉丽斯”,“纽约”,“美国”,25),(‘大卫’,‘基韦斯特’,‘美国’,12),(“伊丽莎白”,杰克逊维尔,“美国”,55),(“Mobeen”、“布”,“英国”,100年),(“怎么办”,布宜诺斯艾利斯,阿根廷,37);