首页
技术小册
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基础教程(上)
### NOT运算符:深入理解SQL中的逻辑否定 在SQL(Structured Query Language,结构化查询语言)中,`NOT`运算符扮演着至关重要的角色,它是逻辑运算的一种,用于对条件表达式进行否定。简单来说,当你希望选择不符合某个条件的记录时,`NOT`运算符就显得尤为重要。本章将深入探讨`NOT`运算符的基本用法、高级技巧、与其他逻辑运算符的结合使用,以及在实际场景中的应用,旨在帮助读者全面掌握这一基础而强大的SQL工具。 #### 一、NOT运算符的基本语法 `NOT`运算符通常与比较运算符(如`=`、`<>`、`<`、`>`、`<=`、`>=`)、`IN`、`LIKE`、`BETWEEN`等结合使用,用于筛选出不满足指定条件的记录。其基本语法如下: ```sql SELECT column_names FROM table_name WHERE NOT condition; ``` 这里,`condition`可以是任何返回布尔值(真或假)的表达式。使用`NOT`后,如果原条件为真,则整个表达式的结果为假;反之亦然。 #### 二、NOT与比较运算符的结合 ##### 示例1:不等于(<>)的另一种表示 在SQL中,直接使用`<>`表示不等于,但`NOT =`同样可以达到相同的效果。虽然`<>`更为常见,但了解`NOT =`的用法有助于理解`NOT`运算符的运作机制。 ```sql SELECT * FROM employees WHERE NOT salary = 50000; -- 等同于 SELECT * FROM employees WHERE salary <> 50000; ``` 以上查询将返回所有工资不是50000的员工记录。 ##### 示例2:使用NOT与大于(>)或小于(<) 假设你想找出所有库存量不大于50的商品,可以这样写: ```sql SELECT * FROM products WHERE NOT quantity > 50; -- 或者更直接地 SELECT * FROM products WHERE quantity <= 50; ``` 虽然第二个查询更直观,但第一个查询展示了`NOT`与比较运算符结合使用的灵活性。 #### 三、NOT与IN、LIKE、BETWEEN的结合 ##### NOT IN `NOT IN`用于选择不在指定列表中的记录。 ```sql SELECT * FROM orders WHERE order_id NOT IN (101, 102, 103); ``` 这将返回所有订单ID不是101、102、103的订单记录。 ##### NOT LIKE `NOT LIKE`用于筛选不匹配特定模式的字符串。 ```sql SELECT * FROM customers WHERE customer_name NOT LIKE 'A%'; ``` 此查询将返回所有名字不以“A”开头的客户记录。 ##### NOT BETWEEN `NOT BETWEEN`用于选择不在指定范围内的记录。 ```sql SELECT * FROM sales WHERE sale_date NOT BETWEEN '2023-01-01' AND '2023-01-31'; ``` 这将返回所有销售日期不在2023年1月份的销售记录。 #### 四、NOT与逻辑运算符的结合 在SQL中,除了`NOT`,还有`AND`、`OR`两个逻辑运算符。`NOT`可以与它们结合使用,构建更复杂的查询条件。 ##### 示例:NOT与AND的结合 ```sql SELECT * FROM employees WHERE NOT (department_id = 10 AND salary > 60000); -- 等同于 SELECT * FROM employees WHERE department_id <> 10 OR salary <= 60000; ``` 以上查询返回所有不在部门ID为10且工资不大于60000的员工记录。 ##### 示例:NOT与OR的结合 虽然`NOT`与`OR`的直接结合在逻辑上可能不如`AND`直观,但理解其工作原理仍然重要。 ```sql SELECT * FROM products WHERE NOT (color = 'red' OR size = 'large'); -- 等同于 SELECT * FROM products WHERE color <> 'red' AND size <> 'large'; ``` 这表示选择既不是红色也不是大尺寸的所有产品。 #### 五、NOT运算符的注意事项 1. **性能考量**:虽然`NOT`运算符功能强大,但在处理大量数据时,不当的使用可能会导致查询性能下降。特别是在与`IN`、`LIKE`等结合使用时,应评估是否有更高效的替代方案。 2. **可读性**:为了提高代码的可读性,建议在逻辑清晰的情况下,尽量使用`<>`、`<=`、`>=`等直接表达否定意义的运算符,而非总是依赖`NOT`。 3. **优先级**:在复杂的查询中,注意逻辑运算符的优先级(`NOT` > `AND` > `OR`),必要时使用括号明确分组。 #### 六、实际应用场景 - **数据清洗**:在数据预处理阶段,使用`NOT`运算符排除异常值或不符合特定规范的数据记录。 - **权限控制**:在构建用户权限系统时,根据用户的角色或权限,使用`NOT`运算符筛选出不应被该用户访问的数据。 - **业务分析**:在数据分析中,利用`NOT`运算符反向思考,发现潜在的问题或机会点,如“哪些产品没有被任何客户购买过?” #### 结语 `NOT`运算符是SQL中不可或缺的一部分,它让我们能够灵活地表达“非”的逻辑关系,从而构建出更加精确和强大的查询语句。通过本章的学习,我们深入理解了`NOT`运算符的基本语法、与各种运算符的结合使用,以及在实际场景中的应用。希望这些内容能够帮助你在编写SQL查询时更加得心应手,精准地获取所需的数据信息。
上一篇:
2-3 逻辑运算符
下一篇:
AND运算符和OR运算符
该分类下的相关小册推荐:
高性能的Postgres SQL
SQL基础教程(中)
SQL基础教程(下)
PostgreSQL入门教程