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;
相关推荐
ZYJCSZKJ1 小时前
基于地理位置围栏的短视频POI团购系统:LBS空间索引与流量分发实践
java·服务器·数据库
Mr.朱鹏9 小时前
Linux 服务器 LVM 根分区在线动态扩容
linux·服务器·数据库
摇滚侠9 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 数据库初始化机制 阅读笔记 36
数据库·spring boot·笔记
qiuhaipeng19 小时前
Claude code 升级后上下文长度变短问题
java·前端·数据库
wxwx_bscxy32210 小时前
基于Python新冠疫情可视化分析系统的设计与实现
java·数据库·spring boot·python·微信小程序·sqlite
剑之所向11 小时前
.NET 官方`System.Threading.Channels`
前端·javascript·数据库
词却11 小时前
数据库基础:DQL 数据查询语言
数据库·oracle
昌原的儿子LEO13 小时前
Linux IO多路复用与SQLite数据库核心知识点总结
linux·数据库·oracle
山岚的运维笔记13 小时前
mysql 专业笔记 -- 第 8 章:使用变量
运维·数据库·笔记·后端·学习·mysql·dba
聚美智数13 小时前
网安查询-备案查询-网络安全查询API接口介绍
网络·数据库·web安全