SQL
外观
SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准化编程语言。它允许用户执行数据查询、数据操作(插入、更新、删除)、数据定义(创建、修改表结构)和数据控制(权限管理)等操作。
历史[编辑 | 编辑源代码]
SQL最初由IBM的Donald D. Chamberlin和Raymond F. Boyce在1970年代开发,最初称为"SEQUEL"(Structured English Query Language)。1986年,ANSI和ISO采纳SQL作为标准,此后经历了多次修订:
- SQL-86 - 首个ANSI标准
- SQL-89 - 添加完整性约束
- SQL-92 - 主要修订版(也称为SQL2)
- SQL:1999 - 添加递归查询、触发器等功能
- SQL:2003 - 添加XML相关功能
- SQL:2008 - 改进MERGE语句等
- SQL:2011 - 添加时态数据库支持
- SQL:2016 - 添加JSON支持
- SQL:2023 - 最新标准
基本语法[编辑 | 编辑源代码]
SQL语句通常分为以下几类:
数据查询语言(DQL)[编辑 | 编辑源代码]
用于从数据库中检索数据,核心语句是SELECT
。
-- 基本查询
SELECT column1, column2 FROM table_name WHERE condition;
-- 带聚合函数的查询
SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING AVG(salary) > 5000;
数据操作语言(DML)[编辑 | 编辑源代码]
用于添加、修改和删除数据。
-- 插入数据
INSERT INTO table_name (column1, column2) VALUES (value1, value2);
-- 更新数据
UPDATE table_name SET column1 = value1 WHERE condition;
-- 删除数据
DELETE FROM table_name WHERE condition;
数据定义语言(DDL)[编辑 | 编辑源代码]
用于定义和修改数据库结构。
-- 创建表
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10,2),
hire_date DATE
);
-- 修改表结构
ALTER TABLE employees ADD COLUMN department VARCHAR(50);
-- 删除表
DROP TABLE employees;
数据控制语言(DCL)[编辑 | 编辑源代码]
用于权限管理。
-- 授予权限
GRANT SELECT, INSERT ON employees TO user1;
-- 撤销权限
REVOKE INSERT ON employees FROM user1;
高级特性[编辑 | 编辑源代码]
事务控制[编辑 | 编辑源代码]
SQL支持事务处理,确保数据一致性。
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
-- 如果出错可以执行 ROLLBACK;
视图[编辑 | 编辑源代码]
视图是基于SQL查询的虚拟表。
CREATE VIEW high_salary_employees AS
SELECT name, salary FROM employees WHERE salary > 10000;
存储过程和函数[编辑 | 编辑源代码]
可重用的SQL代码块。
CREATE PROCEDURE raise_salary(IN emp_id INT, IN amount DECIMAL(10,2))
BEGIN
UPDATE employees SET salary = salary + amount WHERE id = emp_id;
END;
触发器[编辑 | 编辑源代码]
在特定数据库事件发生时自动执行的操作。
CREATE TRIGGER update_timestamp
BEFORE UPDATE ON employees
FOR EACH ROW
SET NEW.last_updated = CURRENT_TIMESTAMP;
数据库实现[编辑 | 编辑源代码]
SQL有多种实现,各数据库系统在遵循标准的同时也扩展了自己的特性:
数据库系统 | 特点 |
---|---|
MySQL | 开源、高性能、广泛使用 |
PostgreSQL | 功能丰富、支持复杂数据类型 |
Oracle Database | 企业级、高可用性 |
Microsoft SQL Server | 与Windows生态集成紧密 |
SQLite | 轻量级、嵌入式 |
性能优化[编辑 | 编辑源代码]
索引[编辑 | 编辑源代码]
索引可显著提高查询性能。
-- 创建索引
CREATE INDEX idx_employee_name ON employees(name);
-- 复合索引
CREATE INDEX idx_employee_dept_salary ON employees(department, salary);
查询优化[编辑 | 编辑源代码]
- 避免使用
SELECT *
- 使用
EXPLAIN
分析查询计划 - 合理使用JOIN替代子查询
实际应用案例[编辑 | 编辑源代码]
电子商务系统[编辑 | 编辑源代码]
SQL在电子商务系统中用于管理产品、订单和用户数据:
数据分析[编辑 | 编辑源代码]
SQL广泛用于数据分析,与Pandas、Spark等工具集成:
-- 销售分析查询
SELECT
product_category,
SUM(sales_amount) as total_sales,
COUNT(DISTINCT customer_id) as unique_customers
FROM sales
WHERE sale_date BETWEEN '2023-01-01' AND '2023-12-31'
GROUP BY product_category
ORDER BY total_sales DESC;