数据库-MySQL之数据库必知必会14-16章

第 14 章 使用子查询

子查询

示例:
在这里插入图片描述
子查询总是从内向外处理。子查询一般与IN操作符结合使用,但也可以用于测试等于(=)、不等于(<>)等

作为计算字段使用子查询

假如需要显示customers表中每个客户的订单总数。订单与相应的客户ID存储在orders表中
1)从customers表中检索客户列表。
2) 对于检索出的每个客户,统计其在orders表中的订单数目
在这里插入图片描述
相关例题:
在这里插入图片描述

select cust_id,(select SUM(item_price*quantity) from OrderItems  
where Orders.order_num=OrderItems.order_num) AS total_ordered
from Orders
ORDER BY total_ordered DESC

第15章 联结表

关系表

各表通过某些常用的值(即关系设计中的关系(relational))互相关联。
外键(foreign key) 外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系
在这里插入图片描述

内部联结

明确的联结语法
在这里插入图片描述
ANSI SQL规范首选INNER JOIN语法。

例题

SQL100 确定最佳顾客的另一种方式(二)
OrderItems表代表订单信息,确定最佳顾客的另一种方式是看他们花了多少钱,OrderItems表有订单号order_num和item_price商品售出价格、quantity商品数量。Orders表含有字段order_num 订单号、cust_id顾客id。顾客表Customers有字段cust_id 客户id、cust_name 客户姓名。
**【问题】**编写 SQL 语句,返回订单总价不小于1000 的客户名称和总额(OrderItems 表中的order_num)。
提示:需要计算总和(item_price 乘以 quantity)。按总额对结果进行排序,请使用INNER JOIN 语法。

select cust_name,sum(quantity*item_price) as total_price
from Customers t inner join Orders t1 on t.cust_id = t1.cust_id
inner join OrderItems  t2 on t1.order_num = t2.order_num
group by cust_name having total_price >=1000
order by cust_name

SQL97 返回顾客名称和相关订单号以及每个订单的总价
Customers 表有字段,顾客名称:cust_name、顾客id:cust_id。Orders订单信息表,含有字段,订单号:order_num、顾客id:cust_id。OrderItems表有字段,商品订单号:order_num、商品数量:quantity、商品价格:item_price。
【问题】
除了返回顾客名称和订单号,返回 Customers 表中的顾客名称(cust_name)和Orders 表中的相关订单号(order_num),添加第三列 OrderTotal,其中包含每个订单的总价,并按顾客名称再按订单号对结果进行升序排序。

select cust_name,Orders.order_num,item_price*quantity AS OrderTotal
from Customers,Orders,OrderItems
where Customers.cust_id=Orders.cust_id 
and Orders.order_num=OrderItems.order_num
order by cust_name,order_num

注:这里order_num需要有表前缀

第16章 创建高级联结

不同类型的联结

自联结

自己和自己联结
示例:
在这里插入图片描述

自然联结

自然联结排除多次出现,使每个列只返回一次。

外部联结

许多联结将一个表中的行与另一个表中的行相关联。但有时候会需要包含没有关联行的那些行。例如,可能需要使用联结来完成以下工作:
1) 对每个客户下了多少订单进行计数,包括那些至今尚未下订单的客户;
2) 列出所有产品以及订购数量,包括没有人订购的产品;
3) 计算平均销售规模,包括那些至今尚未下订单的客户。
在这里插入图片描述
在使用OUTER JOIN语法时,必须使用RIGHT或LEFT关键字。指定包括其所有行的表(RIGHT指出的是OUTER JOIN右边的表,而LEFT指出的是OUTER JOIN左边的表)。

使用带聚集函数的联结

聚集函数可以与联结一起使用。

  • 15
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没脑袋的喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值