【数据库】SQL 过滤数据

过滤数据

  • 简单过滤
    • where 子句操作符
    • 检查单个值
    • 范围值检擦
    • 空值检查
  • 高级过滤
    • 多个过滤条件
    • 求值顺序
    • IN 操作符
    • NOT 操作符

s q l sql sql 语句中,通过 WHERE 子句指定搜索条件进行过滤。

简单过滤

  • 包含:WHEREBETWEENIS NULL

where 子句操作符

操作符 Value 操作符 value
= 等于 > 大于
<> 不等于 >= 大于等于
!= 不等于 !> 不大于
< 小于 BETWEEN 在指定的两个值之间
<= 小于等于 IS NULL 为 NULL 值
!< 不小于

!=<> 通常可以互换,但是并非所有的 DBMS 都支持两种不等于操作符,但是都至少支持其中一种操作符。读者选择不同的 DBMS 时需注意。


检查单个值

e . g . e.g. e.g. 列出所有价格小于10美元的产品;

SELECT prod_name, prod_price
FROM Products
WHERE prod_price < 10;

e . g . e.g. e.g. 列出所有不是供应商 DLL01 制造的产品;

SELECT vend_id, prod_name
FROM Products
WHERE vend_id <> 'DLL01'

范围值检擦

范围值的检查使用 BETWEEN 操作符,示例如下;

e . g . e.g. e.g. 检索价格在 5 美元到 10 美元之间的所有产品;

SELECT prod_name, prod_price
FROM Products
WHERE prod_price BETWEEN 5 AND 10;
  • BETWEEN 匹配范围中所有的值,包括开始值与结束值。

空值检查

空值 NULL,是无值,与字段为0、空字符串和仅仅空格不同。当一个列不包含值时,称为包含空值。

e . g . e.g. e.g. 检索有没有价格为空值;

SELECT prod_name
FROM Products
WHERE prod_price IS NULL;

高级过滤

  • 包含:NOTINANDOR

多个过滤条件

AND

  • 多个过滤条件中间都需要添加 AND 关键字;
  • AND 操作符指示 DBMS 检索匹配同时满足前后条件的行。

e . g . e.g. e.g. 检索商品由供应商 DDL01 制造且价格小于等于 4 美元的所有商品代码、名称和价格;

SELECT prod_id, prod_name, prod_price
FROM Products
WHERE vend_id = 'DLL01' AND prod_price <= 4;

OR

  • OR 操作符指示 DBMS 检索匹配满足前后任一条件的行;

e . g . e.g. e.g. 检索商品由供应商 DDL01 制造或者 BRS01 制造的名称和价格;

SELECT prod_name, prod_price
FROM Products
WHERE vend_id = 'DDL01' or vend_id = 'BRS01';

求值顺序

AND + OR 在多个过滤条件组合时,AND 的优先级高于 OR 优先级。

WHERE vend_id = 'DLL01' OR vend_id = 'BRS01' AND prod_price >= 10;
-- 上述过滤逻辑等同于:
WHERE vend_id = 'DLL01' OR (vend_id = 'BRS01' AND prod_price >= 10);
-- 而不等同于:
WHERE (vend_id = 'DLL01' OR vend_id = 'BRS01') AND prod_price >= 10;

读者理解上述三个语句的逻辑,即明白求值顺序。总而言之,由于 AND 优先级高于 OR 优先级,过滤语句会优先执行 AND 语句的前后的组合,即 A OR (B AND C) ;


IN 操作符

  • IN 操作符后跟随一个范围值,范围内每个条件都可以进行匹配。

e . g . e.g. e.g. 检索由供应商 DLL01 和 BRS01 制造的所有产品。

SELECT prod_name, prod_price
FROM Products
WHERE vend_id IN ('DLL01', 'BRS01')
  • 效果同本文上述部分通过 OR 语句连接的过滤语句;但是对比来看,IN 操作符的语法更加直观且清晰;
  • IN 操作符也可以包含其他 SELECT 语句,动态地建立 WHERE 子句;
  • IN 操作符理论上比一组 OR 操作符执行得更快。

NOT 操作符

  • NOT 操作符否定其后所跟得条件,结果剔除满足其后所跟条件的行;

e . g . e.g. e.g. 检索不是由供应商 DDL01 制造的其他所有商品名称;

SELECT prod_name
FROM Products
WHERE NOT vend_id = 'DLL01';


以上

你可能感兴趣的:(计算机基础知识,数据库,sql)