SQL基础一考试指南:编写单行或多行子查询(二)

日期: 2008-12-08 作者:John WatsonRoopesh Ramklass翻译:曾少宁 来源:TechTarget中国 英文

  练习 8-4 编写可靠的且用户友好的查询   在本练习中,我们要开发一个多行子查询,它将提示用户输入。我们可以使用SQL*Plus或SQL Developer进行开发。在连接到HR Schema后,所有的查询都必须能成功执行。其中我们假定数据库表中已经有了一些记录集。

  1、以用户HR登录到你的数据库。   2、设计一个查询,提示用户输入部门名称,然后列出该部门的所有员工名: select last_name from employees where department_id = (select department……

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

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

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

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

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

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

  练习 8-4 编写可靠的且用户友好的查询

  在本练习中,我们要开发一个多行子查询,它将提示用户输入。我们可以使用SQL*Plus或SQL Developer进行开发。在连接到HR Schema后,所有的查询都必须能成功执行。其中我们假定数据库表中已经有了一些记录集。

  1、以用户HR登录到你的数据库。

  2、设计一个查询,提示用户输入部门名称,然后列出该部门的所有员工名:


select last_name from employees where department_id =
(select department_id from departments where department_name = '&Department_name');

  3、运行步骤2中的查询3次,在提示符中分别输入下面的值:

  第一次,Executive;
  第二次,executive;
  第三次,Executiv。

  4、从步骤3的运行结果我们可以看到:第一次执行成功,因为我们输入了一个准确匹配的值,但其它的都失败了。下面我们修改一下查询,使它更加用户友好,这样它可以处理大小写或拼写不同的问题:


select last_name from employees where department_id =
(select department_id from departments
where upper(department_name) like upper('%&Department_name%'));

  5、运行步骤4中的查询3次,其中仍然使用步骤3中的相同数值。这次,所有的查询都能成功执行。

  6、再次运行步骤4的查询,但这次输入值“Pu”。这次查询会失败,并返回一个错误“ORA-01427:single-row subquery returns more than one row”,这是因为我们为了用户友好所做的修改会接收用户的随意输入,从而无法保证它是单行子查询。这里的“Pu”就匹配到了两个部门。

  7、我们继续修改该查询,使它能够处理ORA-01427错误,并调整输出结果以使结果更加清晰:


select last_name,department_name from employees join departments
on employees.department_id = departments.department_id
where departments.department_id in
(select department_id from departments
where upper(department_name) like upper('%&Department_name%'));

  8、下面是最后一步执行的结果:最终的查询代码已经很接近既准确又用户友好的理想结果了:

  

INSIDE THE EXAM 考点

使用子查询

子查询有3种形式:单行、多行和关联的。单行子查询的一个特殊形式是标量子查询,它只返回一个值。这是一种单行单字段子查询。第一次的SQL OCP考试只要求标量子查询和单字段多行子查询,关联子查询和多字段子查询在这里不太可能考到,但会测试你对他们的一般理解。

在WHERE子句中使用子查询时,你必须知道紧跟单行子查询和多行子查询的操作符用法。

 

翻译

曾少宁
曾少宁

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

相关推荐