首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第1章 数据库和SQL
1-1 数据库是什么
我们身边的数据库
为什么DBMS那么重要
DBMS的种类
1-2 数据库的结构
RDBMS的常见系统结构
表的结构
1-3 SQL概要
标准SQL
SQL语句及其种类
SQL的基本书写规则
1-4 表的创建
表的内容的创建
数据库的创建(CREATE DATABASE语句)
表的创建(CREATE TABLE语句)
命名规则
数据类型的指定
约束的设置
1-5 表的删除和更新
表的删除(DROP TABLE语句)
表定义的更新(ALTER TABLE语句)
向Product表中插入数据
第2章 查询基础
2-1 SELECT语句基础
列的查询
查询出表中所有的列
为列设定别名
常数的查询
从结果中删除重复行
根据WHERE语句来选择记录
注释的书写方法
算术运算符
需要注意NULL
比较运算符
对字符串使用不等号时的注意事项
不能对NULL使用比较运算符
2-3 逻辑运算符
NOT运算符
AND运算符和OR运算符
通过括号强化处理
逻辑运算符和真值
含有NULL时的真值
第3章 聚合与排序
3-1 对表进行聚合查询
聚合函数
计算表中数据的行数
计算NULL之外的数据的行数
计算合计值
计算平均值
计算值和小值
使用聚合函数删除重复值(关键字DISTINCT)
3-2 对表进行分组
GROUP BY子句
聚合键中包含NULL的情况
使用WHERE子句时GROUP BY的执行结果
与聚合函数和GROUP BY子句有关的常见错误
3-3 为聚合结果指定条件
HAVING子句
HAVING子句的构成要素
相对于HAVING子句,更适合写在WHERE子句中的条件
3-4 对查询结果进行排序
ORDER BY子句
指定升序或降序
指定多个排序键
NULL的顺序
在排序键中使用显示用的别名
ORDER BY子句中可以使用的列
不要使用列编号
当前位置:
首页>>
技术小册>>
SQL基础教程(上)
小册名称:SQL基础教程(上)
### 逻辑运算符和真值 在SQL(Structured Query Language,结构化查询语言)中,逻辑运算符扮演着至关重要的角色,它们用于在查询中执行条件判断,从而根据这些条件筛选、过滤或组合数据。理解逻辑运算符及其如何与真值(true或false)一起工作,是掌握SQL查询逻辑、构建复杂查询语句的基础。本章将深入探讨SQL中的逻辑运算符,包括它们的用法、优先级以及在实际查询中的应用。 #### 一、逻辑运算符概述 逻辑运算符主要用于连接或修改条件表达式,以形成更复杂的逻辑判断。在SQL中,常见的逻辑运算符包括: 1. **AND**:逻辑与运算符,要求所有条件都必须为真(true),整个表达式才为真。 2. **OR**:逻辑或运算符,只要有一个条件为真,整个表达式就为真。 3. **NOT**:逻辑非运算符,用于反转条件的真值,即如果条件为真,则NOT条件为假;反之亦然。 #### 二、真值的概念 在逻辑运算中,真值(truth value)是指逻辑表达式的结果,它只能是两种状态之一:真(true)或假(false)。在SQL中,真值通常通过比较运算符(如=、<>、>、<、>=、<=等)的结果来表示。例如,`1 = 1`的结果是真(true),而`1 = 2`的结果是假(false)。 #### 三、逻辑运算符的详细用法 ##### 3.1 AND运算符 `AND`运算符用于确保所有指定的条件都满足时,整个表达式才为真。这在需要同时满足多个条件的查询中非常有用。 **示例**:查询库存中数量大于100且价格低于50的商品。 ```sql SELECT * FROM products WHERE quantity > 100 AND price < 50; ``` 在这个查询中,只有同时满足`quantity > 100`和`price < 50`这两个条件的商品才会被选中。 ##### 3.2 OR运算符 `OR`运算符用于连接两个或多个条件,只要其中一个条件为真,整个表达式就为真。这在需要满足多个条件中的至少一个时非常有用。 **示例**:查询库存中数量大于100或价格低于50的商品。 ```sql SELECT * FROM products WHERE quantity > 100 OR price < 50; ``` 这个查询会返回所有数量大于100的商品,以及所有价格低于50的商品,包括同时满足这两个条件的商品。 ##### 3.3 NOT运算符 `NOT`运算符用于反转其后条件的真值。如果条件为真,则`NOT`条件为假;如果条件为假,则`NOT`条件为真。 **示例**:查询库存中不是由供应商ID为1提供的商品。 ```sql SELECT * FROM products WHERE NOT supplier_id = 1; ``` 这个查询会返回所有`supplier_id`不等于1的商品。 #### 四、逻辑运算符的优先级 在SQL中,逻辑运算符的优先级决定了它们如何被组合和评估。默认情况下,`NOT`运算符的优先级最高,其次是`AND`,最后是`OR`。这意味着在没有括号明确指定优先级的情况下,`NOT`会首先被评估,然后是`AND`,最后是`OR`。 **示例**:考虑以下查询,它试图找出库存中数量大于100或价格低于50且不是由供应商ID为1提供的商品。 ```sql SELECT * FROM products WHERE quantity > 100 OR price < 50 AND NOT supplier_id = 1; ``` 由于`AND`的优先级高于`OR`,这个查询实际上会先评估`price < 50 AND NOT supplier_id = 1`,然后再与`quantity > 100`进行`OR`运算。这可能导致与预期不符的结果。为了明确指定优先级,应该使用括号: ```sql SELECT * FROM products WHERE (quantity > 100 OR price < 50) AND NOT supplier_id = 1; ``` 这样,查询就会先评估括号内的条件组合(即数量大于100或价格低于50),然后再检查这些商品是否不是由供应商ID为1提供的。 #### 五、逻辑运算符在复杂查询中的应用 逻辑运算符不仅限于简单的条件组合,它们还可以与SQL的其他功能(如子查询、聚合函数、CASE语句等)结合使用,构建出功能强大、复杂的查询语句。 **示例**:查询库存中销量(基于订单数量)最高的前10个商品,但这些商品的库存量必须大于其平均销量的两倍。 这个查询需要多个步骤,包括计算每个商品的平均销量、筛选库存量大于平均销量两倍的商品,并限制结果数量为前10个。这里不直接给出完整的SQL代码,但逻辑上,你会使用到`GROUP BY`、`AVG()`聚合函数、`HAVING`子句(用于过滤分组后的结果)、`WHERE`子句(结合逻辑运算符进行条件筛选)以及可能的`LIMIT`或`TOP`子句(取决于数据库系统)来限制结果数量。 #### 六、总结 逻辑运算符和真值是SQL查询中不可或缺的部分,它们允许我们根据复杂的逻辑条件筛选和组合数据。通过理解`AND`、`OR`、`NOT`运算符的用法、优先级以及它们如何与真值一起工作,我们可以构建出既强大又灵活的查询语句,满足各种数据检索和分析的需求。在实际应用中,结合使用逻辑运算符、比较运算符、聚合函数、子查询等SQL特性,可以解锁数据的无限潜力,为决策提供有力的支持。
上一篇:
通过括号强化处理
下一篇:
含有NULL时的真值
该分类下的相关小册推荐:
高性能的Postgres SQL
PostgreSQL入门教程
SQL基础教程(下)
SQL基础教程(中)