对于早期的关系数据库,整个行业做了很多努力,试图统一不同的专用查询语言。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. 微信公众号发送客服消息提示errcode":45015,"errmsg":"response out of time limit or subscription is canceled hint:解决办法【已解决】

    微信公众号发送客服消息提示errcode":45015,"errmsg":"response out of time limit or subscription ...

  2. C#委托、事件剖析(上)

    本节对委托.事件做以总结. 一.委托: 1.概念:先来说明变量和函数的概念,变量,以某个地址为起点的一段内存中所存储的值,函数,以某个地址为起点的一段内存中存储的机器语言指令.有了这2个概念以后,我们 ...

  3. 使用libxml2进行xml开发(一)

    (一)Windows下使用MinGW和Code::Blocks环境配置libxml2 笔者此次是在windows 7下使用MinGW和Code::Blocks开发C程式的,手上的一个项目需要使用soc ...

  4. 没有过的题QAQ

    持续更新...纪念一下我的高分暴力...(好丢人啊qwq) NOI2014 动物园 80pts 用倍增暴力跳nxt数组 #include<iostream> #include<cst ...

  5. AGC002F Leftmost Ball

    题目传送门 Description \(n\)种颜色的球,每种\(k\)个,\((n,k\leq 2000)\)将\(n\cdot k\)个球排成一排,把每种颜色最左边的那个涂成白色(初始不含白色), ...

  6. Python面向对象(类的成员之字段)

    day24 类的成员之字段 # 字段         - 普通字段,保存在对象中,执行只能通过对象访问         - 静态字段,保存在类中,  执行 可以通过对象访问 也可以通过类访问 clas ...

  7. webpack快速入门——CSS文件打包

    1.在src下新建css文件,在css文件下新建index.css文件,输入以下代码 body{ background:pink; color:yellowgreen; } 2.css建立好后,需要引 ...

  8. Using Time Profiler in Instruments

    要用 release 版本来profile 概述 time profile 是使用采样的方法来统计,而不是记录每一个方法调用的起始和结束,采样间隔是 1 ms.  在上图中,main 函数被采样了 ...

  9. 汉诺塔问题(C++版)

    题目描述 Description 约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下.由小到大顺序串着由64个圆盘构成的塔.目的是将最左边杆上的盘全部移到中间的杆 ...

  10. 【bzoj4503】 两个串 FFT

    $FFT$套路题(然而我看错题了) 我们考虑化一下式子. 设当前比较的两个部分为$S[i....i+|T|-1]$和$T[0....|T|-1]$. 我们对串$T$中出现问号的位置全部赋值为$0$. ...