background image

下载

14

章 深入了解

SQL

本章讲述如何把数据库表相互关联起来实现复杂查询。
虽然很想把这一章称为“高级 S Q L”,但事实是,几乎没有人(包括我自己)能完全掌握

真正的高级 S Q L,要想做到这一点,需要对集合和统计学理论具有全面深入的掌握。幸运的
是,编写 I n t e r n e t应用程序并不需要使用高级 S Q L语句,只需要知道如何把多个数据库表关联
起来,并能够同时从多个表中查找信息就可以了。

在第7章“数据库和 S Q L语句”中,我们介绍了字段、记录和表的概念,还讨论了七个基

本S Q L语句(i n s e r t、u p d a t e、s e l e c t、d e l e t e、c r e a t e、a l t e r和d r o p)。但是,它只涉及了同时对
一个表进行处理的 S Q L语句。如果仔细考虑一下,把 S Q L语句限制在一个表中是不现实的,
例如,在实际中,可能需要用一个表存储客户名,用另一个表存储客户购买的东西。

14.1   

表关联

在学习S Q L如何从多个表中查找信息之前,我们需要首先了解数据库表关联的不同方法。

让我们来看一个实际的例子:书是我最感兴趣的东西,所以我们用书做例子。有哪些信息是
属于书呢:

• 

书名(Ti t l e)

• 

作者(A u t h o r)

• 

页数(Number of Pages)

• 

出版商(P u b l i s h e r)

• 

国际标准书号(I S B N)

其中的一些,比如页数,只属于这本书本身,但另外一些,比如作者、出版商可能被多

本书共享。

考虑一下书的使用,给它们分类的方法就很清楚了。在图书馆中,作者姓名对排序和分

组是很重要的;对图书代理商来说,作者姓名还要包括更多的信息,比如作者住址和联系电
话等。

能看出关于一本书的信息是如何被分开存储到下列三个数据库表中的吗?
• b o o k s

这个表中的每一个记录包括每本书的书名、页数、国际标准书号、作者和出

版商。

• authors

每个记录保存作者的姓名、地址和联系电话。

• p u b l i s h e r s

每个记录保存出版商的姓名、地址和联系电话。另外,如果需要保存编辑

或其他已知的固定信息的话,也可以保存在这个表中。

那么,这些表如何相互关联呢?
• 

一对一

所有的书只有一个出版商。

• 

一对多

这些书有多个作者。

• 

多对多

出版商可以与多个作者联系,一个作者也可以和多个出版商联系。