跳转到内容

SQL

本页使用了标题或全文手工转换
维基百科,自由的百科全书

这是本页的一个历史版本,由Allinal留言 | 贡献2018年3月24日 (六) 06:11 首段编辑。这可能和当前版本存在着巨大的差异。

SQL
编程范型编程范型
設計者Donald D. Chamberlin英语Donald D. Chamberlin
Raymond F. Boyce英语Raymond F. Boyce
實作者國際標準化組織/国际电工委员会
发行时间1974
当前版本
  • SQL:2023(2023年6月1日)[1]
編輯維基數據鏈接
型態系統類型系統, 強型別
操作系统跨平台
檔案格式文件格式详情
扩展名
.sql
互联网媒体类型
application/sql[2][3]
开发者ISO/IEC
首次发布1986年 (1986)
最新版本
SQL:2016英语SQL:2016
2016年,​9年前​(2016
格式类型Database
标准ISO/IEC 9075
免费格式?
網站www.iso.org/standard/76583.html 編輯維基數據鏈接
主要實作產品
Many英语List of relational database management systems
衍生副語言
SQL-86, SQL-89, SQL-92, SQL:1999英语SQL:1999, SQL:2003英语SQL:2003, SQL:2006英语SQL:2006, SQL:2008英语SQL:2008, SQL:2011英语SQL:2011
受影响于
Datalog
影響語言
CQL英语Common Query Language, 语言集成查询, SOQL英语Salesforce Object Query Language, Windows PowerShell,[4] JPQL英语Java Persistence Query Language, 面向Java对象查询

SQL聆聽i/ˈɛs kjuː ˈɛl/,[5] or 聆聽i/ˈskwəl/;[6]结构化查询语言[7][8][9][10])是一种特定目的程式语言,用于管理关系数据库管理系统(RDBMS),或在关系流数据管理系统(RDSMS)中进行流处理。

SQL基于关系代数元组关系演算,包括一个数据定义语言数据操纵语言。SQL的范围包括数据插入、查询、更新和删除,数据库模式英语database schema创建和修改,以及数据访问控制。尽管SQL经常被描述为,而且很大程度上是一种声明式编程4GL),但是其也含有过程式编程的元素。

SQL是对埃德加·科德关系模型的第一个商业化语言实现,这一模型在其1970年的一篇具有影响力的论文《一个对于大型共享型数据库的关系模型》[11]中被描述。尽管SQL并非完全按照科德的关系模型设计,但其依然成为最为广泛运用的数据库语言。 [12][13]

SQL在1986年成为美国国家标准学会(ANSI)的一项标准,在1987年成为国际标准化组织(ISO)标准。[14]在此之后,这一标准经过了一系列的增订,加入了大量新特性。虽然有这一标准的存在,但大部分的SQL代码在不同的数据库系统中并不具有完全的跨平台性。

歷史

在1970年代初,由IBM公司San Jose,California研究實驗室的埃德加·科德發表將資料組成表格的應用原則(Codd's Relational Algebra)。1974年,同一實驗室的D.D.Chamberlin和R.F. Boyce對Codd's Relational Algebra在研制关系数据库管理系统System R中,研制出一套規範語言-SEQUEL(Structured English Query Language),並在1976年11月的IBM Journal of R&D上公布新版本的SQL(叫SEQUEL/2)。1980年改名為SQL。

1979年ORACLE公司首先提供商用的SQL,IBM公司在DB2和SQL/DS数据库系统中也实现了SQL。

1986年10月,美国ANSI采用SQL作为关系数据库管理系统的标准语言(ANSI X3. 135-1986),后为国际标准化组织(ISO)采纳为国际标准。

1989年,美国ANSI采纳在ANSI X3.135-1989报告中定义的关系数据库管理系统的SQL标准语言,称为ANSI SQL 89,该标准替代ANSI X3.135-1986版本。该标准为下列组织所采纳:

  • 国际标准化组织(ISO),为ISO 9075-1989报告“Database Language SQL With Integrity Enhancement”
  • 美国联邦政府,发布在The Federal Information Processing Standard Publication(FIPS PUB)127

目前,所有主要的关系数据库管理系统支持某些形式的SQL,大部分数据库至少遵守ANSI SQL89标准。

ANSI SQL92标准在交叉连接(cross join)和内部连接之上,新增加了外部连接,并支持在FROM子句中写连接表达式。支持集合的并运算、交运算。支持Case (SQL)表达式。支持CHECK约束。创建临时表。支持cursor。支持事务隔离

语法

图表显示了SQL语言元素组成的一个语句

SQL语言分成了几种要素,包括:

  • 子句,是语句和查询的组成成分。(在某些情况下,这些都是可选的。)[15]
  • 表达式,可以产生任何标量值,或由数据库表
  • 谓词,给需要评估的SQL三值逻辑(3VL)(true/false/unknown)或布尔真值指定条件,并限制语句和查询的效果,或改变程序流程。
  • 查询,基于特定条件检索数据。这是SQL的一个重要组成部分。
  • 语句,可以持久地影响纲要和数据,也可以控制数据库事务、程序流程、连接、会话或诊断。
    • SQL语句也包括分號(";")语句终结符。尽管并不是每个平台都必需,但它是作为SQL语法的标准部分定义的。
  • 无意义的空白在SQL语句和查询中一般会被忽略,更容易格式化SQL代码便于阅读。

语言特点

SQL是高级的非過程化編程語言,它允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解其具体的数据存放方式。而它的界面,能使具有底层结构完全不同的数据库系统和不同数据库之间,使用相同的SQL作为数据的输入与管理。它以记录项目〔records〕的合集(set)〔项集,record set〕作为操纵对象,所有SQL语句接受项集作为输入,回送出的项集作为输出,这种项集特性允许一条SQL语句的输出作为另一条SQL语句的输入,所以SQL语句可以嵌套,这使它拥有极大的灵活性和强大的功能。在多数情况下,在其他編程語言中需要用一大段程序才可实践的一个单独事件,而其在SQL上只需要一个语句就可以被表达出来。这也意味着用SQL可以写出非常复杂的语句,在不特別考慮效能下。

SQL同時也是数据库文件格式扩展名

SQL包含四个部分:

標準化

  • SQL-86
  • SQL-89
  • SQL-92
  • SQL:1999
  • SQL:2003
  • SQL:2006
  • SQL:2008
  • SQL:2011

SQL函数

函数 描述
AVG 平均值
COUNT 计数(不含Null)
First 第一个记录的值
MAX 最大值
MIN 最小值
STDEV 样本标准差
STDEVP 总体标准差
SUM 求和
VAR 样本方差
VARP 总体方差
UCASE 转化为全大写字母
LCASE 转化为全小写字母
MID 取中值
LEN 计算字符串长度
INSTR 获得子字符串在母字符串的起始位置
LEFT 取字符串左边子串
RIGHT 取字符串右边子串
ROUND 数值四舍五入取整
MOD 取余
NOW 获得当前时间的值
FORMAT 字符串格式化
DATEDIFF 获得两个时间的差值

以SQL為基礎的其他延伸語言

微軟MS SQL-Server,以及Sybase Adaptive Server英语Sybase Adaptive Server系列資料庫所用的SQL
Oracle 資料庫所使用的SQL

安全問題

由於SQL指令在部份進階使用時,語法會依照特定條件來變換,而且若是表格中的欄位過多時,許多開發人員都會習慣以字串組立的方式建立SQL指令,而且又使用系統管理員級的帳戶連到資料庫,因此讓駭客有機會利用SQL的組立方式進行攻擊,像是在指令中添加部份刺探性或破壞性的指令(例如DROP TABLEDROP DATABASE或是DELETE * FROM myTable等具破壞性的指令),讓資料庫的資料或實體伺服器被破壞,導致服務中斷或是系統癱瘓等後果,或是以邏輯的漏洞,在密碼欄寫入特殊字串(例如' or '1'='1),讓該字串形成的邏輯判斷永遠為真,或直接取得非查詢條件的資料,而不需要知道密碼,以達成非法登入系統的目的,此種攻擊手法稱為SQL注入(SQL injection)。

目前實務上較有效的防禦方法,就是全面改用參數化查詢

參考資料

  1. ^ SQL:2023 is out. 2023年6月1日 [2023年6月26日]. 
  2. ^ Media Type registration for application/sql. Internet Assigned Numbers Authority. 10 April 2013 [10 April 2013]. 
  3. ^ The application/sql Media Type, RFC 6922. Internet Engineering Task Force: 3. April 2013 [10 April 2013]. 
  4. ^ Paul, Ryan. A guided tour of the Microsoft Command Shell. Ars Technica. [10 April 2011]. 
  5. ^ Beaulieu, Alan. Mary E Treseler , 编. Learning SQL 2nd. Sebastapol, CA, USA: O'Reilly. April 2009. ISBN 978-0-596-52083-0. 
  6. ^ SQL, n.. Oxford English Dictionary. Oxford University Press. [2014-11-27]. 
  7. ^ Encyclopedia Britannica. SQL. [2013-04-02]. 
  8. ^ From Oxford Dictionaries: "Definition of SQL - abbreviation, Structured Query Language, an international standard for database manipulation." Oxford Dictionaries. SQL. 
  9. ^ IBM. SQL Guide. 
  10. ^ From Microsoft: "Structured Query Language, invented at IBM in the 1970s. It is more commonly known by its acronym, SQL .." Microsoft. Structured Query Language (SQL). 
  11. ^ Codd, Edgar F. A Relational Model of Data for Large Shared Data Banks. Communications of the ACM (Association for Computing Machinery). June 1970, 13 (6): 377–87 [2007-06-09]. doi:10.1145/362384.362685. (原始内容存档于2007-06-12). 
  12. ^ Chapple, Mike. SQL Fundamentals. Databases. About.com. [2009-01-28]. 
  13. ^ Structured Query Language (SQL). International Business Machines. October 27, 2006 [2007-06-10]. 
  14. ^ ISO/IEC 9075-1:2008: Information technology – Database languages – SQL – Part 1: Framework (SQL/Framework). 
  15. ^ ANSI/ISO/IEC International Standard (IS). Database Language SQL—Part 2: Foundation (SQL/Foundation). 1999.

相關

外部連結