SQL

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP





body.skin-minerva .mw-parser-output table.infobox captiontext-align:center

































SQL
编程范型
编程范型
設計者
Donald D. Chamberlin英语Donald D. Chamberlin
Raymond F. Boyce英语Raymond F. Boyce
實作者
國際標準化組織/国际电工委员会
发行时间
1974


穩定版本

SQL:2016英语SQL:2016
( 2016


型態系統
類型系統, 強型別
作業系統
跨平台
檔案格式

文件格式详情
扩展名
.sql

互联网媒体类型

application/sql[1][2]
开发者
ISO/IEC
初始版本
1986年 (1986)
最新版本

SQL:2016英语SQL:2016
(2016年,​2年前​(2016)

格式类型
Database
标准
ISO/IEC 9075
自由格式
主要實作產品

Many英语List of relational database management systems
衍生副語言

SQL-86, SQL-89, SQL-92英语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,[3]JPQL英语Java Persistence Query Language, 面向Java对象查询

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


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


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


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




目录





  • 1 歷史


  • 2 语法


  • 3 语言特点

    • 3.1 SQL函数



  • 4 標準化


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


  • 6 安全問題


  • 7 参考文献


  • 8 外部連結


  • 9 参见




歷史


在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语言分成了几种要素,包括:


  • 子句,是语句和查询的组成成分。(在某些情况下,这些都是可选的。)[14]

  • 表达式,可以产生任何标量值,或由英语column (database)英语row (database)的数据库表

  • 谓词,给需要评估的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函数
















































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


標準化


各种数据库的SQL方言通常不可移植,特别是在日期时间语法、字符串连接、NULL、比较的大小写敏感方面。只有PostgreSQL与Mimer SQL努力遵从标准。Oracle数据库的DATE行为如同DATETIME,缺少TIME type)。


SQL在1986年被ANSI标准化,1987年被ISO标准化。由ISO/IEC JTC 1, Information technology, Subcommittee SC 32, Data management and interchange英语ISO/IEC JTC 1/SC 32维护。标准名称通常为如下模式: ISO/IEC 9075-n:yyyy Part n: title










































年份
名字
别名
注释
1986
SQL-86
SQL-87
ANSI首次标准化
1989
SQL-89

FIPS 127-1
小修改,增加了integrity constraint
1992

SQL-92英语SQL-92
SQL2, FIPS 127-2
大修改,成为现代SQL的基础
1999

SQL:1999英语SQL:1999
SQL3
增加了正则表达式匹配、递归查询(传递闭包)、数据库触发器、过程式与控制流语句、非标量类型(arrays)、面向对象特性。在Java中嵌入SQL(SQL/OLB)及其逆(SQL/JRT)
2003

SQL:2003英语SQL:2003

增加XML相关特性(SQL/XML)、window functions、标准化sequences、自动产生值的列。对SQL:1999的新特性重新描述其内涵。
2006

SQL:2006英语SQL:2006

导入/导出XML数据与SQL数据库。XQuery
2008

SQL:2008英语SQL:2008

在cursor之外的ORDER BY语句。INSTEAD OF触发器。TRUNCATE语句。FETCH子句
2011

SQL:2011英语SQL:2011

增加时态数据(PERIOD FOR)。增强了window functions与FETCH子句
2016

SQL:2016英语SQL:2016

增加行模式匹配、多态表函数、JSON。

SQL标准包含9部分:


  • ISO/IEC 9075-1:2016 Part 1: Framework (SQL/Framework). 提供逻辑概念

  • ISO/IEC 9075-2:2016 Part 2: Foundation (SQL/Foundation). 包含语言的主要内容,强制与可选特性。

  • ISO/IEC 9075-3:2016 Part 3: Call-Level Interface (SQL/CLI). 定义了接口成分(structures, procedures, variable bindings) 用于编写能执行SQL的应用程序的语言:Ada, C/C++, COBOL, Fortran, MUMPS, Pascal,PL/I. 对于Java语言见标准第10部分。ODBC是一个著名的SQL/CLI的超集。这部分标准主要包含强制的特性。

  • ISO/IEC 9075-4:2016 Part 4: Persistent stored modules (SQL/PSM)。SQL的过程式扩展,包括控制流、条件处理、语句条件signals与resignals、cursors、本地变量、表达式赋值到变量与参数。此外,SQL/PSM形式化声明与维护了持续性(persistent)数据库语言例程(例如存储过程)。这部分标准主要包含可选的特性。


  • Part-6: Support for JavaScript Object Notation (JSON). 2017年首次集成JSON数据类型到SQL标准。

  • ISO/IEC 9075-9:2016 Part 9: Management of External Data (SQL/MED). 这部分标准主要包含可选的特性。

  • ISO/IEC 9075-10:2016 Part 10: Object language bindings (SQL/OLB)。定义了SQLJ,SQL嵌入到Java,保证了SQLJ应用程序二进制可移植。这部分标准主要包含可选的特性。

  • ISO/IEC 9075-11:2016 Part 11: Information and definition schemas (SQL/Schemata). 定义了Information Schema与Definition Schema,提供了常用工具集使得SQL数据库与对象自描述。这些工具包括SQL object identifier、structure与integrity constraints、security与authorization specifications, features与packages。这部分标准主要包含强制与可选的特性。

  • ISO/IEC 9075-13:2016 Part 13: SQL Routines and types using the Java TM programming language (SQL/JRT). SQL应用程序调用静态方法作为子程序的能力('Java-in-the-database');Java类作为SQL结构化用户定义类型。这部分标准主要包含可选的特性。

  • ISO/IEC 9075-14:2016 Part 14: XML-Related Specifications (SQL/XML). 这部分标准主要包含可选的特性。

ISO/IEC 9075ISO/IEC 13249: SQL Multimedia and Application Packages (SQL/MM)补充。后者定义了基于SQL的音视频、空间数据的界面与包。包括:


  • ISO/IEC 13249-1:2016 Part 1: Framework

  • ISO/IEC 13249-2:2003 Part 2: Full-Text

  • ISO/IEC 13249-3:2016 Part 3: Spatial

  • ISO/IEC 13249-5:2003 Part 5: Still image

  • ISO/IEC 13249-6:2006 Part 6: Data mining

  • ISO/IEC 13249-7:2013 Part 7: History

  • ISO/IEC 13249-8:xxxx Part 8: Metadata Registry Access MRA (work in progress)


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


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

Oracle 資料庫所使用的SQL


安全問題



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


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



参考文献




  1. ^ Media Type registration for application/sql. Internet Assigned Numbers Authority. 10 April 2013 [10 April 2013]. 


  2. ^ The application/sql Media Type, RFC 6922. Internet Engineering Task Force: 3. April 2013 [10 April 2013]. 


  3. ^ Paul, Ryan. A guided tour of the Microsoft Command Shell. Ars Technica. [10 April 2011]. 


  4. ^ Beaulieu, Alan. Mary E Treseler, 编. Learning SQL 2nd. Sebastapol, CA, USA: O'Reilly. April 2009. ISBN 978-0-596-52083-0. 


  5. ^ SQL, n.. Oxford English Dictionary. Oxford University Press. [2014-11-27]. 


  6. ^ Encyclopedia Britannica. SQL. [2013-04-02]. 


  7. ^ From Oxford Dictionaries: "Definition of SQL - abbreviation, Structured Query Language, an international standard for database manipulation."
    Oxford Dictionaries. SQL. 



  8. ^ IBM. SQL Guide. 


  9. ^ 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). 



  10. ^ 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). 


  11. ^ Chapple, Mike. SQL Fundamentals. Databases. About.com. [2009-01-28]. 


  12. ^ Structured Query Language (SQL). International Business Machines. October 27, 2006 [2007-06-10]. 


  13. ^ ISO/IEC 9075-1:2008: Information technology – Database languages – SQL – Part 1: Framework (SQL/Framework). 


  14. ^ ANSI/ISO/IEC International Standard (IS). Database Language SQL—Part 2: Foundation (SQL/Foundation). 1999.



外部連結




  • Comparison of different SQL implementations


参见


  • 关系数据库

  • 语言集成查询



Popular posts from this blog

泉州府

大跃进

马相伯