PostgreSQL作为一款功能强大的开源关系型数据库管理系统,支持完整的SQL标准,提供了丰富的数据类型和高级特性。掌握基本的SQL语句是使用PostgreSQL的前提,本文将从最基础的SQL语句开始,逐步介绍数据库操作的核心概念和实用技巧。

一、SQL语言概述

SQL(Structured Query Language)是结构化查询语言的缩写,是操作关系型数据库的标准语言。SQL语句主要分为以下几类:

  • DDL(数据定义语言):用于定义和管理数据库对象,如CREATE、ALTER、DROP等
  • DML(数据操作语言):用于操作数据库中的数据,如INSERT、UPDATE、DELETE等
  • DQL(数据查询语言):用于查询数据库中的数据,主要是SELECT语句
  • DCL(数据控制语言):用于控制数据库访问权限,如GRANT、REVOKE等

二、数据库和表的基本操作

创建数据库

在PostgreSQL中,可以使用CREATE DATABASE语句创建新的数据库:

-- 创建名为company的数据库
CREATE DATABASE company;-- 创建数据库并指定编码和所有者
CREATE DATABASE company_db 
WITH OWNER = postgres 
ENCODING = 'UTF8' 
TEMPLATE = template0;

创建表

创建表是数据库设计的核心环节,需要定义表名、字段名、数据类型和约束条件:

-- 创建员工表
CREATE TABLE employees (id SERIAL PRIMARY KEY,name VARCHAR(100) NOT NULL,email VARCHAR(100) UNIQUE,department VARCHAR(50),salary DECIMAL(10,2),hire_date DATE DEFAULT CURRENT_DATE
);

在上面的例子中,我们使用了多种数据类型:

  • SERIAL:自动递增整数,常用于主键
  • VARCHAR(n):可变长度字符串
  • DECIMAL(p,s):精确数值类型
  • DATE:日期类型

修改表结构

随着业务发展,可能需要修改表结构:

-- 添加新列
ALTER TABLE employees ADD COLUMN phone VARCHAR(20);-- 修改列类型
ALTER TABLE employees ALTER COLUMN salary TYPE DECIMAL(12,2);-- 删除列
ALTER TABLE employees DROP COLUMN phone;-- 重命名列
ALTER TABLE employees RENAME COLUMN name TO full_name;

删除表和数据库

-- 删除表(保留表结构)
DROP TABLE employees;-- 删除表及其所有依赖(如外键约束)
DROP TABLE employees CASCADE;-- 删除数据库
DROP DATABASE company_db;

三、数据操作语句

插入数据

INSERT语句用于向表中添加新记录:

-- 插入单条记录
INSERT INTO employees (name, email, department, salary) 
VALUES ('张三', 'zhangsan@company.com', '技术部', 8000.00);-- 插入多条记录
INSERT INTO employees (name, email, department, salary) VALUES
('李四', 'lisi@company.com', '销售部', 7000.00),
('王五', 'wangwu@company.com', '人事部', 6500.00),
('赵六', 'zhaoliu@company.com', '技术部', 9000.00);-- 从其他表插入数据
INSERT INTO employees_backup SELECT * FROM employees;

查询数据

SELECT语句是SQL中最常用的语句,用于从表中检索数据:

-- 查询所有数据
SELECT * FROM employees;-- 查询指定列
SELECT name, department, salary FROM employees;-- 条件查询
SELECT * FROM employees WHERE department = '技术部';-- 排序查询
SELECT * FROM employees ORDER BY salary DESC;-- 限制结果数量
SELECT * FROM employees ORDER BY salary DESC LIMIT 5;-- 范围查询
SELECT * FROM employees WHERE salary BETWEEN 6000 AND 8000;-- 模糊查询
SELECT * FROM employees WHERE name LIKE '张%';

更新数据

UPDATE语句用于修改表中已存在的数据:

-- 更新单个字段
UPDATE employees SET salary = 8500.00 WHERE id = 1;-- 更新多个字段
UPDATE employees 
SET salary = 9500.00, department = '技术部' 
WHERE name = '张三';-- 使用条件更新
UPDATE employees 
SET salary = salary * 1.1 
WHERE department = '技术部';

删除数据

DELETE语句用于从表中删除记录:

-- 删除特定记录
DELETE FROM employees WHERE id = 1;-- 删除符合条件的记录
DELETE FROM employees WHERE salary < 5000;-- 删除所有记录(谨慎使用)
DELETE FROM employees;

四、高级查询技巧

聚合函数

聚合函数用于对一组值执行计算并返回单个值:

-- 统计记录总数
SELECT COUNT(*) FROM employees;-- 计算平均工资
SELECT AVG(salary) FROM employees;-- 计算工资总和
SELECT SUM(salary) FROM employees;-- 查找最高和最低工资
SELECT MAX(salary), MIN(salary) FROM employees;

分组查询

GROUP BY子句用于将结果集按一个或多个列分组:

-- 按部门统计员工数量
SELECT department, COUNT(*) as employee_count 
FROM employees 
GROUP BY department;-- 按部门统计平均工资
SELECT department, AVG(salary) as avg_salary 
FROM employees 
GROUP BY department 
HAVING AVG(salary) > 7000;

多表查询

在实际应用中,经常需要从多个相关表中查询数据:

-- 内连接查询
SELECT e.name, e.department, d.manager 
FROM employees e 
INNER JOIN departments d ON e.department = d.name;-- 左连接查询
SELECT e.name, e.department, d.budget 
FROM employees e 
LEFT JOIN departments d ON e.department = d.name;

五、数据类型和约束

PostgreSQL支持丰富的数据类型和约束,确保数据的完整性和一致性:

-- 创建带约束的表
CREATE TABLE products (id SERIAL PRIMARY KEY,name VARCHAR(100) NOT NULL,price DECIMAL(10,2) CHECK (price > 0),category VARCHAR(50) REFERENCES categories(name),created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

常见的约束包括:

  • PRIMARY KEY:主键约束,唯一标识每条记录
  • NOT NULL:非空约束,确保字段不为空
  • UNIQUE:唯一约束,确保字段值唯一
  • CHECK:检查约束,确保字段满足特定条件
  • FOREIGN KEY:外键约束,维护表间关系

六、总结

掌握PostgreSQL的基本SQL语句是数据库操作的基础,通过本文的学习,您应该能够熟练使用CREATE、INSERT、SELECT、UPDATE、DELETE等核心语句进行日常的数据库操作。在实际应用中,还需要结合具体的业务需求,灵活运用各种SQL技巧和高级功能。

SQL语言的学习是一个循序渐进的过程,建议通过实际操作来加深理解。随着经验的积累,您可以进一步学习存储过程、触发器、索引优化等高级特性,从而更好地发挥PostgreSQL的强大功能。记住,良好的数据库设计和规范的SQL使用习惯是构建高效、稳定应用系统的关键。