SQL数据操作基础(初级)2

SQL数据操作基础(初级)2,第1张

SQL数据操作基础(初级)2,第2张

使用ISQL执行选择查询

安装SQL Sever时,还会安装一个名为ISQL/W的应用程序。ISQL/w允许您执行交互式SQL查询。在将查询包含到ASP网页之前,用ISQL/w测试它是非常有用的。

注意:

在本书的第一部分,您学习了如何安装和配置Microsoft SQL Sever。如果SQL Sever没有安装或无法运行,请参考第3章“安装和使用SQL Sever”。

在任务的SQL Sever程序组中选择ISQL_w来启动程序。当程序启动时,首先会出现一个对话框,询问服务器信息和登录信息(见图10.1)。在“服务器”框中,输入SQL server的名称。如果服务器在本地计算机上运行,服务器名称就是您的计算机名称。
在登录信息框中,输入登录帐户和密码或选择使用可信连接,然后单击“连接”按钮。
注意:

如果将SQL Sever配置为使用完全安全或混合安全,则可以使用可信连接。如果使用标准安全性,您需要提供用户帐户和
密码。更多信息,请参见第3章。

如果一切正常,单击连接按钮后会出现一个查询窗口,如图10.2所示。(如有异常,请参考第3章)

在执行查询之前,您需要选择数据库。安装SQL Server时,您已经为自己创建了一个数据库。SQL Server还有许多系统数据库,如master、model、msdb和tempdb。

方便的是,SQL Sever附带了一个名为pubs的特殊示例数据库。library pubs包含虚拟出版商的表格。文档中的所有示例程序都是为这个库设计的。本书中的很多例子也使用了这个数据库。

在查询窗口顶部的DB下拉框中选择database pubs,这样您就已经选择了数据库。您的所有查询都将针对该库中的每个表执行。现在可以执行第一个查询了。这真令人兴奋!

您的第一个查询将指向名为autrors的表,该表包含为虚拟出版商工作的所有作者的相关数据。单击查询窗口并输入以下语句:

选择作者的电话,其中au_name="Ringer "

完成后,单击执行查询按钮(一个看起来像VCR播放键的绿色三角形)。点击此按钮后,查询窗口中出现的任何语句都将被执行
行。查询窗口会自动变成结果显示窗口,可以看到查询结果(见图10.3)。

您看到的查询结果可能与图10.3所示的不同。在不同版本的SQL Sever中,库pubs中的数据会有所不同。对于SQL Sever 6.5,
将找到两条记录。结果显示窗口中应显示以下内容:

电话

……………….

801 826_0752

801 826_0752

(受影响的2行)
您执行的SELECT语句从authors表中取出姓名为Ringer的所有作者的电话号码。您可以通过在WHERE子句
中使用特殊的选择条件来限制查询结果。也可以忽略选择条件,从表中取出所有作者的电话号码。为此,请单击“查询”选项卡,返回到“查询”窗口,并键入
以下SELECT语句:

从作者中选择电话

执行该查询后,将取出表authors中的所有电话号码(没有特定的顺序)。如果表authors包含100个电话号码,将取出100条记录
,如果表中有10亿个电话号码,将取出所有这10亿条记录(这可能需要一些时间)。

表authrs的字段包括姓、名、电话号码、地址、城市、州和邮政编码。通过在SELECT语句的第一部分指定它们,您可以
表中的任何字段。您可以在SELECT语句中一次取出多个字段,例如:

SELECT au_fname,au_lname,phone FROM authors

在执行SELECT语句后,将提取这三列的所有值。以下是此查询的结果示例(为节省纸张,只显示部分查询结果
,其余记录用省略号代替):

au_fname au_lname电话

………………………………………………………………………….

约翰逊怀特408 496 7223

马乔里·格林415 986_7020

谢丽尔·卡森415 548_7723

迈克尔·奥利里408 286_2428

(受影响的23行)

在SELECT语句中,您可以根据需要列出任意多个字段。不要忘记用逗号分隔字段名称。您还可以使用星号(*)从表中取出所有字段
。下面是一个使用星号的例子:

从作者中选择*

执行SELECT语句后,将取出表中所有字段的值。您会发现您会在SQL查询中频繁使用星号。

技能:

您可以使用星号来查看表中所有列的名称。为此,您只需在执行SELECT语句后查看查询结果的列标题。

操作多个表

到目前为止,您只尝试了用一个SQL查询从表中提取数据。您还可以使用SELECT语句同时从多个表中提取数据,只需在
SELECT语句的FROM子句中列出要从中提取数据的表的名称:

SELECT au_lname,来自作者的标题,标题

当执行SELECT语句时,数据同时取自表authors和titles。从表authors中取出所有作者的名字,从表titles中取出所有
的标题。在ISQL/w程序中执行这个查询,看看查询结果。你会发现一些奇怪的、意想不到的情况:作者的名字和他们写的书不匹配
,但是所有可能的作者名字和书名的组合都出现了,这可能不是你想看到的。

哪里出了问题?问题是你没有指明两个表之间的关系。您没有告诉SQL如何以任何方式将表与表相关联。由于我们不知道如何
关联这两个表,服务器可以简单地返回从这两个表中获取的记录的所有可能组合。

要从两个表中选择有意义的记录组合,需要通过建立两个表中字段之间的关系来关联这两个表。其中一种方法是创建第三个
表,专门用于描述其他两个表的字段之间的关系。
表authors有一个名为au_id的字段,它包含每个作者的id。titles表有一个名为title_id的字段,它包含每个标题的标题
。如果可以在字段au_id和字段title_id之间建立关系,就可以将这两个表关联起来。pubs数据库中有一个名为titleauthor的
表,用来完成这个任务。表中的每条记录都包括两个字段,用于将表标题与表作者相关联。下面的SELECT语句使用
这三个表来获得正确的结果:

SELECT au_name,来自作者的标题,标题,标题作者

其中authors . au _ id = title author . au _ id

和titles . title _ id = title author . title _ id

当执行这个SELECT语句时,每个作者都将与正确的书名相匹配。Table titleauthor表示表作者和表标题之间的关系,这是通过在两个表中各包含
一个字段来实现的。第三个表的目的是在其他两个表的字段之间建立关系。它本身不包含任何附加数据

注意这个例子中的字段名是怎么写的。为了区分表作者和表标题中的相同字段名au_id,每个字段名都以前缀
和句点为前缀。名为author.au_id的字段属于表authors,名为titleauthor.au_id的字段属于表titleauthor,所以不会混淆

通过使用第三个表,您可以在两个表的字段之间建立各种类型的关系。例如,一个作者可能写了许多不同的书,或者一本书可能由
许多不同的作者写。当两个表的字段之间存在这种“多对多”关系时,您需要使用第三个表来指示这种关系。

但是,在很多情况下,两个表之间的关系并不复杂。例如,您需要指出表标题和表发布者之间的关系。因为一个书名不可能匹配
多家出版社,所以不需要通过第三表来指明两个表之间的关系。要指示表标题和表发布者之间的关系,只需让这两个表
有一个公共字段。在数据库pubs中,表titles和publishers有一个名为pub_id的字段。如果您想获得书名
及其出版商的列表,可以使用下面的语句:

从标题、出版商中选择标题、发布名称

其中titles . pub _ id = publishers . pub _ id

当然,如果一本书是由两家出版社联合出版的,那么你需要第三表来表示这种关系。

通常,当您事先知道两个表的字段之间存在“多对多”关系时,您会使用第三个表来关联这两个表。相反,如果两个表的字段之间只有“一对一”或“一对多”的关系,则可以使用一个公共字段来关联其他表。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » SQL数据操作基础(初级)2

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情