TOP

SQL-课程 4. 数据过滤 (WHERE)

YouLibreCalc for Excel logo

在大多数情况下,不需要接收所有记录,而只需接收那些满足特定条件的记录。 这就是为什么SQL中有一个特殊的运算符WHERE来进行采样过滤。


1.通过WHERE运算符进行简单过滤。

例如,让我们从表中选择仅与特定产品相关的记录。 为此,我们指定一个附加选择参数,该参数将按“产品”列过滤值。

选择文本值的查询示例:

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product = 'Bikes'

正如您所看到的,选择条件用单引号引起来,这是过滤文本值时必需的。 过滤数值时不需要引号。

选择数值的查询示例:

Run SQLSELECT * 
FROM Sumproduct 
WHERE Amount > 40000 
ORDER BY Amount

在此示例中,我们选择了销售收入超过 40,000 美元的记录,并按“金额”字段对所有记录进行升序排序。

下表列出了 SQL 支持的条件语句:

操作标志 价值
= 等于
<> 不等于
< 较少的
<= 小于或等于
> 更多的
>= 大于或等于
BETWEEN 两个值之间
IS NULL 没有记录

2.按值范围过滤(BETWEEN)

运算符BETWEEN用于选择位于特定范围内的数据。在下一个查询中,“金额”字段中介于 1,000 美元和 2,000 美元(含)之间的所有值都将被选中。

Run SQLSELECT * 
FROM Sumproduct 
WHERE Amount BETWEEN 1000 AND 2000

排序顺序将取决于请求中字段的顺序。也就是说,在我们的例子中,数据将首先按 Amount 列排序,然后按 City 排序。

3. 空记录的选择(IS NULL)

在 SQL 中,有一个特殊的运算符用于选择空记录(称为 NULL)。空条目是表中未输入字符的任何单元格。如果单元格中输入0或空格,则认为该字段已填充。

SELECT * 
FROM Sumproduct 
WHERE Amount IS NULL

在上面的示例中,我们故意删除了 Amount 字段中的两个值来演示 NULL 运算符。

4. 高级过滤(AND、OR)

SQL 语言不限于按一种条件进行过滤,出于您自己的目的,您可以使用相当复杂的结构来按多种条件同时选择数据。 为此,SQL 有额外的运算符来扩展 WHERE 运算符的功能。 这些运算符是:AND、OR、IN、NOT。 我们将举几个例子来说明这些运算符的操作。

Run SQLSELECT * 
FROM Sumproduct 
WHERE Amount > 40000 AND City = 'Toronto'
Run SQLSELECT * 
FROM Sumproduct 
WHERE Month = 'April' OR Month = 'March'

让我们组合 AND 和 OR 运算符。 为此,我们将精选 3 月份出售的自行车(Bikes)和溜冰鞋(Skates)。

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product = 'Bikes' OR Product = 'Skates' AND Month = 'March'

我们可以看到我们的样本中包含了很多值(除了三月,还有一月、二月和四月)。 是什么原因? 事实上,SQL 具有命令执行优先级。 也就是说,AND 运算符的优先级高于 OR 运算符,因此首先选择 3 月份售出的溜冰鞋的记录,然后选择所有与自行车相关的记录。

因此,为了获得正确的采样,我们需要更改命令执行优先级。 为此,我们将使用括号,就像数学中一样。 然后,将首先处理括号中的运算符,然后再处理其余的运算符。

Run SQLSELECT * 
FROM Sumproduct 
WHERE (Product = 'Bikes' OR Product = 'Skates') AND Month = 'March'

5.高级过滤(IN运算符)

Run SQLSELECT * 
FROM Sumproduct 
WHERE ID IN (4, 12, 58, 67)

IN 运算符执行与 OR 相同的功能,但有几个优点:

  • 当处理长列表时,带有 IN 的句子更容易阅读;
  • 使用更少的运算符,从而加快请求处理速度;
  • IN 最重要的优点是,在其构造中您可以使用附加构造 SELECT,该构造
  • відкриває великі можливості для створення складних підзапитів.

    6.高级过滤(NOT运算符)

    Run SQLSELECT * 
    FROM Sumproduct 
    WHERE NOT City IN ('Toronto', 'Montreal')
    

    关键字NOT允许您从样本中删除不必要的值。 另外,它的特点是放在参与过滤的列名之前,而不是之后。