对于早期的关系数据库,整个行业做了很多努力,试图统一不同的专用查询语言。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. Sql语句在SqlServer中创建数据库、表格并添加约束

    通过Sql语句来创建数据库与架构 创建数据库 数据库的创建首先是要引用主数据库的,需要在master数据库的环境下进行创建.大致的语法如下: -- 使用master数据库 use master -- ...

  2. 附加属性来控制控件中,要扩展模块的visibility

    可解决: 文本框控件中的按钮,DataGridColumnHeader中加入Filter控件... cs文件中的 附加属性 + 样式文件中的 template+控件 -> visibility ...

  3. sqlserver学习

    清空数据表: delete from TableName  清除表中的所有的数据,保留表的结构 truncate table TableName 清除表中所有行,保留表结构 (重置ID) 删除表 Dr ...

  4. Regularjs是什么

    本文由作者郑海波授权网易云社区发布. 此文摘自regularjs的指南, 目前指南正在全面更新, 把老文档的[接口/语法部分]统一放到了独立的 Reference页面. Regularjs是基于动态模 ...

  5. 使用pipreqs生成项目依赖

    作用 导出当前项目的环境依赖 使用 # 安装 pip3 install pipreqs # 导出项目环境依赖 pipreqs ./ # 如果是Windows系统,会报编码错误 (UnicodeDeco ...

  6. Python 读取大文件的方式

    对于读取容量小的文件,可以使用下面的方法: with open("path", "r") as f: f.read() 但是如果文件容量很大,高达几个G或者十几 ...

  7. tomcat apr Dockfile

    基于 centos7.4 jdk1.7 RUN yum makecache && yum --nogpgcheck -y groupinstall 'Development Tools ...

  8. Linux之开源软件移植

    移植环境 Utuntu 15.04 1.mplayer移植 版本:mplayer-export-snapshot.tar.bz2 /mplayer-export-2015-11-26 Linux PC ...

  9. PHP之旅8 URL与表单

    表单 表单的出现让用户和后台主机有了直接的交互,网站开始变的‘动态起来’,在HTML的各个标记符中,与PHP关系最为紧密的要属表单标记符了,常见的表单标记符有<form>.<inpu ...

  10. JAVA 垃圾笔记一溜堆

    精度只能从低精度 转到高精度.例如:float = 3.4;错误 默认小数在JAVA中是double. 即:从double高精度转到floag低精度错误!!将字符char加减乘除,默认对ASCII码运 ...