如何将信息请求翻译为SQL SELECT语句(二)

日期: 2009-04-26 作者:John L. Viescas and Michael J. Hernandez翻译:曾少宁 来源:TechTarget中国 英文

记住,当开始学习如何使用SQL时,我们大多数情况下都是与字段和表打交道。图4-4的语法图在SELECT子句中使用column_name和在FROM子句中使用table_name来反映这个情况。在下一章中,我们将学习如何在这些子句中使用其它项来创建更复杂的SELECT语句。   可能你已经注意到了,我们在上面的例子中所使用的要求是相对简单的。

重新定义它作为翻译语句并同时确定出在语句中显示的字段名称是很容易的。但是,如果请求并不是这样简单且容易翻译的话,同时确定出SELECT子句所需要的字段又很困难时,该怎么处理?最简单的做法就是重新定义请求并让它更具体些。比如,我们可以将这样一个请求:“Show……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

记住,当开始学习如何使用SQL时,我们大多数情况下都是与字段和表打交道。图4-4的语法图在SELECT子句中使用column_name和在FROM子句中使用table_name来反映这个情况。在下一章中,我们将学习如何在这些子句中使用其它项来创建更复杂的SELECT语句。

  可能你已经注意到了,我们在上面的例子中所使用的要求是相对简单的。重新定义它作为翻译语句并同时确定出在语句中显示的字段名称是很容易的。但是,如果请求并不是这样简单且容易翻译的话,同时确定出SELECT子句所需要的字段又很困难时,该怎么处理?最简单的做法就是重新定义请求并让它更具体些。比如,我们可以将这样一个请求:“Show me the information on our clients”重新改为更清楚的“List the name, city, and phone number for each of our clients”。如果重新定义要求不能解决问题,那么我们仍然有两个选择。第一,我们可以先确定在SELECT语句的FROM子句中指定的表是否包含任何有助于使请求更清晰的字段名称,这样我们就可以用它来更容易地定义翻译语句。第二,我们可以更仔细地检查请求并确定一个词或者短语是否包含任何字段名称的暗示(implies )。我们是否可以使用一种或者两种选择是取决于请求本身。只要记住,当感到定义一个翻译语句很困难时,一定要还有着其它行之有效的技巧可利用。让我们来看看各个技巧的例子以及如何在一些典型的场景中应用它。

  关于第一个技巧,让我们来尝试翻译下面这个请求。

  "I need the names and addresses of all our employees."

  表面上看来这是一个直接的请求。但是,如果再次看一下这个请求,我们会发现一个小的问题:虽然我们可以确定翻译语句所需要的表(Employees),但是在请求中没有任何有助于我们为SELECT子句定义所需要的特定字段。虽然词"names" 和"addresses"在要求中出现了,但是它们是通用的语汇。我们可以通过检查请求中所对应的表并确认它是否包含任何可以替代这些项的字段来解决这个问题。如果有,那么就可以在翻译语句中使用该字段名称。(为了有助于我们更清楚地看到语句,我们可以选择在翻译语句中使用一般形式的字段名称。然而,我们将需要使用SQL句法中的实际字段名称。)在这种情况下,在图4-5中查找Employees表的可以用来代替词“names”和“addresses”的字段名称。

  

Employees

EmployeeID         PK
EmpFirstName
EmpLastName
EmpStreetAddress
EmpCity
EmpState
EmpZipCode
EmpPhoneNumber
EmpAreaCode

  图4-5 Employees表的结构

  为了充分满足“names”和“addresses”的查询需要,我们将实际需要使用这个表中的6个字段。EmpFirstName和EmpLastName将同时替代请求中的“names”,而EmpStreetAddress、EmpCity、 EmpState和 EmpZipCode将替代“addresses”。现在,对请求应用整个翻译过程,也就是重复之前的步骤。(我们将在翻译语句使用通用形式的字段名称,而在SQL语句中使用实际字段名称。)

  "I need the names and addresses of all our employees."

  

Translation

Select first name, last name, street address, city, state, and ZIP
Code from the employees table

Clean Up

Select first name, last name, street address, city, state,  ZIP Code from  employees 

SQL

SELECT EmpFirstName, EmpLastName, EmpStreetAddress,
EmpCity, EmpState, EmpZipCode 
FROM Employees

  注意:这个例子也清楚地演示了如何在SELECT子句中使用多个字段。我们将在后面详细讨论这个技术。

  下一个例子阐述的是第二个技巧,它涉及到查找请求中暗含的字段。假设我们正在尝试完成下面这个请求的翻译。

  "What kind of classes do we currently offer?"

翻译

曾少宁
曾少宁

TechTarget中国特约技术编辑,某高校计算机科学专业教师和网络实验室负责人,曾任职某网络国际厂商,关注数据中心、开发运维、数据库及软件开发技术。有多本关于思科数据中心和虚拟化技术的译著,如《思科绿色数据中心建设与管理》和《基于IP的能源管理》等。

相关推荐