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使用习惯是构建高效、稳定应用系统的关键。