PgSQL——学习笔记五: 表达式 & WHERE 子句 & AND & OR 运算符

PostgreSQL 表达式

表达式是由一个或多个的值、运算符、PostgresSQL 函数组成的。
PostgreSQL 表达式类似一个公式,我们可以将其应用在查询语句中,用来查找数据库中指定条件的结果集。

//SELECT 语句的语法格式如下:
SELECT column1, column2, columnN
FROM table_name
WHERE [CONDITION | EXPRESSION];

PostgreSQL 的表达式可以有不同类型。

布尔表达式:根据一个指定条件来读取数据:

SELECT column1, column2, columnN
FROM table_name
WHERE SINGLE VALUE MATCHTING EXPRESSION;

实例:

mydb=# SELECT * FROM COMPANY WHERE SALARY = 2000;
 id | name | age |                      address                       | salary | join_date
----+------+-----+----------------------------------------------------+--------+------------
  1 | paul |  32 | California                                         |   2000 | 2001-07-03
(1 行记录)

数字表达式numerical_expression:常用于查询语句中的数学运算

SELECT numerical_expression as  OPERATION_NAME
[FROM table_name WHERE CONDITION] ;

实例:

mydb=# SELECT (17 + 6) AS ADDITION ;
 addition
----------
       23
(1 行记录)

此外 PostgreSQL 还内置了一些数学函数,如:
avg() : 返回一个表达式的平均值
sum() : 返回指定字段的总和
count() : 返回查询的记录总数

//实例查询 COMPANY 表的记录总数:
mydb=# SELECT COUNT(*) AS "RECORDS" FROM COMPANY;
 RECORDS
---------
       5
(1 行记录)

日期表达式:返回当前系统的日期和时间,

可用于各种数据操作,以下实例查询当前时间:

mydb=# SELECT CURRENT_TIMESTAMP;
       current_timestamp
-------------------------------
 2022-05-15 21:49:53.295363+08
(1 行记录)

WHERE 子句

在 PostgreSQL 中,当我们需要根据指定条件从单张表或者多张表中查询数据时,就可以在 SELECT 语句中添加 WHERE 子句,从而过滤掉我们不需要数据。
可以用于 SELECT, UPDATE,DELETE 等语句中。

//以下是 SELECT 语句中使用 WHERE 子句从数据库中读取数据的通用语法:
SELECT column1, column2, columnN
FROM table_name
WHERE [condition1]

我们可以在 WHERE 子句中使用比较运算符或逻辑运算符,例如 >, <, =, LIKE, NOT 等等。

//AND	——找出 AGE(年龄) 字段大于等于 25,并且 SALARY(薪资) 字段大于等于 65000 的数据:
mydb=# SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;
 id | name  | age |                      address                       | salary | join_date
----+
### PostgreSQLWHERE 子句AND 的逻辑执行顺序 在 SQL 查询语句中的 `WHERE` 子句,条件表达式的求值遵循布尔代数的规则。对于多个通过 `AND` 连接的条件,其逻辑执行顺序通常是从左到右依次评估[^1]。然而需要注意的是,SQL 并不严格规定具体的执行顺序,优化器可能会基于查询计划调整实际运行时的操作次序。 尽管如此,在标准情况下,如果存在多层嵌套或者复杂的组合条件,则优先级如下所示: - 圆括号内的子表达式会被最先计算。 - 接着按照操作符本身的优先级处理(例如比较运算符高于逻辑运算符)。 - 对于同级别的逻辑运算符 (`AND`, `OR`) ,它们一般按书写位置从前往后逐一验证真伪状态。 具体来说,在涉及 `AND` 条件时,只有当左侧部分为 true 时才会继续检查右侧的部分;一旦发现某个条件失败即可提前终止整个判断过程并返回 false 结果给上一层调用者[^2]。 以下是展示如何利用这种短路行为来提高性能的一个简单例子: ```sql SELECT * FROM users WHERE status = &#39;active&#39; -- 更加筛选性强的列放在前面可以减少后续不必要的记录扫描次数. AND last_login_date &gt;= CURRENT_DATE - INTERVAL &#39;30 days&#39;; ``` 在这个案例里,假设大多数用户的账户并非处于活跃状态(`status=&#39;inactive&#39;`) , 那么数据库引擎可能只需要读取少量满足第一个过滤项的数据集就能完成最终匹配工作而无需遍历全部表内容. 另外值得注意的一点是, 虽然理论上我们可以依赖上述默认机制安排我们的查询结构以获得更好的效率表现;但在某些特殊场景下(比如涉及到复杂函数调用或者其他开销较大的动作), 明确指定期望的行为模式或许更加稳妥可靠一些. #### 参考资料说明: 以上描述均依据官方文档以及广泛接受的最佳实践总结得出结论[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值