Coursera 笔记

Module 03 · Intermediate SQL

Using String Patterns and Ranges使用 SELECT 语句中的字符串模式检索数据

Coursera ↗

欢迎学习本课程,本视频将介绍一些从关系数据库表中检索数据的高级技术。


学习目标

完成本课程后,您将能够描述如何通过使用字符串模式、范围或值集合来简化 SELECT 语句。

数据检索基础

数据库管理系统(DBMS)的主要目的不仅是存储数据,还包括促进数据的检索。

  • 最简单的 SELECT 语句形式:
    SQL
    SELECT * FROM table_name;
    
    例如,SELECT * FROM Book 将返回 Book 表中所有列的所有数据行(元组)。
  • 检索列子集:
    您可以只检索部分列,例如:
    SQL
    SELECT Book_ID, Title FROM Book;
    
  • 使用 WHERE 子句限制结果集:
    您可以使用 WHERE 子句来限制返回的结果集,该子句需要一个评估结果为真、假或未知(True, False, or Unknown)的谓词 (Predicate)(即条件)。
    例如:
    SQL
    SELECT Title FROM Book WHERE Book_ID = 'B1';
    

一、使用字符串模式 (LIKE谓词)

当您不清楚 WHERE 子句中需要指定的确切值,但知道该值符合某种模式时,可以使用字符串模式来搜索匹配条件的数据行。

LIKE** 谓词**

  • LIKE 谓词用于 WHERE 子句中,以便在列中搜索特定模式。
  • 百分号 (%) 被用作通配符 (Wildcard Character),用于替代其他字符。
    • % 可以位于模式之前、之后,或者前后都放置。

LIKE** 示例**

假设我们不记得作者的全名,但记得他们的名字 (firstname) 以字母 'R' 开头:

SQL

SELECT firstname 
FROM Author 
WHERE firstname LIKE 'R%';

  • 结果: 此查询将返回 Author 表中所有名字以字母 'R' 开头的行。
  • 示例结果集: 假设返回 Raul 和 Rav 两行数据。

二、使用数值范围 (BETWEEN AND运算符)

当需要检索某个数值范围内的数据时,可以使用 BETWEEN AND 运算符来简化查询。

BETWEEN AND** 运算符**

  • BETWEEN AND 用于比较两个值,指定一个范围。
  • 范围内的值是包含性的 (Inclusive),即包括指定的起始值和结束值。

BETWEEN AND** 示例**

例如,如果我们要检索页数大于或等于 290 且小于或等于 300 的图书列表。

  • 使用比较运算符的写法 (较繁琐):
    SQL
    ... WHERE pages >= 290 AND pages <= 300
    
    
  • 使用 BETWEEN AND 的简化写法:
    SQL
    SELECT * FROM Book 
    WHERE pages BETWEEN 290 AND 300;
    
    
    简化后的 SELECT 语句更容易编写和阅读,但返回的结果集是相同的。

三、使用值集合 (IN运算符)

对于无法归类到范围内的离散数据值,如果需要指定多个相等条件,可以使用 IN** 运算符**来简化查询。

IN** 运算符**

  • IN 运算符允许我们在 WHERE 子句中指定一组值 (a set of values)。
  • 该运算符接受一个表达式列表进行比较。

IN** 示例**

假设我们要检索作者来自澳大利亚 (Australia) 或巴西 (Brazil) 的数据。

  • 传统写法 (较冗长): 需要重复列出两个国家的值。如果国家列表更长(例如加拿大、印度和中国),WHERE 子句会变得非常长。
  • 使用 IN 的简化写法:
    SQL
    SELECT * FROM Author 
    WHERE country IN ('Australia', 'Brazil');
    
    

总结

现在,您已经掌握了如何通过使用以下方式来简化 SELECT 语句:

  • 字符串模式 (LIKE)
  • 范围 (BETWEEN AND)
  • 值集合 (IN)