资源描述:
《select语句高级用法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、SELECT语句高级用法1,使用groupby子句groupby子句将表分为几组,此子句通常与为每个这样的组生产总结值的聚集函数组合。使用不带聚集的groupby子句与在select子句中使用的distinct(或unique)关键字很相似。selectdistinctcustomer_numfromorders;selecctcustomer_numfromordersgroupbycustomer_num;groupby子句将行收集到组中,因此每一组中的每一行具有相同的客户号。在没有选择任何其它列的情况下,结果是唯一的customer_num值的列表。selectord
2、er_num,count(*)number,sum(total_price)pricefromitemsgroupby1orderby3;selecto.order_num,sum(i.total_price)fromordero,itemsiwhereo.order_date>'01/01/98'andocustomer_num=110ando.order_num=i.order_numgroupbyo.order_num;使用having子句要完成groupby子句,使用having子句来在构成组之后将一个或多个限制条件应用于这些组。having子句对组的影响类似于wh
3、ere子句限制个别行的方式,使用having子句的一个优点是可以在搜索条件中包括聚集,而在where子句的搜索条件中却不能包括聚集。每个having条件将组的一列或一个聚集表达式与组的另一个聚集表达式或与常量作比较。可以使用having来对列值或组列表中的聚集值设置条件。下面的语句返回具有两个商品以上的订单上每个商品的平均总价格。having子句在每个构成的测试组,并选择由两行以上构成的那些组。selectorder_num,count(*)number,avg(total_price)averagefromitemsgroupbyorder_numhavingcount(
4、*)>2;如果不带groupby子句使用having子句,则该having条件适应雨满足搜索条件的所有行。换言之,满足搜索条件的所有行构成一个组。selectavg(total_price)averagefromitemshavingcount(*)>2;selecto.order_num,sum(i.total_price)price,paid_date-order_datespanfromorderso,itemsiwhereo.order_date>'01/01/98'ando.customer_num>110ando.order_num=i.order_numgro
5、upby1,3havingcount(*)<5orderby3intotemptemptab1;创建高级连接自连接连接不一定都是涉及两个不同的表。可以将表连接至它本身,缠结自连接。当想要将列中的值与同一列中的其它值进行比较时,将表连接至它自身非常有用。要创建自连接,在from子句中列示表两次,并且每次为它指定不同的别名。与表之间的连接一样,可以在自连接中使用算术表达式。可以测试空值,可以使用orderby子句来以升序或将序对指定列中的值进行排序。selectx.order_num,x.ship_weight,x,ship_date,y.order_num,y.ship_we
6、ight,y.ship_datefromorderx,orderywherex.ship_weight>=5*y.ship_dateandx.ship_dateisnotnullandy.ship_dateisnotnullorderbyx.ship_date;如果想要将自连接的结果存储到临时表中,则将Intotemp子句追加到select语句中,并至少对一组列指定显示标号,以重命名这些列。否则,重复列名将导致错误,并且不会创建临时表。selectx.order_numorders1,x.po_numpurch1,x.ship_dateship1,y.order_numor
7、ders2,y.po_numpurch2,y.ship_dateship2fromorderx,ordersywherex.ship_weight>=5*y.ship_weightandx.ship_dateisnotnullandy.ship_dateisnotnullorderbyorders1,orders2intotempshipping;自连接子句三次selects1.manu_code,s2.manu_code,s3.manu_code,s1.stock_num,s1.descriptonfromsto