SQL 概要

学习要点

  • SQL 是为操作数据库而开发的语言。

  • 虽然 SQL 也有标准,但实际上根据 RDBMS 的不同 SQL 也不尽相同。

  • SQL 通过一条语句来描述想要进行的操作,发送给 RDBMS。

  • 原则上 SQL 语句都会使用分号结尾。

  • SQL 根据操作目的可以分为 DDL、DML 和 DCL。

一、标准 SQL

如前所述,本教程所要学习的 SQL 是用来操作关系数据库的语言。它原本是为了提高数据库查询效率而开发的语言,但是现在不仅可以进行数据查询,就连数据的插入和删除等操作也基本上都可以通过 SQL 来完成了。国际标准化组织(ISO)为 SQL 制定了相应的标准,以此为基准的

KEYWORD

  • SQL

SQL 称为标准 SQL(相关信息请参考专栏——标准 SQL 和特定的 SQL)。以前,完全基于标准 SQL 的 RDBMS 很少,通常需要根据不同的 RDBMS 来编写特定的 SQL 语句。这样一来,就会造成能够在 Oracle 中使用的 SQL 语句却无法在 SQL Server 中使用,反之亦然。近来,对标准 SQL 的支持取得了一些进展,因此希望准备学习 SQL 的读者们能够从现在开始就牢记标准 SQL 的书写方式。

KEYWORD

  • 标准 SQL

原则上,本教程介绍的都是标准 SQL 1 的书写方式,但是根据 RDBMS 的不同也会存在一些特殊的 SQL 语句。如果遇到这种情况,将会通过其他途径对其进行说明。

法则 3

学会标准 SQL 就可以在各种 RDBMS 中书写 SQL 语句了。

二、SQL 语句及其种类

SQL 用关键字、表名、列名等组合而成的一条语句(SQL 语句)来描述操作的内容。关键字是指那些含义或使用方法已事先定义好的英语单词,存在包含“对表进行查询”或者“参考这个表”等各种意义的关键字。

KEYWORD

  • 关键字

根据对 RDBMS 赋予的指令种类的不同,SQL 语句可以分为以下三类。

  • DDL

    DDL(Data Definition Language,数据定义语言) 用来创建或者删除存储数据用的数据库以及数据库中的表等对象。DDL 包含以下几种指令。

    KEYWORD

    • DDL(数据定义语言)

    CREATE:创建数据库和表等对象

    DROP:删除数据库和表等对象

    ALTER:修改数据库和表等对象的结构

  • DML

    DML(Data Manipulation Language,数据操纵语言) 用来查询或者变更表中的记录。DML 包含以下几种指令。

    KEYWORD

    • DML(数据操纵语言)

    SELECT:查询表中的数据

    INSERT:向表中插入新数据

    UPDATE:更新表中的数据

    DELETE:删除表中的数据

  • DCL

    DCL(Data Control Language,数据控制语言) 用来确认或者取消对数据库中的数据进行的变更。除此之外,还可以对 RDBMS 的用户是否有权限操作数据库中的对象(数据库表等)进行设定。DCL 包含以下几种指令。

    KEYWORD

    • DCL(数据控制语言)

    COMMIT:确认对数据库中的数据进行的变更

    ROLLBACK:取消对数据库中的数据进行的变更

    GRANT:赋予用户操作权限

    REVOKE:取消用户的操作权限

实际使用的 SQL 语句当中有 90% 属于 DML,本教程同样会以 DML 为中心进行讲解。

法则 4

SQL 根据功能不同可以分为三类,其中使用最多的是 DML。

三、SQL 的基本书写规则

书写 SQL 语句时必须要遵守一些规则。这些规则都非常简单,接下来就让我们逐一认识一下吧。

  • SQL 语句要以分号(;)结尾

    一条 SQL 语句可以描述一个数据库操作。在 RDBMS 当中,SQL 语句也是逐条执行的。

    众所周知,我们在句子的句尾加注标点表示结束,中文句子以句号(。)结尾,英文以点号(.)结尾,而 SQL 语句则使用分号(;)结尾。

    KEYWORD

    • 分号(;)

    法则 5

    SQL 语句以分号(;)结尾。

  • SQL 语句不区分大小写

    SQL 不区分关键字的大小写。例如,不管写成 SELECT 还是 select,解释都是一样的。表名和列名也是如此。

    虽然可以根据个人喜好选择大写还是小写(或大小写混杂),但为了理解起来更加容易,本教程使用以下规则来书写 SQL 语句。

    • 关键字大写

    • 表名的首字母大写

    • 其余(列名等)小写

    法则 6

    关键字不区分大小写。

    但是插入到表中的数据是区分大小写的。例如,在操作过程中,数据 ComputerCOMPUTERcomputer,三者是不一样的。

  • 常数的书写方式是固定的

    SQL 语句常常需要直接书写字符串 2、日期或者数字。例如,书写向表中插入字符串、日期或者数字等数据的 SQL 语句。

    在 SQL 语句中直接书写的字符串、日期或者数字等称为常数。常数的书写方式如下所示。

    SQL 语句中含有字符串的时候,需要像 'abc' 这样,使用 单引号(' 将字符串括起来,用来标识这是一个字符串。

    KEYWORD

    • 常数

    • 单引号(')

    SQL 语句中含有日期的时候,同样需要使用单引号将其括起来。日期的格式有很多种('26 Jan 2010' 或者 '10/01/26' 等),本教程统一使用 '2010-01-26' 这种 '年 -月 - 日' 的格式。

    在 SQL 语句中书写数字的时候,不需要使用任何符号标识,直接写成 1000 这样的数字即可。

    法则 7

    字符串和日期常数需要使用单引号(')括起来。

    数字常数无需加注单引号(直接书写数字即可)。

  • 单词需要用半角空格或者换行来分隔

SQL 语句的单词之间需使用半角空格或换行符来进行分隔。如下这种未加分隔的语句会发生错误,无法正常执行。

KEYWORD

  • 错误

    由程序不匹配、故障、输入错误等多种原因造成的系统或者程序未按照预定处理执行或者无法执行的状况。通常出错时,处理会被强制终止,并显示错误信息。

CREATE TABLE Product

× CREATETABLE Product

× CREATE TABLEProduct

但是不能使用全角空格作为单词的分隔符,否则会发生错误,出现无法预期的结果。

法则 8

单词之间需要使用半角空格或者换行符进行分隔。

专栏

标准 SQL 和特定的 SQL

每隔几年,ANSI(美国国家标准协会)或 ISO(国际标准化组织)等便会修订 SQL 的标准,进行语法的修订并追加新功能。

1986 年,ANSI 首次制定了 SQL 的标准,之后又进行了数次修订。本教程编写时(2016 年 5 月)使用的是 2011 年修订的最新版本(SQL:2011)。修订后的标准以修订年份来命名,例如 SQL:1999、SQL:2003、SQL:2008 等。以这些标准为基准的 SQL 就是标准 SQL。

但是,SQL 的标准并不强制“每种 RDBMS 都必须使用”。虽然支持标准 SQL 的 RDBMS 越来越多,但还是存在标准 SQL 无法执行的情况。这时就需要使用只能在特定 RDBMS 中使用的特殊 SQL 语句。

其实,这也是没有办法的事情,起初(大约在 20 世纪 80 年代到 90 年代),标准 SQL 能够实现的功能非常有限,无法完全满足实际需要。RDBMS 的供应商为了弥补这些不足,不得不再单独追加所需要的功能。

尽管如此,这些特定的 SQL 所带来的并不都是负面的影响。标准 SQL 将一些独特的功能收录其中,对其自身的发展起到了积极的推进作用。过去,各个供应商为了展现本公司的优势和独特性,也曾不遗余力地开发各自特定的 SQL。目前的标准 SQL 经过多次修订,功能已经十分完善。准备学习 SQL 的读者们,就让我们先从牢记标准 SQL 的书写方法开始吧。

请参阅

(完)


  1. 本教程将介绍以 [SQL :2003] 为基准的标准 SQL 的书写方式。 ↩︎

  2. 一个以上的连续字符。 ↩︎

comments powered by Disqus