跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
SQL
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{Infobox 编程语言 |名称 = SQL |全称 = Structured Query Language |类型 = 声明式查询语言 |范式 = 多范式 |设计者 = Donald D. Chamberlin<br>Raymond F. Boyce |实现者 = 多家公司 |发行时间 = 1974年 |最新发行版本 = SQL:2023 |文件扩展名 = .sql |网站 = {{URL|https://www.iso.org/standard/76583.html}} }} '''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) === 用于从数据库中检索数据,核心语句是<code>SELECT</code>。 <syntaxhighlight lang="sql"> -- 基本查询 SELECT column1, column2 FROM table_name WHERE condition; -- 带聚合函数的查询 SELECT department, AVG(salary) FROM employees GROUP BY department HAVING AVG(salary) > 5000; </syntaxhighlight> === 数据操作语言(DML) === 用于添加、修改和删除数据。 <syntaxhighlight lang="sql"> -- 插入数据 INSERT INTO table_name (column1, column2) VALUES (value1, value2); -- 更新数据 UPDATE table_name SET column1 = value1 WHERE condition; -- 删除数据 DELETE FROM table_name WHERE condition; </syntaxhighlight> === 数据定义语言(DDL) === 用于定义和修改数据库结构。 <syntaxhighlight lang="sql"> -- 创建表 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; </syntaxhighlight> === 数据控制语言(DCL) === 用于权限管理。 <syntaxhighlight lang="sql"> -- 授予权限 GRANT SELECT, INSERT ON employees TO user1; -- 撤销权限 REVOKE INSERT ON employees FROM user1; </syntaxhighlight> == 高级特性 == === 事务控制 === SQL支持事务处理,确保数据一致性。 <syntaxhighlight lang="sql"> BEGIN TRANSACTION; UPDATE accounts SET balance = balance - 100 WHERE id = 1; UPDATE accounts SET balance = balance + 100 WHERE id = 2; COMMIT; -- 如果出错可以执行 ROLLBACK; </syntaxhighlight> === 视图 === 视图是基于SQL查询的虚拟表。 <syntaxhighlight lang="sql"> CREATE VIEW high_salary_employees AS SELECT name, salary FROM employees WHERE salary > 10000; </syntaxhighlight> === 存储过程和函数 === 可重用的SQL代码块。 <syntaxhighlight lang="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; </syntaxhighlight> === 触发器 === 在特定数据库事件发生时自动执行的操作。 <syntaxhighlight lang="sql"> CREATE TRIGGER update_timestamp BEFORE UPDATE ON employees FOR EACH ROW SET NEW.last_updated = CURRENT_TIMESTAMP; </syntaxhighlight> == 数据库实现 == SQL有多种实现,各数据库系统在遵循标准的同时也扩展了自己的特性: {| class="wikitable" |- ! 数据库系统 !! 特点 |- | [[MySQL]] || 开源、高性能、广泛使用 |- | [[PostgreSQL]] || 功能丰富、支持复杂数据类型 |- | [[Oracle Database]] || 企业级、高可用性 |- | [[Microsoft SQL Server]] || 与Windows生态集成紧密 |- | [[SQLite]] || 轻量级、嵌入式 |} == 性能优化 == === 索引 === 索引可显著提高查询性能。 <syntaxhighlight lang="sql"> -- 创建索引 CREATE INDEX idx_employee_name ON employees(name); -- 复合索引 CREATE INDEX idx_employee_dept_salary ON employees(department, salary); </syntaxhighlight> === 查询优化 === * 避免使用<code>SELECT *</code> * 使用<code>EXPLAIN</code>分析查询计划 * 合理使用JOIN替代子查询 == 实际应用案例 == === 电子商务系统 === SQL在电子商务系统中用于管理产品、订单和用户数据: <mermaid> 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 } </mermaid> === 数据分析 === SQL广泛用于数据分析,与[[Pandas]]、[[Spark]]等工具集成: <syntaxhighlight lang="sql"> -- 销售分析查询 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; </syntaxhighlight> == 学习资源 == * [[SQL教程]] - 基础语法学习 * [[数据库设计]] - 关系型数据库设计原则 * [[SQL性能优化]] - 高级查询优化技巧 == 参见 == * [[NoSQL]] - 非关系型数据库技术 * [[ORM]] - 对象关系映射技术 * [[数据库事务]] - ACID原则详解 [[Category:编程语言]] [[Category:数据库技术]] [[Category:查询语言]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
该页面使用的模板:
模板:Infobox 编程语言
(
编辑
)