SQL

编程范型 | 编程范型 |
---|---|
設計者 | Donald D. Chamberlin Raymond F. Boyce |
實作者 | 國際標準化組織/国际电工委员会 |
发行时间 | 1974 |
当前版本 |
|
型態系統 | 類型系統, 強型別 |
操作系统 | 跨平台 |
檔案格式 | 文件格式详情 |
扩展名 |
.sql |
互联网媒体类型 | |
开发者 | ISO/IEC |
首次发布 | 1986年 |
最新版本 | SQL:2016 2016年 |
格式类型 | Database |
标准 | ISO/IEC 9075 |
免费格式? | 是 |
網站 | www |
主要實作產品 | |
Many | |
衍生副語言 | |
SQL-86, SQL-89, SQL-92, SQL:1999, SQL:2003, SQL:2006, SQL:2008, SQL:2011 | |
受影响于 | |
Datalog | |
影響語言 | |
CQL, 语言集成查询, SOQL, Windows PowerShell,[4] JPQL, 面向Java对象查询 |
SQL(i/ˈɛs kjuː ˈɛl/,[5] or
i/ˈsiːkwəl/;[6]结构化查询语言[7][8][9][10])是一种特定目的程式语言,用于管理关系数据库管理系统(RDBMS),或在关系流数据管理系统(RDSMS)中进行流处理。
SQL基于关系代数和元组关系演算,包括一个数据定义语言和数据操纵语言。SQL的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。尽管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语言分成了几种要素,包括:
- 子句,是语句和查询的组成成分。(在某些情况下,这些都是可选的。)[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-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系列資料庫所用的SQL
安全問題
由於SQL指令在部份進階使用時,語法會依照特定條件來變換,而且若是表格中的欄位過多時,許多開發人員都會習慣以字串組立的方式建立SQL指令,而且又使用系統管理員級的帳戶連到資料庫,因此讓駭客有機會利用SQL的組立方式進行攻擊,像是在指令中添加部份刺探性或破壞性的指令(例如DROP TABLE
、DROP DATABASE
或是DELETE * FROM myTable
等具破壞性的指令),讓資料庫的資料或實體伺服器被破壞,導致服務中斷或是系統癱瘓等後果,或是以邏輯的漏洞,在密碼欄寫入特殊字串(例如' or '1'='1),讓該字串形成的邏輯判斷永遠為真,或直接取得非查詢條件的資料,而不需要知道密碼,以達成非法登入系統的目的,此種攻擊手法稱為SQL注入(SQL injection)。
目前實務上較有效的防禦方法,就是全面改用參數化查詢。
參考資料
- ^ SQL:2023 is out. 2023年6月1日 [2023年6月26日].
- ^ Media Type registration for application/sql. Internet Assigned Numbers Authority. 10 April 2013 [10 April 2013].
- ^ The application/sql Media Type, RFC 6922. Internet Engineering Task Force: 3. April 2013 [10 April 2013].
- ^ Paul, Ryan. A guided tour of the Microsoft Command Shell. Ars Technica. [10 April 2011].
- ^ Beaulieu, Alan. Mary E Treseler , 编. Learning SQL 2nd. Sebastapol, CA, USA: O'Reilly. April 2009. ISBN 978-0-596-52083-0.
- ^ SQL, n.. Oxford English Dictionary. Oxford University Press. [2014-11-27].
- ^ Encyclopedia Britannica. SQL. [2013-04-02].
- ^ From Oxford Dictionaries: "Definition of SQL - abbreviation, Structured Query Language, an international standard for database manipulation." Oxford Dictionaries. SQL.
- ^ IBM. SQL Guide.
- ^ 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).
- ^ 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).
- ^ Chapple, Mike. SQL Fundamentals. Databases. About.com. [2009-01-28].
- ^ Structured Query Language (SQL). International Business Machines. October 27, 2006 [2007-06-10].
- ^ ISO/IEC 9075-1:2008: Information technology – Database languages – SQL – Part 1: Framework (SQL/Framework).
- ^ ANSI/ISO/IEC International Standard (IS). Database Language SQL—Part 2: Foundation (SQL/Foundation). 1999.
相關
