SELECT语句高级用法

发布 2021-05-16 20:55:28 阅读 7566

使用group by 子句。

group by 子句将表分为几组,此子句通常与为每个这样的组生产总结值的聚集函数组合。

使用不带聚集的group by 子句与在select 子句中使用的distinct(或unique)关键字很相似。

select distinct customer_num from orders;

selecct customer_num from orders group by customer_num;

group by 子句将行收集到组中,因此每一组中的每一行具有相同的客户号。在没有选择任何其它列的情况下,结果是唯一的customer_num值的列表。

select order_num,count(*)number,sum(total_price) price from items group by 1 order by 3;

select from order o,items i where > 01/01/98'

and ocustomer_num = 110 and = group by

使用h**ing子句。

要完成group by 子句,使用h**ing 子句来在构成组之后将一个或多个限制条件应用于这些组。h**ing子句对组的影响类似于。

where 子句限制个别行的方式,使用h**ing子句的一个优点是可以在搜索条件中包括聚集,而在where子句的搜索条件中却不能包括聚集。

每个h**ing条件将组的一列或一个聚集表达式与组的另一个聚集表达式或与常量作比较。可以使用h**ing来对列值或组列表中的聚集值设置条件。

下面的语句返回具有两个商品以上的订单上每个商品的平均总**。h**ing子句在每个构成的测试组,并选择由两行以上构成的那些组。

select order_num,count(*)number,**g(total_price) **erage from items group by order_num h**ing count(*)2;

如果不带group by 子句使用h**ing子句,则该h**ing条件适应雨满足搜索条件的所有行。换言之,满足搜索条件的所有行构成一个组。

select **g(total_price) **erage from items h**ing count(*)2;

select price, paid_date - order_date span from orders o,items i

where > 01/01/98'

and > 110

and =

group by 1,3

h**ing count(*)5

order by 3

into temp temptab1;

创建高级连接。

自连接。连接不一定都是涉及两个不同的表。可以将表连接至它本身,缠结自连接。当想要将列中的值与同一列中的其它值进行比较时,将表连接。

至它自身非常有用。

要创建自连接,在from 子句中列示表两次,并且每次为它指定不同的别名。与表之间的连接一样,可以在自连接中使用算术表达式。

可以测试空值,可以使用order by 子句来以升序或将序对指定列中的值进行排序。

select from order x,order y

where >=5*

and is not null

and is not null

order by

如果想要将自连接的结果存储到临时表中,则将into temp子句追加到select语句中,并至少对一组列指定显示标号,以重命名这些列。否则,重复列名将导致错误,并且不会创建临时表。

select orders1, purch1,ship1, orders2,purch2, ship2

from order x,orders y

where >=5*

and is not null

and is not null

order by orders1,orders2

into temp shipping;

自连接子句三次。

select

from stock s1,stock s2,stock s3

where =

and =

and <

and <

order by stock_num;

如果想要从payroll表选择行来确定那些职员的薪水高于他们的经理,按照下面select 语句所示来构造自连接:

select

from payroll emp,payroll mgr

where >

and <

and =

order by 4;

使用相关子查询来检索并列示预定的10种**最高的商品。

select order_num,total_price

from items a

where 10 >

select count(*)

from items b

where <

order by total_price;

外连接。外连接使其中一个表成为控制表(也成为外部表),控制其它从属表(也成为内部表)。

在内连接或简单连接中,结果只保护满足连接条件的行组合,废弃部满足连接条件的行。

在外连接中,结果包含满足连接条件的行与控制表中的行(如果在从属表中找不到匹配的行将废弃这些行)的组合。

在从属表中没有相匹配的行的控制表在从属表选择的列中包含null值。

外连接允许在应用连接条件之前将连接过虑器应用于内部表。

ansi外连接语法用left join,left outer join,right join和right outer join关键字开始外连接。outer关键字是可选的。

查询可在on子句中指定连接条件和可选连接过虑器。where 子句指定后连接过虑器。

左外连接。在左外连接的语法中,外连接的控制表显示在开始外连接的关键字的左边。左外连接返回连接条件为true的所有行,除此之外,还返回控制表中的所有其它行并将从属表中的相应值显示为null。

select

from customer c left outer join cust_calls u on =

select

from customer c left outer join cust_calls u

on = where is null;

右外连接。在右外连接的语法中,外连接的控制表显示在开始外连接的关键字右边,右外连接返回连接条件为true的所有行,除此之外,还返回控制表中的所有其它行并将从属表中的相应值显示为null

select

from customer c right outer join orders o on (

简单连接。select from customer c,cust_calls u

where =

对两个表的简单外连接。

select

from customer c,outer cust_calls u where =

select语句练习 作业答案

学生关系s sno,sname,age,sex,sdept sdept 所在系。学习关系sc sno,cno,grade 课程关系c cno,cname,cdept,tname cdept 课程部门,tname 老师名。查询问题 1 检索计算机系的全体学生的学号,姓名和性别 2 检索学习课程号为00...

Ping高级用法

ping命令结合dos批处理能做很多事,对我等懒惰的系统管理员们尤其有用。一。基础级 局域网ping命令用法。1.改变ping的基本设置。ping命令缺省要重复4次,等待时间也比较长,这用于广域网比较合适,在局域网判断一个ip是否存在,一般只要ping 1次足够,而且timeout时间完全可以在10...

Ping高级用法

ping命令结合dos批处理能做很多事,对我等懒惰的系统管理员们尤其有用。一。基础级 局域网ping命令用法。1.改变ping的基本设置。ping命令缺省要重复4次,等待时间也比较长,这用于广域网比较合适,在局域网判断一个ip是否存在,一般只要ping 1次足够,而且timeout时间。完全可以在1...