【头歌系统数据库实验】实验10 SQL互联网业务查询-1

目录

第1关:查找购买个数超过20,重量小于50的商品,按照商品id升序排序

第2关:查询向follow表中user_id = 1 的用户,推荐其关注的人喜欢的音乐

第3关:查询向follow表中user_id用户,推荐其关注的人喜欢的音乐

第4关:查询用户日活数及支付金额

第5关:查询各工程号最大的按零件号合计供应量以及该零件号,并先按工程号升序,再按零件号升序排序。


如果对你有帮助的话,不妨点赞收藏评论一下吧,爱你么么哒😘❤️❤️❤️

第1关:查找购买个数超过20,重量小于50的商品,按照商品id升序排序

描述 如下有一张商品表(goods),字段依次为:商品id、商品名、商品质量

还有一张交易表(trans),字段依次为:交易id、商品id、这个商品购买个数

查找购买个数超过20,重量小于50的商品,按照商品id升序排序,如:

USE mygoods;
########## Begin ##########
select goods.id,sum(count) as total
from goods,trans
where goods.weight<50 and goods.id=trans.id
group by goods.id
having total>20
order by goods.id;
########## End ##########

第2关:查询向follow表中user_id = 1 的用户,推荐其关注的人喜欢的音乐

任务描述

假设音乐数据库里面现在有几张如下简化的数据表: 关注follow表,第一列是关注人的id,第二列是被关注人的id,这2列的id组成主键

这张表的第一行代表着用户id为1的关注着id为2的用户

这张表的第二行代表着用户id为1的关注着id为4的用户

这张表的第三行代表着用户id为2的关注着id为3的用户

个人的喜欢的音乐music_likes表,第一列是用户id,第二列是喜欢的音乐id,这2列的id组成主键

这张表的第一行代表着用户id为1的喜欢music_id为17的音乐 ....

这张表的第五行代表着用户id为4的喜欢music_id为17的音乐

音乐music表,第一列是音乐id,第二列是音乐name,id是主键

请你编写一个MYSQL,查询向user_id = 1 的用户,推荐其关注的人喜欢的音乐。不要推荐该用户已经喜欢的音乐,并且按music的music_name升序排列。你返回的结果中不应当包含重复项 上面的查询结果如下:

USE mymusic;
########## Begin ##########
select distinct m1.music_name
from follow f1 
right join music_likes ml1 on f1.follower_id=ml1.user_id
right join music m1 on m1.id=ml1.music_id
where f1.user_id=1 and music_name not in (
    select m2.music_name
    from music_likes ml2
    right join music m2 on ml2.music_id=m2.id
    where ml2.user_id=1
)
order by m1.music_name;

########## End ##########

第3关:查询向follow表中user_id用户,推荐其关注的人喜欢的音乐

任务描述

假设音乐数据库里面现在有几张如下简化的数据表: 关注follow表,第一列是关注人的id,第二列是被关注人的id,这2列的id组成主键

这张表的第一行代表着用户id为1的关注着id为2的用户

这张表的第二行代表着用户id为1的关注着id为4的用户

这张表的第三行代表着用户id为2的关注着id为3的用户

个人的喜欢的音乐music_likes表,第一列是用户id,第二列是喜欢的音乐id,这2列的id组成主键

这张表的第一行代表着用户id为1的喜欢music_id为17的音乐 ....

这张表的第五行代表着用户id为4的喜欢music_id为17的音乐

音乐music表,第一列是音乐id,第二列是音乐name,id是主键

请你编写一个MYSQL,查询向follow表中user_id用户,推荐其关注的人喜欢的音乐。不要推荐该用户已经喜欢的音乐,并且先按follow的user_id升序排列,再按music的music_name升序排列。你返回的结果中不应当包含重复项

上面的查询结果如下:

user_id music_name

1 kong

1 MOM

2 Sold Out

USE mymusic;
########## Begin ##########
SELECT DISTINCT follow.user_id,music_name
FROM follow ,music_likes,music  
WHERE follow.follower_id=music_likes.user_id 
AND music.id=music_likes.music_id and follow.user_id
AND music_id NOT IN(
    SELECT music_id
    FROM music_likes m
    WHERE m.user_id=follow.user_id
)
ORDER BY user_id,music_name;

########## End ##########

第4关:查询用户日活数及支付金额

现有3张业务表,详见如下:

,

需要输出结果如下,没有支付的日期不需要显示,请写出对应的MYSQL

,

USE myusers;
########## Begin ##########
SELECT A.dt,
    COUNT(DISTINCT A.user_id) AS dau,
    SUM(B.is_new) AS dau_new,
    SUM(C.pay_money) AS total_pay,
    SUM(IF(B.is_new=1,C.pay_money,NULL)) AS total_pay_new
FROM(
    SELECT DISTINCT user_id,dt
    FROM login_record)A
LEFT JOIN new_user AS B ON A.user_id=B.user_id
LEFT JOIN user_pay AS C ON C.user_id=A.user_id AND C.dt=A.dt

GROUP BY A.dt
HAVING SUM(C.pay_money) IS NOT NULL
 
########## End ##########

第5关:查询各工程号最大的按零件号合计供应量以及该零件号,并先按工程号升序,再按零件号升序排序。

任务描述

查询各工程号最大的按零件号合计供应量以及该零件号,并先按工程号升序,再按零件号升序排序。

相关知识

供应情况表SPJ由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应数量(QTY)组成,标识某供应商 供应某种零件 给某工程项目的数量为QTY。 SPJ表如下图:

,

现已构建SPJ表,结构信息如下:

,


开始你的任务吧,祝你成功!

USE mydata;
#请在此处添加实现代码
########## Begin ##########
create view calculate(JNO,PNO,maxsum) as 
select JNO,PNO,sum(QTY)
from SPJ
group by JNO,PNO
order by JNO,PNO;
select JNO,PNO,maxsum
from calculate as x
where x.maxsum>=all(
    select maxsum 
    from calculate as y
    where x.JNO=y.JNO
);
########## End ##########

  • 23
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个数据库系统 SQL Server 实验中单查询实验结果分析。 单查询实验通常旨在通过 SQL 语句查询单个格中的数据,并对查询结果进行分析和解释。在 SQL Server 中,可以使用 SELECT 语句来进行单查询,例如: ``` SELECT * FROM tableName; ``` 这个语句将检索格中的所有数据,并将其返回到查询结果中。 在单查询实验中,你可以执行多种类型的查询,例如: 1. 简单查询:使用基本的 SELECT 语句查询格中的数据。例如: ``` SELECT firstName, lastName FROM employees; ``` 这个查询将返回格中所有员工的名字和姓氏。 2. 条件查询:使用 WHERE 子句过滤格中的数据。例如: ``` SELECT * FROM employees WHERE department = 'Sales'; ``` 这个查询将返回所有在销售部门工作的员工的信息。 3. 聚合查询:使用聚合函数(如 COUNT、AVG、MAX、MIN 和 SUM)对格中的数据进行计算。例如: ``` SELECT COUNT(*) FROM employees; ``` 这个查询将返回格中员工的总数。 4. 排序查询:使用 ORDER BY 子句对查询结果进行排序。例如: ``` SELECT * FROM employees ORDER BY hireDate DESC; ``` 这个查询将返回按照入职日期降序排列的所有员工信息。 在分析单查询实验结果时,你需要考虑以下因素: 1. 查询语句的正确性:确保查询语句正确无误,并且可以返回你所期望的结果。 2. 查询结果的准确性:分析查询结果,确保其包含完整、准确的数据。 3. 查询效率:评估查询语句的执行效率,尤其是对大型数据集进行查询时。 4. 数据库性能:分析查询数据库性能的影响,例如查询语句是否会锁定格或影响其他查询的执行。 通过对这些因素进行分析,你可以更好地理解单查询实验的结果,并对数据库系统的性能和优化提出建议。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值