Mysql语句——图书馆查询练习(部分)
表的属性
以下是创建表的具体源码
create table TBL_BorrowInfo(
BorrowInfoID int primary key not null comment '借阅记录编号',
BookID char(10) not null comment '图书编号',
BorrowDate datetime not null default current_timestamp comment '借阅时间',
ReturnDate datetime default null comment '归还日期',
UserID char(10) not null comment '借阅者ID',
IsReturned bit comment '是否归还'
) engine=innodb default charset=utf8;
create table TBL_BookInfo(
BookID char(10) primary key not null comment '图书编号',
ISBN char(20) not null comment '图书ISBN号',
Bookname nvarchar(50) not null comment '书名',
Author nvarchar(20) not null comment '作者',
PublishDate datetime default null comment '出版日期',
BookVersion nvarchar(40) not null comment '图书版本',
WordCount int not null comment '字数',
PageCount smallint not null comment '页数',
Publisher nvarchar(40) not null default '' comment '出版社',
ClassID char(10) not null comment '图书分类编号'
) engine=innodb default charset=utf8;
create table TBL_User(
UserID char(10) primary key not null comment '用户ID',
UserName nvarchar(20) not null unique default '' comment '用户名',
Sex tinyint unsigned not null default 0 comment '性别',
Password binary(20) not null default '' comment '密码',
Email varchar(50) default '' comment '邮箱',
Class nvarchar(40) not null default '' comment '所在班级',
Photo mediumblob comment '照片'
) engine=innodb default charset=utf8;
create table TBL_BookClass(
ClassID char(10) primary key not null comment '图书分类编号',
ClassName nvarchar(50) comment '分类名'
) engine=innodb default charset=utf8;
create table TBL_AdminInfo(
AdminID char(10) not null primary key comment '管理员ID',
AdminName nvarchar(30) not null default '' comment '管理员姓名',
Password binary(20) not null default '' comment '管理员密码',
Email varchar(40) not null default '' comment '管理员电子邮箱'
) engine=innodb default charset=utf8;
#外键约束
ALTER TABLE TBL_BorrowInfo ADD CONSTRAINT FK_UserID FOREIGN KEY(UserID) REFERENCES TBL_User(UserID);
ALTER TABLE TBL_BorrowInfo ADD CONSTRAINT FK_ID FOREIGN KEY(BookID) REFERENCES TBL_BookInfo(BookID);
ALTER TABLE TBL_BookInfo ADD CONSTRAINT FK_ClassID FOREIGN KEY(ClassID) REFERENCES TBL_BookClass(ClassID);
找一些个人认为比较有难度或者有意思题目来记录一下,以防再次掉坑。
-
从TBL_ User 表中检索出最前面的3个姓‘李’的用户记录的借书证号,姓名,性别并将保存到一个新表中。
分析:最前面的3个姓‘李’(UserName asc limit 3)、并将保存到新表(create table abc select…)
create table 新表 select UserID,UserName,Sex+0 from tbl_user where UserName like '李%' order by UserName asc limit 3;
输入数据测试
结果
-
查询各出版社最薄的图书并将结果保存到一个新表中。
分析:最薄的图书(min(pagecount))
create table abc select publisher,min(pagecount) from tbl_bookinfo group by publisher;
输入数据测试
结果
-
从TBL_Bookinfo 表查询出各出版社的图书总数在2册以上的图书总数并将结果保存到一个新表中。
分析:要注意清空重复值、2册以上的图书总数
create table abc select publisher,group_concat(bookname) from tbl_bookinfo group by publisher having count(*)>=2;
输入数据测试
结果
-
查询出所有借过书的女生的信息。
分析:用 join on 再加上无限的 and 。 IsReturned =1表示已归还(归还过) sex=1 表示女生
select username,sex,password,email,class,photo from TBL_BorrowInfo join TBL_User on TBL_BorrowInfo.userid=TBL_User.userid and TBL_BorrowInfo.IsReturned=1 and sex=1;
输入数据测试
结果