mysql实验三:图书管理系统之多表查询实践

声明:本博文如存在问题,欢迎各位dalao指正!!!

目的与任务:

要求熟练掌握SQL查询语言的联接查询、嵌套子查询、相关子查询及数据更新命令。

联接查询:内连接、左连接、右连接、全连接。

嵌套子查询:一个查询语句的结果作为另外一个查询语句的表或者条件。

相关子查询:相关子查询的执行依赖于外部查询。多数情况下是子查询的WHERE子句中引用了外部查询的表。

-- 1、	内联接查询在流通总库的数据库类书的信息。
 select B.ISBN , Bo.bname,Bo.author,Bo.press
 from Books B inner join BookInfo Bo 
 on B.ISBN = Bo.ISBN
 where Bo.bname like '%数据库%';

-- 2、	左外联接查询分类为4的用户的姓名、单位、及借阅情况。
 select u.lname,u.unitName,l.bookNo,l.loanNo,l.borrowDate 
 from Users u left join Loan l on u.loanNo=l.loanNo
 where classNo = 4
 order by unitName ;

-- 3、	使用子查询查询与借阅证号为“S06102”的用户在同一单位的所有用户的借阅证号和姓名。
 select loanNo,lname
 from Users 
 where unitName = ( select unitName 
 from Users
 where loanNo = 'S06102');

-- 4、	使用子查询查询所有借书预约成功的用户的姓名和E_mail,以便通知他们。
 select lname,email
 from Users
 where loanNo in (select loanNo
 from Reservation
 where rstatus='T')

-- 5、	使用子查询查询类别为“教师”的用户的借书情况。
 select bookNo,loanNo,borrowDate
 from Loan
 where loanNo in(select loanNo
 from Users
 where classNo = (select classNo from Class_User where cname = '教师'));

-- 6、	计算相关子查询查询借阅数量大于3本的用户的借阅证号、姓名、单位。
 select u.loanNo,u.lname,u.unitName
 from Users u INNER JOIN (select loanNo,count(*)
 from Loan
 group by loanNo
 having count(*)>2) d
 where u.loanNo=d.loanNo;

-- 7、	查询所有曾经借过书号为“A04500049”这本书的所有用户的借阅证号和姓名(只考虑loanhist里的用户)。
 select loanNo,lname
 from Users
 where loanNo in(select loanNo 
 from LoanHist
 where bookNo = 'A04500049');

-- 8、	查询所有借过书的用户借阅证号(包括loan和loanhist的用户)。
 select loanNo 
 from Loan
 union
 select loanNo
 from LoanHist;

-- 9、	查询现在正借有书的用户但以前没有借过书的用户的借阅证号。
 select distinct loanNo
 from Loan
 where loanNo not in(select loanNo
 from LoanHist);

-- 10、	查询当前所有借书信息,并将查询结果导出到’d:\loan.txt’文件中,字段之间用逗号分隔。
 select *
 from Loan into outfile '/var/lib/mysql/loan.txt'FIELDS terminated by '\,';

-- 11、	新建一个表loan_statics,包括ISBN和loancount(借阅次数)两个字段,通过查询将每类书的ISBN号和历史借阅次数添加到这个表中。
 create table loan_statics(
 isbn char(13),
 loancount int
);

 insert into loan_statics(isbn,loancount)
 SELECT isbn,COUNT(*)
 FROM Books b INNER JOIN (select bookNo
 from LoanHist) c
 WHERE b.bookNo=c.bookNo
 GROUP BY isbn;

-- 12、	在USER表中添加一个金额字段amount,并对每个用户的交费总额进行修改。
 alter table Users add amount decimal; 
 
 update Users set amount=100 where loanNo='S02151';
 update Users set amount=110 where loanNo='S02152';
 update Users set amount=100 where loanNo='S02153';

你可能感兴趣的:(mysql)