对于早期的关系数据库,整个行业做了很多努力,试图统一不同的专用查询语言。IBM曾建立了一个早期的标准,被称为Structured English Query Language,这个名字缩写为SEQUEL。另外一种语言称为"选择查询语言(Select Query Language,SQL)",它包含了一些只能为制作报表和查找记录而读取数据的命令。当该语言成为流行的、与产品无关的标准时,数据库人士仍在坚持使用Sequel这个首字母缩写词。最终通过增加了一些命令,该数据库可以实现添加、删除、修改记录的操作。但这时出现了一个进退两难的局面:他们这么费劲地创建了一种标准语言,但这个可爱的名字却不合适了。最后Select被Structured所替代,于是,整个行业的争论趋向缓和。当然,正统人士坚持把SQL读作ESS CUE EL而不是SEQUEL。那么,究竟应怎么读这个词呢?怎么读都可以,不过我还是选择省略一个音节,读作SEQUEL(尽管你可能会不太同意这种读法)。为了让SQL语言不依赖于特定的产品或公司,SQL标准由独立的标准化组织发表并持有。SQL标准最初是由美国国家标准协会注册的,正式名称是ANSI SQL标准,发表于1986年。这个标准修订了多次,以下是这些修订版:

ANSI SQL-86

ANSI SQL-89

ANSI SQL-92

ANSI SQL:1999

ANSI SQL:2003

ANSI SQL:2006

虽然这个概念看起来简单,但还存在一些故事。实际上,此时的ANSI SQL标准不再由美国国家标准协会独家拥有了-美国土生土长的标准被全世界采纳的现象屡见不鲜。1987年,SQL成为国际标准,注册者是国际标准化组织(ISO),不过仍旧使用以往的版权名称,即ANSI SQL。这就意味着1992年修订版的SQL标准实际上被称为ISO ANSI SQL-92。尽管在1999年、2003年和2006年分别对此标准进行了修订,大多数基于SQL的数据库产品仍建立在ANSI SQL-92标准上,并没有被修改为完全符合ANSI SQL-99、2003或2006规范。如同其大多数竞争对手一样,T-SQL并不完全符合最近的ANSI标准,但是它实现了其中一些功能。

最后,ANSI SQL标准实际上定义了三个级别的兼容性:入门级、中级与完整级。大多数产品(包括SQL Server)完全符合入门级标准,部分符合更高的标准。

4.1  SQL的本质

许多使用T-SQL的人都有其他语言的使用经验。如果用户从来没接触过编程,请别把书合上就此放弃。有编程经验并不是编写SQL的先决条件,只不过对用过计算机系统其他语言的人来说,这种经验可作为参考。

把T-SQL与过程化或面向对象的编程语言(比如Java、C、C++、C#或者Visual Basic)相比较,就如比较苹果和石榴一样,两者没有更好或者更坏之分,即使在语法上或者某些语句的结构上的确存在相似性,但SQL和真正的编程语言相比还是有很大差异性的。对于不同的操作类型,T-SQL可能比这些语言先进得多,也可能差得多,因为它们所实现的目标不同。很难概括不同语言的功能,因为它们一直在演化,一个版本接着一个版本,添加越来越多的功能。而行业标准的问题就是,每个人都在保护并增强自己的产品。随着时间的推移,每项技术(这里是指编程语言)的功能开始重叠,提供了一大堆不同的选项来完成相同的任务。

那么是否可以不使用SQL,而使用过程化编程语言来完成数据访问或者数据操纵(在数据库中插入、修改或删除值)呢?回答是可以,但是这比较笨拙,通常也很低效。那么能否在T-SQL中实现复杂的数学运算、循环、字符串解析、多维数组管理呢?可以,不过这会耗费很多的时间和精力。第1章提到,SQL Server 2005允许程序员完全使用面向对象的程序代码(而不是SQL)编写存储过程与用户定义的函数,这不会让作为SQL Server本地语言的T-SQL在性能上有任何缺失,而只是给程序员提供了另一个选择。

T-SQL主要用于关系数据的操作,这没什么可惊奇的。T-SQL也有许多有用的功能来实现标量(单值)数据操作、逻辑运算、数学计算、决策结构、文本字符串解析以及循环机制。然而,和大多数编程语言相比,SQL不如真正的编程语言那样强大。如果需要超出SQL范围的高级功能,就要仔细考虑一下使用另一种方法,比如定制的扩展存储过程、应用程序编程接口(API)、.NET程序集或者其他编程解决方案。所以SQL Server的集成服务既可以使用编程代码也可以使用T-SQL。在解决了这个问题之后,现在您应该知道T-SQL可以做什么了吧?真是非常多。那么又应使用T-SQL执行什么操作?这是一个更好的问题。希望读者在看完了本章后能找出答案。

T-SQL是与SQL Server交流的语言,而查询表达式主要用来告诉服务器该做什么。一定要知道可以要求SQL Server做什么和SQL Server能做什么。查询操作可分为三类,下面简要描述它们,然后讲解几个例子。和技术世界里的所有事物一样,这些类别用三字母缩写词(Three-letter abbreviations,TLA)表示,按顺序介绍如下:

数据定义语言(Data Definition Language,DDL):用于创建、管理数据库中的对象。DLL语句可以创建、修改、删除数据库、表、索引、视图、存储过程和其他对象。例如CREATE/ALTER和DROP。

数据控制语言(Data Control Language,DCL):DCL语句用于控制用户和数据库对象的安全权限。一些对象有不同的权限集。可以给特定的用户或者用户组授予或者拒绝这些权限。这些用户或者用户组属于一个数据库角色或者Windows用户组(如GRANT、REVOKE和DENY)。

数据操纵语言(Data Manipulation Language,DML):DML语句用于处理数据,包括数据检索、在表中插入行、修改值、删除行等。例如SELECT、INSERT、UPDATE和DELETE。

【责任编辑:云霞 TEL:(010)68476606】

4.1 SQL的本质的更多相关文章

  1. atitit.查看预编译sql问号 本质and原理and查看原生sql语句

    atitit.查看预编译sql问号 本质and原理and查看原生sql语句 1. 预编译原理. 1 2. preparedStatement 有三大优点: 1 3. How to look  gene ...

  2. 其实SQL优化调优,就跟吃饭喝水一样简单,教你抓住SQL的本质!

    前言 SOL 优化并不简单,做好 SOL 优化需要掌握数据库体系结构.表和索引设计.高效 SOL法.高级 SOL 语法.多种优化工具等知识,甚至还得分析业务特点,以及了解优化器的缺点.只有建立 SOL ...

  3. LINQ之路(2):LINQ to SQL本质

    LINQ之路(2):LINQ to SQL本质 在前面一篇文章中回顾了LINQ基本语法规则,在本文将介绍LINQ to SQL的本质.LINQ to SQL是microsoft针对SQL Server ...

  4. 谈一谈SQL Server中的执行计划缓存(上)

    简介 我们平时所写的SQL语句本质只是获取数据的逻辑,而不是获取数据的物理路径.当我们写的SQL语句传到SQL Server的时候,查询分析器会将语句依次进行解析(Parse).绑定(Bind).查询 ...

  5. 基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)

    基于Oracle的SQL优化(社区万众期待数据库优化扛鼎巨著) 崔华 编   ISBN 978-7-121-21758-6 2014年1月出版 定价:128.00元 856页 16开 编辑推荐 本土O ...

  6. atitit.java解析sql语言解析器解释器的实现

    atitit.java解析sql语言解析器解释器的实现 1. 解析sql的本质:实现一个4gl dsl编程语言的编译器 1 2. 解析sql的主要的流程,词法分析,而后进行语法分析,语义分析,构建sq ...

  7. Mybatis动态SQL简单了解 Mybatis简介(四)

    动态SQL概况 MyBatis 的强大特性之一便是它的动态 SQL 在Java开发中经常遇到条件判断,比如: if(x>0){ //执行一些逻辑........ }   Mybatis应用中,S ...

  8. 浅析SQL Server中的执行计划缓存(上)

    简介 我们平时所写的SQL语句本质只是获取数据的逻辑,而不是获取数据的物理路径.当我们写的SQL语句传到SQL Server的时候,查询分析器会将语句依次进行解析(Parse).绑定(Bind).查询 ...

  9. Web安全XSS、CSRF和SQL注入

    SQL注入 SQL注入是以用户的输入作为sql语句的一部分,如后端接收到用户的请求数据后,不经过数据转义,就把数据拼接到SQL中执行,容易导致SQL的语义被篡改,即受到攻击了. 解决办法是对接收的数据 ...

随机推荐

  1. 打开SQL2008R2配置工具,提示远程调用失败[0x800706be]

    卸载了Microsoft SQL Server 2012 Express LocalDB,依然不行. 再卸载Microsoft SQL Server 2014 LocalDB,此时右边显示框已可以显示 ...

  2. C# 二维码/条形码入门操作

    效果图: 先给之前的群友道个歉,说声不好意思.QRCoder 只支持二维码,没有条形码. 以上demo生成条形码是用 BarcodeLib 这个库,识别是用 zxing,二维码生成用 QRCoder, ...

  3. 深入理解Aspnet Core之Identity(4)

    主题 之前简单介绍了Asp.net core 的初步的使用,本篇我打算给大家介绍一下Identity的架构,让大家对Identity有一个总体的理解和认识. 简介 博客原文欢迎访问我的博客网站,地址是 ...

  4. C# 动态生成Html地图文件

    public void GPSModel(string x, string y, string ss)//动态地图文件 { if (x.Contains("-") &&am ...

  5. C#之asp.net 及MVC 生成动态验证码:

    C#之asp.net 及MVC 生成动态验证码: 1.生成验证码字符串 // 随机生成指定长度的验证码字符串private string RandomCode(int length) { string ...

  6. SharePoint列表数据清除

    --获取站点对象 $spWeb =get-spweb http://123.sinochem.com --获取具体列表对象 $spList =$spWeb.GetListFromUrl("h ...

  7. 如何把OpenWrt安装到PC?

    前言 什么是openwrt? 它是一个适用于路由器的Linux发行版.和其他Linux发行版一样,它也内置了包管理工具,你可以从一个软件仓库里直接安装软件.OpenWrt可以用在所有需要嵌入式Linu ...

  8. Visual Studio在Win10中以管理员方式运行

    在Win10中运行VS不是默认以管理员程序运行的,需要手动设置 第一步:将VS快捷方式设置为以管理员身份运行 第二部 在C:\Program Files\Microsoft Visual Studio ...

  9. 【文文殿下】CF1098C Construct a tree 题解

    题解 挺水的一道题. Rating $ \color{orange} {2300}$ 以下送命题. 首先我们知道,所有子树大小之和就是节点个数加上从根到所有节点的路径长度之和. 他要求度数尽可能小,所 ...

  10. Tomcat几种出错方法

    1.  Several ports (8005, 8089, 8009) required by Tomcat v8.0 Server at localhost are already in use. ...