SQL语言概况(4.1)
SQL语言概况(4.1)
参考资料:
数据库原理及设计(第3版)
配套数据库为:microsoft sql server
参照ANSI SQL-92标准
4.1 SQL语言概况
4.1.1 历史及标准简介
一切都源于关系型数据库之父——Edgar Frank Codd 于1970年6月首次提出了关系数据模型。
之后嘛,肯定是经历了以下这个过程:
各学校、公司开始理论研究,看看这个玩意儿能不能给带来利益?!
诶?!好像可以带来利益诶……那我们开发成产品商化吧,再配套一个使用工具(语言)!
权威机构:麻了?!怎么发展的这么蓬勃(五花八门)?!不得行,是时候我出场统一一下标准了!
基于标准开发,再来点扩展,投放市场使用……
其它公司:诶?!好玩意儿……可是我们的开发应用要界面啊,能不能把这个嵌入到其他语言中使用?!
……
至此,我们来梳理一下真正的历史过程:
1974年Boyce 和Chamberlin提出SQL
20世纪70年代中期,IBM公司在研制System R 的过程中,开发了世界上最早的SQL语言
1979年,Oracle公司最先提出了商用的SQL语言
SQL标准变迁史
- 1986年10月,ANSI制订,SQL-86
- 1989年,ANSI改进,SQL-89
- 1992年,ANSI与ISO合作改动完善,SQL-92
- 1999年,增加面向对象特征扩展,提出SQL:1999
- 2003年,SQL:2003
- ……
可以说,命名就很有意思了,就是年份结尾嘛,但是1999年开始变成四位数字,具体原因我也是百度了一篇博客,放出来《SQL标准简介》
还有一点,非正式的一些称呼:
- 第一代SQL语言,SQL1,SQL-86 & SQL-89
- 第二代SQL语言,SQL2,SQL-92
- 第三代SQL语言,SQL3,SQL:1999
其中,针对于SQL-92来说,绝大多数RDBMS产品不是完全支持的,那差异一般都会体现在SQL命令的语法上面。
针对这个不完全支持,我们可以从两个方向上来看:
- SQL-92中的某些功能,在实际RDBMS中可能没有得到支持
- 实际RDBMS也有可能出现该标准中没有的功能和特性
那么根据支持SQL-92的程度,我们可以分为三种:
- 入门(entry)级:其功能特性接近SQL-89
- 中间(intermediate)级:包含SQL-92近一半的新特点
- 完全(full)版:完全支持
因此,所给的建议是:
- 使用具体的RDBMS时,查阅产品的技术资料
- 增强SQL代码的移植性,最好采用在SQL标准中也推荐的功能
4.1.2 SQL语言定义及特点
什么是SQL语言?
- 是最流行的一种数据库语言
- 结构化查询语言(structured query language)
- 是RDBMS支持的数据库语言
很多人会跟我有一样的疑问,为啥叫查询语言???
首先不要被这个名字误导了,并不是它只支持查询,它的功能还有很多,,比如数据模式定义、数据的“增、删、改”以及安全和事务控制功能。
所以说……一个好的名字还是很重要的……
具体原因:从操纵数据的角度来看,查询是最重要也是用的最多的操作(想想你们自己管理开发的时候,是不是动不动就要查询这个查询那个?!)
接下来,我们看看这个SQL语言有哪些功能特点呢?
功能一体化。
说的有点玄乎,实际上就是,它作为数据库语言的一种,也是遵循数据库语言的划分,由3个子语言构成:
- DDL(data definition language)
- DML(data manipulation language)
- DCL(data control language)
各个自语言又有很多自己的功能……
语言非过程化。
之前我们说过,它的名字中有结构化,那什么是结构化,什么是过程化呢?
- 结构化是相对于过程化来说的
- 过程化的语言:需要用户在程序设计中指明程序“做什么”,还需要程序员按照一定的算法编写出“怎么做”的程序来。
- 结构化的预言(以RDBMS为例):用户只需要定义“做什么”,RDBMS系统内部会解决“怎么做”。
交互式与嵌入式使用。
- 交互式(interactive):用户直接在RDBMS控制台上使用SQL语言中的SQL命令直接交互。
- 嵌入式(embedded):在过程化语言(宿主host语言)中使用。
标准化与易移植性。
之前,我们也说过,各个具体的RDBMS产品中支持的SQL语言情况是有所差异的,但是大多都能支持标准的大部分,因此,移植起来会相对容易。
4.1.3 使用说明
利用SQL语言,可以完成关系模型的具体化,那我们之前知道,任何模型都包括3方面的内容:
- 数据结构
- 完整性约束
- 数据操纵
那么如何将这三部分具体化呢?
这由SQL语言中的两个子语言承担:
- DDL完成数据结构和完整性约束
- DML完成数据操纵
之后,我将会分块对这两个子语言进行学习……
SQL语言概况(4.1)的更多相关文章
- 2016 - 3 - 12 SQLite的学习之SQL语言入门
1.SQL语句的特点: 1.1 不区分大小写 1.2 每条语句以;结尾 2.SQL语句中常用关键字: select,insert,update,from,create,where,desc,order ...
- SQL 语言 - 数据库系统原理
SQL 发展历程 从 1970 年美国 IBM 研究中心的 E.F.Codd 发表论文到 1974 年 Boyce 和 Chamberlin 把 SQUARE 语言改为 SEQUEL 语言,到现在的 ...
- SQL语言
SQL语言的分类:DDL DML DQL DCL SQL中的操作无非就是(增删改查) DDL:Data Query Language,数据查询语言! 主要是用来定义和维护数据库的各种操作对象,比如库. ...
- SQL语言分类
SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML, 数据定义语言DDL,数据控制语言DCL. 1 数据查询语言DQL数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHER ...
- SQL语言概述
功能概述 DDL,数据库定义语言,创建,修改,删除数据库,表,视图,索引,约束条件等 DML,数据库操纵语言,对数据库中的数据进行增,删,改,查 DCL,数据库定义语言,对数据库总数据的访问设置权限 ...
- MySQL中的SQL语言
从功能上划分,SQL 语言可以分为DDL,DML和DCL三大类.1. DDL(Data Definition Language)数据定义语言,用于定义和管理 SQL 数据库中的所有对象的语言 :CRE ...
- atitit.java解析sql语言解析器解释器的实现
atitit.java解析sql语言解析器解释器的实现 1. 解析sql的本质:实现一个4gl dsl编程语言的编译器 1 2. 解析sql的主要的流程,词法分析,而后进行语法分析,语义分析,构建sq ...
- SQLLite 可以通过SQL语言来访问的文件型SQL数据库
Web Storage分为两类: - sessionStorage:数据保存在session 对象中(临时) - localStorage:数据保存在本地硬件设备中(永久) sessionStorag ...
- 数据库与SQL语言
数据库(DB) :长期储存在计算机中.有组织.可共享的数据的集合. 特点:(1)数据按一定的数据模型组织.描述和储存:(2)较小的冗余度:(3)数据独立性较高:(4)易扩展:(5)可共享(不同用户可按 ...
随机推荐
- Redis linux 下安装
Redis linux 下安装 下载Redis安装包,可以从Redis中文网站中下载 下载地址:http://www.redis.cn/download.html Redis4.0 稳定版本 使用&l ...
- python在办公时能给我们带来什么?
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:谦睿科技教育 PS:如有需要Python学习资料的小伙伴可以加点击下方 ...
- 你只要5行代码,拥有你的个性二维码,用Python生成动态二维码
如果想了解更多关于python的应用,可以私信我,或者点击下方链接自行获取,里面到资料都是免费的(http://t.cn/A6Zvjdun) 二维码满天飞,但是有没有想过Python也能制作出专属于自 ...
- requets中urlencode的问题
前言 今天团队群里有师傅问requests怎么设置不解码,这里是语误,其实师傅想说的是,如果设置不编码. 一开始我没懂,然后师傅们解答了这个问题后,我想了会儿懂了. 在一些CTF题目中,可能会碰到这样 ...
- 如何防止CDN防护被绕过
当攻击者发现目标站点存在CDN防护的时候,会尝试通过查找站点的真实IP,从而绕过CDN防护.我们来看一个比较常见的基于公有云的高可用架构,如下:CDN(入口层)->WAF(应用层防护)-> ...
- mybatis源码配置文件解析之三:解析typeAliases标签
在前边的博客在分析了mybatis解析settings标签,<mybatis源码配置文件解析之二:解析settings标签>.下面来看解析typeAliases标签的过程. 一.概述 在m ...
- 看完肯定懂的 Java 字符串常量池指南
字符串问题可谓是 Java 中经久不衰的问题,尤其是字符串常量池经常作为面试题出现.可即便是看似简单而又经常被提起的问题,还是有好多同学一知半解,看上去懂了,仔细分析起来却又发现不太明白. 背景说明 ...
- 线上Bug无法复现怎么办?老司机教你一招,SpringBoot远程调试不用愁!
前言 在部署线上项目时,相信大家都会遇到一个问题,线上的 Bug 但是在本地不会复现,多么无奈. 此时最常用的就是取到前端传递的数据用接口测试工具测试,比如 POSTMAN,复杂不,难受不? 今天陈某 ...
- Scrapy爬虫框架(2)--内置py文件
Scrapy概念图 这里有很多py文件,分别与Scrapy的各个模块对应 superspider是一个爬虫项目 spider1.py则是一个创建好的爬虫文件,爬取资源返回url和数据 items.py ...
- Ubuntu 修改 hosts 文件
sudo vi /etc/hosts sudo /etc/init.d/networking restart