当前位置: 首页 > news >正文

第2节-过滤表中的行-WHERE

摘要:在本教程中,您将学习如何使用 PostgreSQLWHERE 子句来筛选表中的行。

PostgreSQL WHERE 子句

SELECT FROM 语句从表中所有行的一个或多个列中查询数据。实际上,你经常需要选择满足某个条件的行。

要根据条件从表中筛选行,需在 SELECT 语句中使用 WHERE 子句:

SELECT column1, column2, ...
FROM table_name
WHERE condition;

执行该语句时,PostgreSQL 会先计算 FROM 子句,然后计算 WHERE 子句,最后计算 SELECT 子句:

  • 首先,通过执行 FROM 子句检索 table_name 中的每一行。
  • 其次,评估 WHERE 子句中的 condition ,如果 condition 为真,则将该行包含在结果集中。
  • 第三,从选中的行中选择 SELECT 子句中指定的列。

如果 table_name 中没有行满足 condition ,则SELECT语句会返回一个空集,其中不包含任何行。

PostgreSQL WHERE 子句示例

假设我们有如下的 inventories 表:

CREATE TABLE inventories (name VARCHAR(255),brand VARCHAR(50),quantity INT,price DECIMAL(19, 2)
);INSERT INTO inventories (name, brand, quantity, price)
VALUES ('iPhone 14 Pro', 'Apple', 10, 999.99),('Galaxy S23 Ultra', 'Samsung', 15, 1199.99),('Pixel 7 Pro', 'Google', 8, 899.99),('Xperia 1 IV', 'Sony', 7, 1299.99);

以下语句使用 WHERE 子句来检索数量大于9的产品:

SELECT name, quantity
FROM inventories
WHERE quantity > 9;

输出:

       name       | quantity
------------------+----------iPhone 14 Pro    |       10Galaxy S23 Ultra |       15

它的工作原理。

首先,FROM 子句从 inventories 表中选取所有行:

       name       |  brand  | quantity |  price
------------------+---------+----------+---------iPhone 14 Pro    | Apple   |       10 |  999.99Galaxy S23 Ultra | Samsung |       15 | 1199.99Pixel 7 Pro      | Google  |        8 |  899.99Xperia 1 IV      | Sony    |        7 | 1299.99

其次,WHERE 子句计算库存表中的每一行,检查数量是否大于 10,并将中间结果集中的行包括在内:

       name       |  brand  | quantity |  price
------------------+---------+----------+---------iPhone 14 Pro    | Apple   |       10 |  999.99Galaxy S23 Ultra | Samsung |       15 | 1199.99

它返回两行,数量分别为10和15。

第三, SELECT 子句从 namequantity 列中查询数据:

       name       | quantity
------------------+----------iPhone 14 Pro    |       10Galaxy S23 Ultra |       15

比较运算符

除了大于运算符 > 之外,你还可以在 WHERE 子句中使用其他比较运算符:

OperatorMeaning
=Equal to
!= (<>)Not Equal To
>Greater than
>=Greater than or equal to
<Less than
<=Less than or equal to

等于运算符 (=)

如果两个值相等,相等运算符返回true。

例如,以下语句在WHERE子句中使用等于运算符 (=)来查询 inventories 中数量等于10的产品:

SELECT name, quantity
FROM inventories
WHERE quantity = 10;

输出:

     name      | quantity
---------------+----------iPhone 14 Pro |       10

该查询返回 iPhone 14 Pro ,因为只有该产品的数量为10。

不等于运算符(!=)

以下语句使用不等运算符 (!=)inventories 表中查询数量不等于10的产品:

SELECT name, quantity
FROM inventories
WHERE quantity != 10;

输出:

       name       | quantity
------------------+----------Galaxy S23 Ultra |       15Pixel 7 Pro      |        8Xperia 1 IV      |        7

请注意,PostgreSQL 也使用 <> 作为不等于运算符,因此你可以交替使用 !=<> 运算符。

WHERE 子句和列别名

由于 PostgreSQL 先计算 WHERE 子句,再计算 SELECT 子句,因此在计算 WHERE 子句时,列别名不可用。

以下语句尝试在 WHERE 中使用 amount 列别名,结果导致错误:

SELECTname,quantity * price AS amount
FROMinventories
WHEREamount > 10000;

错误:

column "amount" does not exist

输出表明 amount 列不存在。要修复此错误,您需要按如下方式在 WHERE 子句中使用该表达式:

SELECTname,quantity * price AS amount
FROMinventories
WHEREquantity * price > 10000;

输出:

       name       |  amount
------------------+----------Galaxy S23 Ultra | 17999.85

总结

  • 使用 WHERE 子句根据条件从表中筛选行。
  • PostgreSQLFROM 子句之后、SELECT 子句之前对 WHERE 子句进行求值。

文章转载自:

http://4CMwCxKr.sqqhd.cn
http://FVW6yyUD.sqqhd.cn
http://gOEXbVox.sqqhd.cn
http://jrDooewF.sqqhd.cn
http://VFibWPtt.sqqhd.cn
http://k8p4KkkC.sqqhd.cn
http://wP1JHkzT.sqqhd.cn
http://UkzoRJIv.sqqhd.cn
http://Z2K9QpnA.sqqhd.cn
http://ID7ZZfRm.sqqhd.cn
http://keqKozUp.sqqhd.cn
http://gYOhdTD4.sqqhd.cn
http://nZQJzy6T.sqqhd.cn
http://8oEMNKDR.sqqhd.cn
http://YxRxA8Ks.sqqhd.cn
http://IBLV6Nfd.sqqhd.cn
http://ngLMEl09.sqqhd.cn
http://1V859S9K.sqqhd.cn
http://jQhUSrKg.sqqhd.cn
http://jwL30aiU.sqqhd.cn
http://3JrETFoK.sqqhd.cn
http://q7ad6kuJ.sqqhd.cn
http://beqTfDKe.sqqhd.cn
http://S0kMYQaS.sqqhd.cn
http://EXW7tYjm.sqqhd.cn
http://Tp96UK7K.sqqhd.cn
http://mcTSW6Y3.sqqhd.cn
http://FWxmXb54.sqqhd.cn
http://ujTYBKlW.sqqhd.cn
http://612VQkXK.sqqhd.cn
http://www.dtcms.com/a/375776.html

相关文章:

  • linux内核 - 内核是一个分层的系统
  • 基于Multi-Transformer的信息融合模型设计与实现
  • C# 14 新特性详解
  • Java实战项目演示代码及流的使用
  • BFS在路径搜索中的应用
  • Shell 脚本基础完全指南:语法、调试、运行与实战详解
  • Claude-Flow AI协同开发:钩子系统与 GitHub 集成
  • 食品饮料生产工艺优化中 CC-Link IE FB 转 DeviceNet 协议下西门子 S7-1500 与倍加福流量传感器的应用
  • 清源 SCA 社区版更新(V4.2.0)|漏洞前置感知、精准修复、合规清晰,筑牢软件供应链安全防线!
  • Seaborn库
  • 2031 年达 13.9 亿美元!工业温度控制器市场 CAGR4.2%:技术路径、应用场景与未来机遇全解析
  • sklearn 加州房价数据集 fetch_california_housing 出错 403: Forbidden 修复方案
  • mybatis plus 如何更新参数为空, mybatis plus update方法如何更新参数为null, update()如何设置参数=null
  • Spring Boot 项目新增 Module 完整指南
  • TruckSim与Matlab-Simulink联合仿真(一)
  • virsh常用命令 笔记
  • 中国AI云市场报告:阿里云份额达35.8%,高于2至4名总和
  • 未来海洋变暖对生态环境的影响
  • 《2025年AI产业发展十大趋势报告》四十八
  • Shell 脚本判断
  • 前端工程化资源预加载
  • Linux-Shell编程正则表达式
  • CentOS7静态IP设置全攻略
  • Kafka面试精讲 Day 12:副本同步与数据一致性
  • [职业竞赛][移动应用]网络请求、JSON 文件读取解析、APP全局变量
  • 2、Python函数设计与字典应用
  • 数据分析与AI丨如何用数据分析找到更优的橡胶配方?
  • Flask 核心基础:从 路由装饰器 到 __name__ 变量 的底层逻辑解析
  • 微服务事务管理利器:Seata 核心原理与实践指南
  • ZYNQ PS 端 UART 接收数据数据帧(初学者友好版)