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表中返回的,那么条件才为真。
新闻热点
疑难解答