数据库实验(六)复杂查询

1、在订单明细表中查询订单金额最高的订单。

命令:

select orderNO,sum(quantity*price) as ordersum

from OrderDetail a group by orderNo

having sum(quantity*price)=

(select max(ordersum) from (select orderNO,sum(quantity*price) as ordersum

from OrderDetail group by orderNo)a)

结果截图:

2、 找出至少被订购3次的商品编号、订单编号、订货数量和订货金额,并按订货数量的降序排序输出。

select orderNo,a.productNo,quantity,quantity*price ordersum

from OrderDetail a,(select productNo from OrderDetail group by productNo having COUNT(*)>=3) b

where a.productNo=b.productNo

order by quantity desc

3、查询订单中所订购的商品数量没有超过10个的客户编号和客户名称。

SELECT a.CustomerNo,CustomerName

FROM Customer a

WHERE a.CustomerNo IN ( SELECT CustomerNo

FROM OrderMaster b,OrderDetail c

WHERE b.orderNo=c.orderNo

GROUP BY CustomerNo

HAVING sum(quantity)<10)

4、查找至少订购了3种商品的客户编号、客户名称、商品编号、商品名称、数量和金额。

SELECT a.CustomerNo,CustomerName,b.ProductNo,

ProductName,quantity,sum(quantity*price)

FROM Customer a,Product b,OrderMaster c,OrderDetail d

WHERE a.CustomerNo=c.CustomerNo and c.orderNo=d.orderNo

and b.ProductNo=d.ProductNo and

EXISTS (

SELECT CustomerNo

FROM OrderMaster e,OrderDetail f

WHERE e.orderNo=f.orderNo and a.customerNo=e.customerNo

GROUP BY CustomerNo

HAVING count(distinct ProductNo)>=3)

GROUP BY a.CustomerNo,CustomerName,b.ProductNo,

ProductName,quantity

5.查询销售金额最高的销售员编号、订单编号、订单日期和订单金额。

SELECT salerNo,b.orderNo,orderDate, orderSum

FROM Employee a,OrderMaster b

WHERE a.employeeNo=b.salerNo

and orderSum =(select max(orderSum)

from OrderMaster)

6、求每位客户订购的每种商品的总数量及平均单价,并按客户号、商品号从小到大排列。

select customerNo,productNo,sum(quantity) sumquantity,sum(price*quantity)/sum(quantity) avgprice

from OrderDetail a,OrderMaster b

where a.orderNo=b.orderNo

group by customerNO,productNo

order by customerNo,productNo 

  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面为你介绍一下SQL数据库实验嵌套查询。 嵌套查询是指在一个查询语句中嵌入另一个查询语句。嵌套查询可以通过子查询来实现,子查询可以嵌套在SELECT、FROM、WHERE等子句中,用于获取需要的数据。 下面是一个简单的示例: 假设我们有两张表:学生表(student)和成绩表(score),它们的结构如下: 学生表(student): | id | name | age | gender | |----|--------|-----|--------| | 1 | 张三 | 18 | 男 | | 2 | 李四 | 19 | 女 | | 3 | 王五 | 20 | 男 | | 4 | 赵 | 21 | 女 | 成绩表(score): | id | student_id | course | score | |----|------------|--------|-------| | 1 | 1 | 语文 | 80 | | 2 | 1 | 数学 | 90 | | 3 | 2 | 语文 | 85 | | 4 | 2 | 数学 | 95 | | 5 | 3 | 语文 | 70 | | 6 | 3 | 数学 | 80 | 现在,我们要查询出每个学生的成绩和平均成绩,可以使用嵌套查询来实现: ``` SELECT s.id, s.name, (SELECT SUM(score) FROM score WHERE student_id = s.id) AS total_score, (SELECT AVG(score) FROM score WHERE student_id = s.id) AS avg_score FROM student s; ``` 上述SQL语句中,首先查询学生表(student),然后通过嵌套查询获取每个学生的成绩和平均成绩。在子查询中,WHERE子句指定了查询条件,即只查询与当前学生相关的成绩信息。 嵌套查询可以实现非常复杂查询,但也可能导致查询效率低下。因此,在使用嵌套查询时,需要根据实际情况合理设计查询语句。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值