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;
相关推荐
剩下了什么19 小时前
MySQL JSON_SET() 函数
数据库·mysql·json
山峰哥20 小时前
数据库工程与SQL调优——从索引策略到查询优化的深度实践
数据库·sql·性能优化·编辑器
较劲男子汉20 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann
java搬砖工-苤-初心不变20 小时前
MySQL 主从复制配置完全指南:从原理到实践
数据库·mysql
山岚的运维笔记1 天前
SQL Server笔记 -- 第18章:Views
数据库·笔记·sql·microsoft·sqlserver
roman_日积跬步-终至千里1 天前
【LangGraph4j】LangGraph4j 核心概念与图编排原理
java·服务器·数据库
汇智信科1 天前
打破信息孤岛,重构企业效率:汇智信科企业信息系统一体化运营平台
数据库·重构
野犬寒鸦1 天前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
晚霞的不甘1 天前
揭秘 CANN 内存管理:如何让大模型在小设备上“轻装上阵”?
前端·数据库·经验分享·flutter·3d
市场部需要一个软件开发岗位1 天前
JAVA开发常见安全问题:纵向越权
java·数据库·安全