实验05 连接查询

实验目的

要求学生掌握在数据库中通过DMSQL语句通过连接查询语句查询出相关数据的方法。

实验要求

(1) 笛卡儿积的查询。
(2) 等值(自然)连接的查询。
(3) 左(右)外连接的查询。
(4) 自连接的查询。

实验内容

查询有“计算机”的店名,负责人,客服电话。

select 店名,负责人,客服电话
from 销售管理.卖家表,销售管理.商品表
where 销售管理.商品表.名称='计算机' 
 and 销售管理.卖家表.卖家编号=销售管理.商品表.卖家编号

查询购买了“无盘工作站”的客户姓名、年龄、电话、地址。

select 姓名,年龄,电话,地址
from 销售管理.客户表,销售管理.商品表,销售管理.购买记录表
where 销售管理.商品表.名称='无盘工作站' 
 and 销售管理.购买记录表.商品编号=销售管理.商品表.商品编号
 and 销售管理.购买记录表.客户编号=销售管理.客户表.客户编号

查询商品表中商品种类大于三种的卖家店名、负责人、商品数量。

select 店名,负责人,count(distinct 销售管理.商品表.商品编号) 商品数量
from 销售管理.卖家表,销售管理.商品表
where 销售管理.卖家表.卖家编号=销售管理.商品表.卖家编号
group by 销售管理.商品表.卖家编号,店名,负责人
having count(distinct 销售管理.商品表.商品编号)>3

在这里插入图片描述

查询购买了五种以上商品的客户姓名、电话、商品名称、数量、地址。

select 姓名,电话,名称,数量,地址
from 销售管理.客户表,销售管理.购买记录表,销售管理.商品表
where 销售管理.客户表.客户编号=销售管理.购买记录表.客户编号
 and 销售管理.购买记录表.商品编号=销售管理.商品表.商品编号
 and 销售管理.购买记录表.客户编号 in
 (select 客户编号
 from 销售管理.购买记录表
group by 客户编号
having count(distinct 商品编号)>=5

查询所有店铺的店名、负责人、客服电话及其商品名称,单价。(不论该店铺是否有商品,均需要列出店铺信息)

select 店名,负责人,客服电话,名称,单价
from 销售管理.卖家表 left join 销售管理.商品表
on 销售管理.卖家表.卖家编号=销售管理.商品表.卖家编号

查询营业额超过50000元的卖家店名、负责人。

select 店名,负责人
from 销售管理.卖家表,销售管理.购买记录表,销售管理.商品表 
where 销售管理.卖家表.卖家编号=销售管理.商品表.卖家编号
 and 销售管理.购买记录表.商品编号=销售管理.商品表.商品编号
group by 销售管理.商品表.卖家编号,店名,负责人
having sum(单价*数量*折扣率/100)>50000

统计每种商品的销售数量,显示为商品名称、销量,并按销量降序排列。

select 名称,sum(数量) 销量
from 销售管理.购买记录表,销售管理.商品表
where 销售管理.购买记录表.商品编号=销售管理.商品表.商品编号
group by 销售管理.购买记录表.商品编号,名称
order by sum(数量) desc

查询没有购买商品的客户姓名、电话、地址。

select 姓名,电话,地址
from 销售管理.客户表
where 客户编号 not in
(select 客户编号
from 销售管理.购买记录表)

查询同时购买了“计算机”和“打印机”的客户姓名、电话、商品名称、数量、地址。

select姓名
from客户表
where客户编号in (select 客户编号
				from购买记录表
				where商品编号in (select 商品编号
								from商品表
								where名称='计算机'))
and 客户编号in (select客户编号
				from购买记录表
				where商品编号in (select 商品编号
								from商品表
								where名称='打印机'))

总结与思考

关系代数中的笛卡尔积、等值(不等值)连接的意义?

1. 笛卡尔积
对两个关系R和S进行操作,产生的关系中元组个数为两个关系中元组个数之积。
2. 等值联接
在笛卡尔积的结果上再进行选择操作,挑选关系第i个分量与第(r+j)个分量值相等的元组

连接查询中SQL语句的执行顺序是什么?如何优化?

1 from>on>join>where>group by>having>select>distinct>order by>limit
2 优化:最大化利用索引,尽可能避免全表扫描,减少无效数据的查询;
3 避免出现select *,取出全部列
4 多表关联查询时,小表在前,大表在后, 执行 from 后的表关联查询是从左往右执行的,第一张表会涉及到全表扫描,所以将小表放在前面,先扫小表,扫描快效率较高
5 调整Where字句中的连接顺序.SQL采用从左往右,自上而下的顺序解析where子句。根据这个原理,应将过滤数据多的条件往前放,最快速度缩小结果集。
  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL是一个常用的关系型数据库管理系统,可以通过连接查询来实现多个数据表之间的关联查询连接查询是指通过连接两个或多个数据表,根据表之间的关联条件来获取相关数据的查询操作。MySQL支持两种连接查询方式,分别是内连接和外连接。 内连接(Inner Join)是连接两个数据表中的匹配数据,只返回满足连接条件的数据行。可以通过使用关键字"JOIN"或者"INNER JOIN"来实现内连接查询,例如: SELECT * FROM 表1 INNER JOIN 表2 ON 表1.字段 = 表2.字段; 外连接(外连接)则是连接两个数据表中的匹配数据以及未匹配的数据。MySQL支持左外连接(Left Join)、右外连接(Right Join)和全外连接(Full Join)这三种外连接方式。左外连接(Left Join)是指返回左表中所有行以及能够和右表连接的匹配行,右外连接(Right Join)则返回右表中所有行以及能够和左表连接的匹配行,而全外连接(Full Join)则是返回左表和右表中的所有行。可以通过使用关键字"LEFT JOIN"、"RIGHT JOIN"或者"FULL JOIN"来实现外连接查询,例如: SELECT * FROM 表1 LEFT JOIN 表2 ON 表1.字段 = 表2.字段; 除了使用连接查询来获取相关数据,我们还可以通过使用连接查询来进行数据的添加、更新和删除操作。例如,可以根据连接查询的结果来更新表中的某些数据,或者根据连接查询的结果来删除某些数据。 总之,通过连接查询,我们可以快速、灵活地获取多个数据表之间的相关数据,并进行相应的数据操作。在实际应用中,需要根据具体的业务需求和数据表的关系来选择合适的连接查询方式,从而实现所需的数据查询和操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值