首页 > 开发 > 综合 > 正文

SQL循序渐进(20)Aliases 、In以及子查询

2024-07-21 02:12:39
字体:
来源:转载
供稿:网友

aliases 、in以及子查询

在本节教程中,我们将要介绍aliases、 in以及子查询的用法。首先我们看一下一个查询语句,它搜索所有已经定货的顾客的lastname以及他们定什么货,语句如下:

select own.ownerlastname last name, ord.itemdesired item ordered

from orders ord, antiqueowners own

where ord.ownerid = own.ownerid

and ord.itemdesired in

(select item

from antiques);

这条查询语句的结果为:

last name item ordered

--------- ------------

smith table

smith desk

akins chair

lawson mirror

下面好好解释一下上面的这条语句:

"last name" 和"item ordered"给出了报告的数据头。

own & ord是aliases(别名),它们使用在from子句中,可在它们的后面加一个点号再加列名就可以进行查询了。这样做就避免了模棱两可的情况,特别是在equijoin where子句中当两个列都名为owenerid的时候,而点号就通知sql我们使用是两个不同表的不同ownerid。

这里要注意,在from子句中orders表被首先列出,并且确保antiqueowners表只用于详细的信息(last name)。更为重要的,在where子句中的and强迫in子查询被调用("= any" or "= some" 都等价于使用in)。但这到底做了些什么呢?当这个子查询完成了,它就返回antiques表的所有items因为这里没有where子句。然后,对于从orders表列出的行,itemdesired必须在从antiques表中返回的items列表中,然后在定货可以有另外的拥有者填写的情况下列出一个item。你可以想想这个方法:子查询从orders 表中的每一个itemdesired被比较中返回一系列的items;如果itemdesired是在从antiques表中返回的,那么条件才为真。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表