1. SQL试题一 有三个表:作家表(至少三列:主键、姓名、性别)、图书表(至少三列:主键、书名、外键)、畅销书作者(有两列:作家名称、排名、每月统计top10,该表只保存最新的top10作家数据),

SQL试题一

有三个表:作家表(至少三列:主键、姓名、性别)、图书表(至少三列:主键、书名、外键)、畅销书作者(有两列:作家名称、排名、每月统计top10,该表只保存最新的top10作家数据),图书表是作家表的从表,畅销书作者表中的数据是作家表的子集。请提供出建表语句,并编写一个sql:统计top10畅销书的作家总共写过多少本书。 要求:①采用mysql或者orcale的语法。②建表、编写sql时做尽量多的考虑,比如:性能、存储等。

建表

我在写表时没有考虑性能、存储,应为已经大半年没有写过了,学的都忘了,对于畅销表应该使用了SQL编程,或者触发器什么的自动生成数据,这里没有实现。学的都还给老师了。每月统计top10,该表只保存最新的top10作家数据,这里没有使用,都是自己手动添加的数据,介意勿看

CREATE TABLE author(
author_id int PRIMARY key auto_increment,
aname VARCHAR(55) not null,
sex VARCHAR(2)

);
INSERT into author (aname,sex) VALUES ("村上春树","男");
INSERT into author  VALUES (DEFAULT,"谭浩强","男");
INSERT into author  VALUES (DEFAULT,"东野圭吾","男");
INSERT into author  VALUES (DEFAULT,"太宰治","男");

CREATE TABLE book (
bid int PRIMARY key auto_increment,
bname VARCHAR(55) not null,
num int not null,
author_id int ,
FOREIGN key (author_id) REFERENCES AUTHOR(author_id)
);

insert into book VALUES(DEFAULT,"挪威的森林",2,1,"2020-02-05");

insert into book VALUES(DEFAULT,"且听风吟",2,1,"2020-05-23");

insert into book VALUES(DEFAULT,"c语言",2,2,"2020-11-28");
insert into book VALUES(DEFAULT,"c++",2,2,"2020-07-14");

insert into book VALUES(DEFAULT,"嫌疑人X的献身",41,3,"2020-02-15");
insert into book VALUES(DEFAULT,"人间失格",7,4,"2020-02-15");

CREATE TABLE favor(
aname VARCHAR(10) not null,
sort int not null
);

INSERT into favor(aname,sort)VALUES("村上春树",1);
INSERT into favor VALUES("谭浩强",2);

INSERT into favor VALUES("太宰治",3);

在这里插入图片描述

– author 和 book 进行连接,

SELECT * 
FROM author a
JOIN book b
WHERE a.author_id = b.author_id;

  • 结果
  • SELECT c.aname, SUM(c.num) '数量' FROM ( SELECT a.aname , b.bname, b.num, b.time FROM author a JOIN book b WHERE a.author_id = b.author_id ) as c WHERE c.aname in ( SELECT f.aname FROM favor f ) GROUP BY c.aname ;
    在这里插入图片描述
    ------》》》》》详细看知乎
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值