想解锁PostgreSQL查询从基础到进阶的核心知识点?你都get了吗?


url: /posts/887809b3e0375f5956873cd442f516d8/
title: 想解锁PostgreSQL查询从基础到进阶的核心知识点?你都get了吗?
date: 2025-09-26T07:52:14+08:00
lastmod: 2025-09-26T07:52:14+08:00
author: cmdragon

summary:
PostgreSQL查询的核心操作包括SELECTWHEREORDER BYLIMITJOIN、聚合函数和子查询。SELECT用于从表中提取数据,WHERE用于过滤条件,ORDER BY用于排序,LIMITOFFSET用于分页。JOIN用于关联多个表,聚合函数如COUNTSUM等用于数据计算,GROUP BY用于分组统计,HAVING用于过滤分组结果。子查询用于嵌套查询逻辑。常见报错包括语法错误、数据类型不匹配和表名错误,需注意SQL执行顺序和数据类型一致性。

categories:

  • postgresql

tags:

  • 基础入门
    • PostgreSQL
  • SQL查询
  • SELECT语句
  • JOIN操作
  • 聚合函数
  • 子查询
  • 常见报错

cmdragon_cn.png

扫描二维码关注或者微信搜一搜:编程智域 前端至全栈交流与成长

发现1000+提升效率与开发的AI工具和实用程序:https://tools.cmdragon.cn/

一、SELECT:查询的基础语句

查询是PostgreSQL中最常用的操作,核心是SELECT语句。它的作用是从表中提取指定的数据,就像从书架上挑选你需要的书——你可以选全部,也可以选特定几本,还能按顺序排列。

1.1 SELECT的基本结构

SELECT语句的基础结构如下:

SELECT1,2, ...  -- 要返回的列(或*表示所有列)
FROM 表名              -- 数据来源的表
WHERE 条件              -- 过滤行的条件(可选)
GROUP BY 分组列         -- 按列分组(可选)
HAVING 分组条件         -- 过滤分组结果(可选)
ORDER BY 排序列         -- 排序结果(可选)
LIMIT 数量              -- 限制返回行数(可选)
OFFSET 偏移量           -- 跳过前N行(可选)

如果要选所有列,可以用*代替列名:

-- 选students表的所有数据
SELECT * FROM students;

但注意:*会返回表的所有列,实际开发中尽量指定需要的列(避免多余数据传输,提高性能)。

1.2 选择特定列与别名

如果只需要“姓名”和“专业”,可以明确指定列名:

-- 选学生的姓名和专业
SELECT name, major FROM students;

如果觉得列名不够直观,可以用AS给列起别名(alias):

-- 给列起别名,结果中的列名会变成"学生姓名"和"年龄"
SELECT name AS "学生姓名", age FROM students;

二、WHERE:过滤查询结果

WHERE子句用于筛选符合条件的行,相当于给查询加了一个“过滤条件”。它必须放在FROM之后、ORDER BY之前(记住执行顺序:FROM → WHERE → SELECT → ORDER BY)。

2.1 比较运算符

最常用的比较有:等于(=)、不等于(!=<>)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)。
示例:

-- 选"计算机科学"专业的学生
SELECT * FROM students WHERE major = 'Computer Science';

-- 选年龄大于20岁的学生
SELECT * FROM students WHERE age > 20;
2.2 范围与模糊查询
  • 范围查询:用BETWEEN ... AND ...表示“在某个区间内”(包含边界);
  • 模糊查询:用LIKE匹配字符串(%代表任意字符,_代表单个字符);
  • 多条件:用AND(并且)、OR(或者)组合条件。

示例:

-- 选年龄在19到21岁之间的学生
SELECT * FROM students WHERE age BETWEEN 19 AND 21;

-- 选名字以"A"开头的学生(比如Alice)
SELECT * FROM students WHERE name LIKE 'A%';

-- 选"计算机科学"或"数学"专业、年龄大于20岁的学生
SELECT * FROM students WHERE (major = 'Computer Science' OR major = 'Mathematics') AND age > 20;
2.3 NULL值的处理

NULL代表“未知”或“不存在”,不能用=!=判断,必须用IS NULLIS NOT NULL

-- 选没有填写入学日期的学生(假设enrollment_date有NULL值)
SELECT * FROM students WHERE enrollment_date IS NULL;

-- 选填写了入学日期的学生
SELECT * FROM students WHERE enrollment_date IS NOT NULL;

三、ORDER BY:给结果排序

ORDER BY用于按指定列排序,默认是升序(ASC),可以用DESC指定降序。支持多列排序(先按第一列排,再按第二列排)。

示例:

-- 按年龄降序排列( oldest first )
SELECT name, age FROM students ORDER BY age DESC;

-- 先按专业升序,再按年龄降序(同专业内年龄大的排前面)
SELECT name, major, age FROM students ORDER BY major ASC, age DESC;

四、LIMIT与OFFSET:限制结果数量与分页

  • LIMIT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值