读SQL学习指南(第3版)笔记05_过滤

1. 不需要考虑排除任何列

1.1. 清除数据表中所有的内容

1.2. 暂存新数据仓库的数据

1.3. 向数据表中新添一列后

1.4. 修改数据表中的所有行

1.5. 检索消息队列表中的所有行

2. where子句

2.1. 可以在其中指定一个或多个过滤条件,用于限制SQL语句处理的行数

2.2. 使用括号

2.2.1. 同时使用运算符and和or的3个或以上条件,应该使用括号向数据库服务器和其他阅读代码的人表明意图

2.3. 使用not运算符

3. 构建条件

3.1. 条件由一个或多个表达式并通过一个或多个运算符组合而成

3.2. 表达式

3.2.1. 数字

3.2.2. 数据表或视图中的列

3.2.3. 字符串字面量

3.2.4. 内建函数

3.2.4.1. concat('Learning', ' ', 'SQL')

3.2.5. 子查询

3.2.6. 表达式列表

3.2.6.1. ('Boston', 'New York', 'Chicago')

3.3. 运算符

3.3.1. 比较运算符

3.3.1.1. =、!=、<、>、<>、like、in和between

3.3.2. 算术运算符

3.3.2.1. +、−、*和/

4. 条件类型

4.1. 相等条件

4.1.1. 一个表达式与另一个表达式之间的相等关系

4.2. 不等条件

4.2.1. 用于断言两个表达式之间的不等关系

4.3. 范围条件

4.3.1. 检查表达式的值是否处于某个范围

4.3.2. 通常用于数值型或时间型数据

4.3.3. between运算符

4.3.3.1. 当需要同时限制范围的上限和下限时,可以选择使用between运算符构建单个查询条件,而不用两个单独的条件

4.3.3.2. 首先必须指定范围的下限(在between之后),然后指定范围的上限(在and之后)

4.3.4. 字符串范围

4.3.5. 成员条件

4.4. 匹配条件

4.4.1. 使用通配符

4.4.1.1. 以某个字符开始(或结束)的字符串

4.4.1.2. 以某个子串开始(或结束)的字符串

4.4.1.3. 在字符串中的任意位置包含某个字符的字符串

4.4.1.4. 在字符串中的任意位置包含某个子串的字符串

4.4.1.5. 具备特定格式(无关单个字符)的字符串

4.4.1.6. mysql

 -> SELECT last_name, first_name
    -> FROM customer
    -> WHERE last_name LIKE 'Q%' OR last_name LIKE 'Y%';

4.4.2. 使用正则表达式

4.4.2.1. regexp运算符接受一个正则表达式

4.4.2.1.1. mysql
 -> SELECT last_name, first_name
    -> FROM customer
    -> WHERE last_name REGEXP '^[QY]';
4.4.2.1.2. 该查询现在只包含了使用正则表达式的一个条件,不再是使用通配符的两个条件

4.4.2.2. 在Oracle Database中,使用regexp_like函数代替regexp运算符

4.4.2.3. SQL Server允许正则表达式与like运算符配合使用

5. null

5.1. 没有合适的值

5.1.1. ATM机上的自助交易并不需要employee ID列

5.2. 值未确定

5.2.1. 在创建客户所在行时不知道其ID

5.3. 值未定义

5.3.1. 为某个尚未添加到数据库的产品创建账户

5.4. 表达式可以为null,但不能等于(never equal)null

5.5. 两个null值不相等

5.5.1. 为了测试表达式是否为null,需要使用is null运算符

5.6. 如果要查看某列是否已经被赋值,可以使用is not null运算符

5.7. 使用一个不熟悉的数据库时,最好是找出数据表中哪些列允许出现null,这样就可以在过滤条件中采取适当的措施,以防止遗漏数据

posted @ 2023-08-25 06:40  躺柒  阅读(61)  评论(0编辑  收藏  举报