该系列的文章解释了什么是Microsoft? Jet SQL,并说明了它如何在Access 2000的应用程序中使用。本文是基础、中级和高级三篇中的第二篇。这些文章循序渐进的说明了使用Jet SQL的语法和一些方法,并示范了对于Access 2000来说较新的Jet SQL的特征。最后,本文的所有SQL参考都是针对Microsoft Jet 4.0 数据引擎所用的。
中级SQL说明
通过了解中级结构化查询语言的一些概念,用户可以增强控制数据库的结构和对象的能力,并且可以通过许多有趣的和强有力的途径操纵这些机构中包含的数据。结合使用诸如DAO和ADO之类的数据访问方法,中级SQL 可以很大程度的提高用户应用程序的灵活性及其表现。
基础、中级和高级SQL的不同点
在基础、中级和高级SQL之间划分一条明显的界限并不是一件容易的事情,在很多情况下,决定其所属都只是简单的决断。但是对于该系列在Access 2000中使用SQL的文章来说,还考虑了如下的一些方面:
首先一点在于SQL语句本身的复杂级别。在前面的文章中,我们努力使用那些常用的语句,而且是最简单的形式。本文则在前面基础篇的基础上介绍了更复杂的语句。
其次是在Access 2000中已经包含了一些新的SQL语句、子句和关键词。尽管在本文中仍将使用Access上一版本中所包含的SQL语句,但是一定会出现一些在Access中第一次出现的SQL语句,在高级SQL一文中也是如此。
最后,那些关于安全性和多用户解决方案的SQL语句将在高级篇中介绍,因为这些语句常常是用于更复杂的应用程序中的
通过使用中级SQL,用户可以为你的Access应用程序增加更强的灵活性和能力。尽管简单的和直接的SQL语句能够完成很多的事情,但是使用更复杂的语句将扩展在数据库中访问和处理信息的方法范围。使用中级SQL也将使得用户可以更好的控制你的数据库使用和维护工作
增强SQL
在Access 2000中,为了支持Access的新特性,为了和ANSI-92的标准更加一致,并且允许在Access 和 Microsoft? SQL Server?间的更好的兼容性,包含在Microsoft Jet 4.0数据引擎中的SQL作了许多增强。Jet数据引擎现在有两种格式的SQL语法:一种是支持以前使用的SQL语法,另一种是支持新的SQL语法规范。需要格外注意的是,只有在用户使用ActiveX? Data Objects (ADO)和Jet OLE DB provider时新的语法才是可用的,而当前通过Access SQL View接口或者DAO是无法使用新的语法的。本文指出只有通过Jet OLE DB provider 和 ADO才能够使用某个特定的SQL命令。
在Access的上一版本中,数据访问对象(DAO)是主要的数据访问方法。而现在发生了改变,尽管DAO 仍旧被支持,但新的数据访问方法是使用ADO。ADO是微软的通用数据访问战略(Microsoft's Universal Data Access strategy)的一部分,其最基本的假设是无论数据存在那里都是可以访问的,不管是数据库、目录结构还是某重用户自定义的数据库。
在讨论Microsoft Jet SQL 时,ADO是非常重要的,正如在前面提到的,一些新的SQL语句只有在使用ADO 和Jet OLE DB provider时才是可用的。在本文和与本文相配套的示范数据库中,所有的代码都是使用ADO些的。那些没有特意指明为只有通过ADO才可用的SQL语句都可以通过Access SQL View 用户接口或 DAO来执行。详尽的关于ADO的讨论超出了本文的范围,用户可以在下面的网站中找到最近的信息
http://www.microsoft.com/data/ado/.
SQL代码规范
本文使用一致性的SQL代码规范。与所有的代码规范相同,目的是使用易读和易于理解的方式来显示代码。这就要通过空格、换行和大写关键字的结合使用来实现。通常来说,要使用大写字母来打印SQL的关键字,如果SQL语句必须换行,尽量使SQL语句的主要部分一起换行。看过一些例子之后,相信读者会对此有较好的感觉。
不合格式的SQL代码
CREATE TABLE tblCustomers (CustomerID INTEGER NOT NULL, [Last Name] TEXT(50) NOT NULL, [First Name] TEXT(50) NOT NULL, Phone TEXT(10), Email TEXT(50))
良好格式的SQL代码
CREATE TABLE tblCustomers (
...CustomerID INTEGER NOT NULL,
...[Last Name] TEXT(5) NOT NULL,
...[First Name] TEXT(50) NOT NULL,
...Phone TEXT(10),
...Email TEXT(50))