[数据库原理与应用]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 ########## 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本题的主要考点是对MySQL数据库原理应用方面进行探讨和分析。MySQL是一种流行的关系型数据库管理系统,在今天的互联网时代,它被广泛应用于各种企业级应用程序的数据库支持中。在掌握MySQL的基础知识和SQL语言基础的前提下,我们可以更深入地了解MySQL数据库原理和高级应用。 在MySQL数据库原理方面,我们需要深入了解其底层存储引擎的工作原理以及索引的作用。MySQL底层存储引擎包括InnoDB、MyISAM等,它们的性能表现和适用场景有所不同。索引是MySQL数据库管理系统的核心组成部分,它可以提高数据库查询性能和优化查询执行计划。了解并熟练掌握MySQL数据库索引的原理和设计方法,可以使我们更高效地完成复杂查询和数据分析任务。 在MySQL数据库应用方面,我们需要掌握存储过程、触发器和视图等高级数据库特性的使用方法。存储过程是一种预定义的SQL语句集合,可以通过简单的调用执行,减少应用程序开发和维护的工作量。触发器是一组自动执行的SQL语句,可用于满足数据完整性和数据访问控制的需求。视图是一种虚拟的表,可以使得用户在不访问原始数据表的情况下,方便地获取数据。 总之,深入了解MySQL数据库原理应用,可以使我们更轻松地实现数据库的设计、管理和优化,为企业级应用程序的开发和数据库支持提供更加稳定和高效的技术解决方案。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值