跳转到内容

SQL

来自代码酷

模板:Infobox 编程语言

SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准化编程语言。它允许用户执行数据查询、数据操作(插入、更新、删除)、数据定义(创建、修改表结构)和数据控制(权限管理)等操作。

历史[编辑 | 编辑源代码]

SQL最初由IBM的Donald D. Chamberlin和Raymond F. Boyce在1970年代开发,最初称为"SEQUEL"(Structured English Query Language)。1986年,ANSIISO采纳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在电子商务系统中用于管理产品、订单和用户数据:

erDiagram CUSTOMER ||--o{ ORDER : places ORDER ||--|{ ORDER_ITEM : contains PRODUCT ||--o{ ORDER_ITEM : includes CUSTOMER { int id PK string name string email } ORDER { int id PK date order_date int customer_id FK } PRODUCT { int id PK string name decimal price } ORDER_ITEM { int order_id FK int product_id FK int quantity }

数据分析[编辑 | 编辑源代码]

SQL广泛用于数据分析,与PandasSpark等工具集成:

-- 销售分析查询
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;

学习资源[编辑 | 编辑源代码]

参见[编辑 | 编辑源代码]