[数据库原理与应用]educoder-MySQL 连接查询(一)

目录

第1关:内连接查询1

第2关:内连接查询2

第3关:内连接和聚合函数应用

第4关:内连接和分组查询 

第5关:消除连接结果中重复行

第6关:外连接查询


数据库介绍

图书借阅数据库books中现有3个表,各个表的创建语句如下:

#创建图书表 CREATE TABLE book(

bookno VARCHAR(10) PRIMARY KEY COMMENT '书号',

bookname VARCHAR(30) COMMENT '书名',

author VARCHAR(20) COMMENT '作者',

publisher VARCHAR(10) COMMENT '出版社',

publishyear YEAR COMMENT '出版年',

price DECIMAL(5,1) COMMENT '定价',

state CHAR(2) DEFAULT '可借' COMMENT '状态'
)COMMENT='图书表';

#创建读者表 CREATE TABLE reader(

readerno VARCHAR(10) PRIMARY KEY COMMENT '读者编号',

readertype CHAR(2) NOT NULL COMMENT '读者类型',

readername VARCHAR(15) COMMENT '读者姓名',

readerdept VARCHAR(15) COMMENT '所属学院' )COMMENT='读者表';

#创建借阅表 CREATE TABLE borrow(

readerno VARCHAR(10) NOT NULL COMMENT '读者编号',

bookno VARCHAR(10) PRIMARY KEY COMMENT '书号',

borrowdate DATE COMMENT '借出日期',

returndate DATE COMMENT '应还书日期',

FOREIGN KEY (readerno) REFERENCES reader(readerno), FOREIGN KEY (bookno) REFERENCES book(bookno) )COMMENT='借阅表';

#各表现有数据如下表所示: books:

reader:

borrow:

#说明:books数据库是对实际图书借阅信息的简化和模拟,图书表中假定所有图书都只有一本,书号是指条码号,是图书的唯一标识。借阅表中记录当前借阅情况,一旦归还某图书,将删除其借阅记录。

第1关:内连接查询1

本关任务

查询借出图书(名)“朝花夕拾”的读者的读者编号、姓名、所属学院。

USE books;

#请在以下Begin End之间补充代码
#注意:评测环境下,数据库名、表名、字段名区分大小写
########## Begin ##########
select borrow.readerno ,readername ,readerdept
from reader , book, borrow
where reader.readerno = borrow.readerno and borrow.bookno = book.bookno and book.bookname = '朝花夕拾';






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

 第2关:内连接查询2

本关任务

查询“计算机”学院的同学和老师借出了哪些书,要求查询结果中包括读者编号、姓名、读者类型、书号、书名,并按读者编号升序排序。

USE books;

#请在以下Begin End之间补充代码
#注意:评测环境下,数据库名、表名、字段名区分大小写
########## Begin ##########
select distinct reader.readerno , reader.readername , reader.readertype , borrow.bookno , book.bookname
from book , reader , borrow
where reader.readerdept = '计算机' and reader.readerno = borrow.readerno and borrow.bookno = book.bookno
order by readerno;





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

 第3关:内连接和聚合函数应用

本关任务

查询读者“王小明”共借出了几本书,要求查询结果中的列标题为借书数量。

USE books;

#请在以下Begin End之间补充代码
#注意:评测环境下,数据库名、表名、字段名区分大小写
########## Begin ##########
select count(borrow.readerno) as '借书数量'
from book , borrow , reader
where borrow.bookno = book.bookno and reader.readername = '王小明' and borrow.readerno = reader.readerno ;





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

第4关:内连接和分组查询 

本关任务

查询统计目前在借图书中学生和教师各借书的总数,要求查询结果中的列标题依次为读者类型、借书总数。

USE books;

#请在以下Begin End之间补充代码
#注意:评测环境下,数据库名、表名、字段名区分大小写
########## Begin ##########
select reader.readertype as '读者类型',count(borrow.readerno) as '借书总数' 
from book , reader , borrow
where book.bookno = borrow.bookno and reader.readerno = borrow.readerno
group by reader.readertype;





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

 第5关:消除连接结果中重复行

本关任务

查询目前借有图书(即未还书)的读者的读者编号、姓名、读者类型,所属学院,要求查询结果中读者信息不重复。

USE books;

#请在以下Begin End之间补充代码
#注意:评测环境下,数据库名、表名、字段名区分大小写
########## Begin ##########
select distinct reader.readerno , readertype , readername , readerdept
from book , reader , borrow
where book.state = '借出' and borrow.readerno = reader.readerno and book.bookno = borrow.bookno
order by reader.readerno;





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

第6关:外连接查询

本关任务

查询目前没有借书的读者的读者编号、读者类型、姓名、所属学院。

USE books;

#请在以下Begin End之间补充代码
#注意:评测环境下,数据库名、表名、字段名区分大小写
########## Begin ##########
select reader.readerno , readertype , readername , readerdept
from reader
where not exists(select *
                from borrow
                where borrow.readerno = reader.readerno);






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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值