PostgreSQL 常用关键字速查

1. 数据查询类 (SELECT相关)

SELECT - 查询数据

sql 复制代码
-- 基本查询
SELECT name, population FROM world;

-- 查询所有列
SELECT * FROM world;

-- 去重
SELECT DISTINCT continent FROM world;

WHERE - 条件筛选

sql 复制代码
-- 单条件
SELECT name FROM world WHERE population > 200000000;

-- 多条件
SELECT name FROM world 
WHERE population > 100000000 AND gdp > 1000000000;

-- 范围查询
SELECT name FROM world WHERE population BETWEEN 10000000 AND 50000000;

-- 模糊匹配
SELECT name FROM world WHERE name LIKE 'Ch%';  -- Ch开头
SELECT name FROM world WHERE name LIKE '%land'; -- land结尾
SELECT name FROM world WHERE name LIKE '%an%';  -- 包含an

ORDER BY - 排序

sql 复制代码
-- 升序(默认)
SELECT name, population FROM world ORDER BY population;

-- 降序
SELECT name, population FROM world ORDER BY population DESC;

-- 多字段排序
SELECT name, continent, population FROM world 
ORDER BY continent ASC, population DESC;

LIMIT & OFFSET - 限制结果数量

sql 复制代码
-- 取前10条
SELECT name FROM world LIMIT 10;

-- 分页:跳过前20条,取10条
SELECT name FROM world LIMIT 10 OFFSET 20;

2. 聚合函数类

GROUP BY - 分组

sql 复制代码
-- 按大洲分组统计国家数量
SELECT continent, COUNT(*) as country_count 
FROM world 
GROUP BY continent;

-- 统计各大洲总人口
SELECT continent, SUM(population) as total_pop 
FROM world 
GROUP BY continent;

HAVING - 分组后筛选

sql 复制代码
-- 筛选人口总和超过10亿的大洲
SELECT continent, SUM(population) as total_pop 
FROM world 
GROUP BY continent 
HAVING SUM(population) > 1000000000;

聚合函数

sql 复制代码
-- COUNT 计数
SELECT COUNT(*) FROM world;
SELECT COUNT(DISTINCT continent) FROM world;

-- SUM 求和
SELECT SUM(population) FROM world;

-- AVG 平均值
SELECT AVG(gdp) FROM world;

-- MAX/MIN 最大最小值
SELECT MAX(population), MIN(population) FROM world;

3. 连接类 (JOIN)

INNER JOIN - 内连接

sql 复制代码
SELECT world.name, city.name 
FROM world 
INNER JOIN city ON world.name = city.country 
WHERE world.population > 100000000;

LEFT JOIN - 左连接

sql 复制代码
SELECT world.name, city.name 
FROM world 
LEFT JOIN city ON world.name = city.country;

RIGHT JOIN - 右连接

sql 复制代码
SELECT world.name, city.name 
FROM world 
RIGHT JOIN city ON world.name = city.country;

FULL OUTER JOIN - 全外连接

sql 复制代码
SELECT world.name, city.name 
FROM world 
FULL OUTER JOIN city ON world.name = city.country;

4. 数据操作类

INSERT - 插入数据

sql 复制代码
-- 插入单条
INSERT INTO world (name, continent, population) 
VALUES ('NewCountry', 'Asia', 50000000);

-- 插入多条
INSERT INTO world (name, continent, population) 
VALUES 
  ('Country1', 'Europe', 10000000),
  ('Country2', 'Africa', 20000000);

UPDATE - 更新数据

ini 复制代码
-- 更新单个字段
UPDATE world SET population = 1400000000 WHERE name = 'China';

-- 更新多个字段
UPDATE world 
SET population = 1400000000, gdp = 14000000000 
WHERE name = 'China';

DELETE - 删除数据

sql 复制代码
-- 删除特定记录
DELETE FROM world WHERE population < 100000;

-- 删除所有记录(谨慎使用)
DELETE FROM world;

5. 表结构操作类

CREATE - 创建

sql 复制代码
-- 创建表
CREATE TABLE country (
  id SERIAL PRIMARY KEY,
  name VARCHAR(100) NOT NULL,
  population INTEGER,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 创建索引
CREATE INDEX idx_population ON world(population);

ALTER - 修改表结构

sql 复制代码
-- 添加列
ALTER TABLE world ADD COLUMN capital VARCHAR(100);

-- 删除列
ALTER TABLE world DROP COLUMN capital;

-- 修改列类型
ALTER TABLE world ALTER COLUMN population TYPE BIGINT;

DROP - 删除

sql 复制代码
-- 删除表
DROP TABLE world;

-- 删除索引
DROP INDEX idx_population;

6. 条件逻辑类

AND / OR / NOT

ini 复制代码
SELECT name FROM world 
WHERE population > 100000000 AND continent = 'Asia';

SELECT name FROM world 
WHERE continent = 'Europe' OR continent = 'Asia';

SELECT name FROM world 
WHERE NOT continent = 'Africa';

IN / NOT IN

sql 复制代码
SELECT name FROM world 
WHERE continent IN ('Europe', 'Asia', 'Africa');

SELECT name FROM world 
WHERE name NOT IN ('China', 'India', 'USA');

EXISTS

sql 复制代码
SELECT name FROM world w
WHERE EXISTS (
  SELECT 1 FROM city c WHERE c.country = w.name
);

CASE - 条件表达式

vbnet 复制代码
SELECT name, population,
  CASE 
    WHEN population > 1000000000 THEN '超大国'
    WHEN population > 100000000 THEN '大国'
    WHEN population > 10000000 THEN '中等国家'
    ELSE '小国'
  END as country_size
FROM world;

7. 子查询相关

子查询示例

vbnet 复制代码
-- WHERE子查询
SELECT name FROM world 
WHERE population > (SELECT AVG(population) FROM world);

-- FROM子查询
SELECT continent, avg_pop FROM (
  SELECT continent, AVG(population) as avg_pop 
  FROM world 
  GROUP BY continent
) as subquery
WHERE avg_pop > 50000000;

8. 其他常用关键字

UNION - 联合查询

sql 复制代码
SELECT name FROM world WHERE continent = 'Asia'
UNION
SELECT name FROM world WHERE population > 200000000;

AS - 别名

vbnet 复制代码
SELECT name AS country_name, population AS pop FROM world;
SELECT w.name FROM world AS w;

NULL处理

sql 复制代码
-- IS NULL / IS NOT NULL
SELECT name FROM world WHERE gdp IS NULL;
SELECT name FROM world WHERE gdp IS NOT NULL;

-- COALESCE (返回第一个非空值)
SELECT name, COALESCE(gdp, 0) as gdp FROM world;
相关推荐
马克学长2 小时前
SSM学生出国境学习交流管理87153(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·学习·ssm 框架·学生出国境管理·在线申请
么么...2 小时前
MySQL 存储引擎与索引深度解析:从原理到优化实践
数据库·经验分享·sql·mysql
さかた ぎんとき882 小时前
从SQL到磁盘的Mysql全链路解析
数据库·sql·mysql
それども2 小时前
数据库读写分离和事务的关系
数据库
TGITCIC2 小时前
2026数据分析Agent最新落地方向解析
数据库·数据分析·ai大模型·ai智能体·ai数据·ai问数·ai sql
wangqiaowq2 小时前
SQL Server 对非聚簇索引的 INCLUDE 列数量和大小有限制
数据库
Coder_Boy_2 小时前
基于SpringAI的在线考试系统-核心业务流程图
java·数据库·spring boot·软件工程
松涛和鸣3 小时前
DAY49 DS18B20 Single-Wire Digital Temperature Acquisition
linux·服务器·网络·数据库·html
海边的Kurisu3 小时前
苍穹外卖日记 | Day3 公共字段填充、菜品模块
数据库