SQL 零基础入门教程

SQL 是使用最为广泛的数据库语言。不管你是应用开发者、数据库管理员、Web 应用设计师、移动应用开发人员,还是只使用流行的报表工具的普遍用户,掌握良好的 SQL 知识对用好数据库都是很重要的。

本 SQL 零基础入门教程将讲授读者需要了解的 SQL 基础知识,从简单的数据检索入手,逐步过渡到一些较为复杂的内容,如联结、子查询、存储过程、游标、触发器以及表约束等。读者将从本 SQL 零基础入门教程中循序渐进、系统而直接地学到 SQL 的知识和技巧。

一、了解 SQL

你正在阅读本 SQL 教程,这表明你需要以某种方式与数据库打交道。SQL 正是用来实现这一任务的语言,因此在学习 SQL 之前,你应该对数据库及数据库技术的某些基本概念有所了解。

这一部分介绍了什么是 SQL,它为什么很有用。因为 SQL 是用来与数据库打交道的,所以,我们也复习了一些基本的数据库术语。

二、检索数据

正如上一个部分所介绍的,SQL 语句是由简单的英语单词构成的。这些单词称为关键字,每个 SQL 语句都是由一个或多个关键字构成的。最经常使用的 SQL 语句大概就是 SELECT 语句了。它的用途是从一个或多个表中检索信息。

这一部分的 SQL 教程学习了如何使用 SQL 的 SELECT 语句来检索单个表列、多个表列以及所有表列。你也学习了如何返回不同的值,如何注释代码。同时不好的消息是,复杂的 SQL 语句往往不够通用。下一部分将讲授如何对检索出来的数据进行排序。

三、排序检索数据

这一部分的 SQL 教程学习了如何用 SELECT 语句的 ORDER BY 子句对检索出的数据进行排序。这个子句必须是 SELECT 语句中的最后一条子句。根据需要,可以利用它在一个或多个列上对数据进行排序。

四、过滤数据

数据库表一般包含大量的数据,很少需要检索表中的所有行。通常只会根据特定操作或报告的需要提取表数据的子集。只检索所需数据需要指定搜索条件(search criteria),搜索条件也称为过滤条件(filter condition)。

这一部分的 SQL 教程介绍了如何用 SELECT 语句的 WHERE 子句过滤返回的数据。我们学习了如何检验相等、不相等、大于、小于、值的范围以及 NULL 值等。

五、高级数据过滤

这一部分的 SQL 教程讲授了如何用 ANDOR 操作符组合成 WHERE 子句以建立功能更强、更高级的搜索条件。还讲授了如何明确地管理求值顺序,如何使用 INNOT 操作符。

六、用通配符进行过滤

前面介绍的所有操作符都是针对已知值进行过滤的。不管是匹配一个值还是多个值,检验大于还是小于已知值,或者检查某个范围的值,其共同点是过滤中使用的值都是已知的。

但是,这种过滤方法并不是任何时候都好用。例如,怎样搜索产品名中包含文本 “bean bag” 的所有产品?用简单的比较操作符肯定不行,必须使用通配符。

这一部分的 SQL 教程介绍了什么是通配符、如何使用通配符,如何在 WHERE 子句中使用 SQL 通配符,以及怎样使用 LIKE 操作符进行通配搜索,以便对数据进行复杂过滤。还说明了通配符应该细心使用,不要使用过度。

七、创建计算字段

这一部分的 SQL 教程介绍了计算字段以及如何创建计算字段。我们用例子说明了计算字段在字符串拼接和算术计算中的用途。此外,还讲述了如何创建和使用别名,以便应用程序能引用计算字段。

八、使用函数处理数据

与大多数其他计算机语言一样,SQL 也可以用函数来处理数据。函数一般是在数据上执行的,为数据的转换和处理提供了方便。

这一部分的 SQL 教程介绍了什么是函数,DBMS 支持何种函数,以及如何使用这些函数;如何使用 SQL 的数据处理函数。虽然这些函数在格式化、处理和过滤数据中非常有用,但它们在各种 SQL 实现中很不一致。

九、汇总数据

我们经常需要汇总数据而不用把它们实际检索出来,为此 SQL 提供了专门的函数。使用这些函数,SQL 查询可用于检索数据,以便分析和报表生成。这种类型的检索例子有:

  • 确定表中行数(或者满足某个条件或包含某个特定值的行数);
  • 获得表中某些行的和;
  • 找出表列(或所有行或某些特定的行)的最大值、最小值、平均值。

上述例子都需要汇总出表中的数据,而不需要查出数据本身。因此,返回实际表数据纯属浪费时间和处理资源。再说一遍,我们实际想要的是汇总信息。

为方便这种类型的检索,SQL 给出了 5 个聚集函数。聚集函数用来汇总数据,可以用多种方法使用它们,返回所需的结果。这些函数很高效,它们返回结果一般比你在自己的客户端应用程序中计算要快得多。

十、分组数据

上一部分介绍了如何用 SQL 聚集函数对数据进行汇总计算。这一部分的 SQL 教程讲授了如何使用 GROUP BY 子句对多组数据进行汇总计算,返回每个组的结果。我们看到了如何使用 HAVING 子句过滤特定的组,还知道了 ORDER BYGROUP BY 之间以及 WHEREHAVING 之间的差异。

十一、使用子查询

SELECT 语句是 SQL 的查询。我们迄今为止所看到的所有 SELECT 语句都是简单查询,即从单个数据库表中检索数据的单条语句。

SQL 还允许创建子查询(subquery),即嵌套在其他查询中的查询。

这一部分的 SQL 教程学习了什么是子查询,如何使用它们。子查询常用于 WHERE 子句的 IN 操作符中,以及用来填充计算列。我们举了这两种操作类型的例子。

十二、联结表

SQL 最强大的功能之一就是能在数据查询的执行中联结(join)表。联结是利用 SQL 的 SELECT 能执行的最重要的操作,很好地理解联结及其语法是学习 SQL 的极为重要的部分。

联结是 SQL 中一个最重要、最强大的特性,有效地使用联结需要对关系数据库设计有基本的了解。这一部分的 SQL 教程在介绍联结时,讲述了一些关系数据库设计的基本知识,包括等值联结(也称为内联结)这种最常用的联结。下一部分将介绍如何创建其他类型的联结。

十三、创建高级联结

这一部分的 SQL 教程是上一部分的延续,首先讲授了如何以及为什么使用别名,然后讨论不同的联结类型以及每类联结所使用的语法。我们还介绍了如何与联结一起使用聚集函数,以及在使用联结时应该注意的问题。

十四、组合查询

多数 SQL 查询只包含从一个或多个表中返回数据的单条 SELECT 语句。但是,SQL 也允许执行多个查询(多条 SELECT 语句),并将结果作为一个查询结果集返回。这些组合查询通常称为并(union)或复合查询(compound query)。

主要有两种情况需要使用组合查询:

  • 在一个查询中从不同的表返回结构数据;
  • 对一个表执行多个查询,按一个查询返回数据。

这一部分的 SQL 教程讲授如何用 UNION 操作符来组合 SELECT 语句。利用 UNION,可以把多条查询的结果作为一条组合查询返回,不管结果中有无重复。使用 UNION 可极大地简化复杂的 WHERE 子句,简化从多个表中检索数据的工作。

十五、插入数据

毫无疑问,SELECT 是最常用的 SQL 语句了,这就是前 14个部分都在讲它的原因。但是,还有其他 3 个常用的 SQL 语句需要学习。第一个就是 INSERT 另外两个分别是 UPDATEDELETE

这一部分的 SQL 教程介绍如何将行插入到数据库表中。我们学习了使用 INSERT 的几种方法,为什么要明确使用列名,如何用 INSERT SELECT 从其他表中导入行,如何用 SELECT INTO 将行导出到一个新表。下一部分将讲述如何使用 UPDATEDELETE 进一步操作表数据。

十六、更新和删除数据

这一部分的 SQL 教程讲述了如何使用 UPDATEDELETE 语句处理表中的数据。我们学习了这些语句的语法,知道了它们可能存在的危险,了解了为什么 WHERE 子句对 UPDATEDELETE 语句很重要,还学习了为保证数据安全而应该遵循的一些指导原则。

十七、创建和操纵表

这一部分的 SQL 教程介绍了几条新的 SQL 语句。CREATE TABLE 用来创建新表,ALTER TABLE 用来更改表列(或其他诸如约束或索引等对象),而 DROP TABLE 用来完整地删除一个表。这些语句必须小心使用,并且应该在备份后使用。由于这些语句的语法在不同的 DBMS 中有所不同,所以更详细的信息请参阅相应的 DBMS 文档。

十八、使用视图

这一部分的 SQL 教程将介绍什么是视图,它们怎样工作,何时使用它们;还将讲述如何利用视图简化前几个部分中执行的某些 SQL 操作。

视图为虚拟的表。它们包含的不是数据而是根据需要检索数据的查询。视图提供了一种封装 SELECT 语句的层次,可用来简化数据处理,重新格式化或保护基础数据。

十九、使用存储过程

迄今为止,我们使用的大多数 SQL 语句都是针对一个或多个表的单条语句。并非所有操作都这么简单,经常会有一些复杂的操作需要多条语句才能完成,例如以下的情形。

  • 为了处理订单,必须核对以保证库存中有相应的物品。
  • 如果物品有库存,需要预定,不再出售给别的人,并且减少物品数据以反映正确的库存量。
  • 库存中没有的物品需要订购,这需要与供应商进行某种交互。
  • 关于哪些物品入库(并且可以立即发货)和哪些物品退订,需要通知相应的顾客。

这显然不是一个完整的例子,它甚至超出了本教程中所用样例表的范围,但足以表达我们的意思了。执行这个处理需要针对许多表的多条 SQL 语句。此外,需要执行的具体 SQL 语句及其次序也不是固定的,它们可能会根据物品是否在库存中而变化。

这一部分的 SQL 教程介绍了什么是存储过程,为什么使用存储过程。我们介绍了执行和创建存储过程的语法,使用存储过程的一些方法。存储过程是个相当重要的主题,一个部分的内容无法全部涉及。各种 DBMS 对存储过程的实现不一,你使用的 DBMS 可能提供了一些这里提到的功能,也有其他未提及的功能,更详细的介绍请参阅具体的 DBMS 文档。

二十、管理事务处理

使用事务处理(transaction processing),通过确保成批的 SQL 操作要么完全执行,要么完全不执行,来维护数据库的完整性。

这一部分的 SQL 教程介绍了事务是必须完整执行的 SQL 语句块。我们学习了如何使用 COMMITROLLBACK 语句对何时写数据、何时撤销进行明确的管理;还学习了如何使用保留点,更好地控制回退操作。事务处理是个相当重要的主题,一个部分的内容无法全部涉及。各种 DBMS 对事务处理的实现不同,详细内容请参考具体的 DBMS 文档。

二十一、使用游标

SQL 检索操作返回一组称为结果集的行,这组返回的行都是与 SQL 语句相匹配的行(零行到多行)。简单地使用 SELECT 语句,没有办法得到第一行、下一行或前 10 行。但这是关系 DBMS 功能的组成部分。

有时,需要在检索出来的行中前进或后退一行或多行,这就是游标的用途所在。游标(cursor)是一个存储在 DBMS 服务器上的数据库查询,它不是一条 SELECT 语句,而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。

我们在这个部分的 SQL 教程中讲授了什么是游标,为什么使用游标。你使用的 DBMS 可能会提供某种形式的游标,以及这里没有提及的功能。更详细的内容请参阅具体的 DBMS 文档。

二十二、高级 SQL 特性

这个部分的 SQL 教程讲授如何使用 SQL 的一些高级特性。约束是实施引用完整性的重要部分,索引可改善数据检索的性能,触发器可以用来执行运行前后的处理,安全选项可用来管理数据访问。不同的 DBMS 可能会以不同的形式提供这些特性,更详细的信息请参阅具体的 DBMS 文档。

(完)

comments powered by Disqus