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

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

相关子查询:相关子查询的执行依赖于外部查询。多数情况下是子查询的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';
自连接查询
表与其自身进行笛卡儿积连接、根据相同名称的字段进行记录匹配,查询结果仅包含符合连接条件与筛选条件的行。为了区别该表的每一次出现,需要为表分别定义别名。
INNER JOIN使用比较运算符“ = ”匹配每个表共有列 的列值,查询结果仅包含符合连接条件与筛选条件的行。
select A.col_name1,B,col_name2
-- 使用子查询获得当前没有被读者借阅的图书信息
SELECT bName AS 图书名称,bid AS 图书编号,author AS 作者名称,pubComp AS 出版社,price AS 单价
FROM book
WHERE bid NOT IN(
  SELECT nif FROM borrow
-- 使用子查询获得今年的所有缴纳罚款的读者清单
SELECT reader.rName AS 读者姓名,book.bName AS 图书名称,pDate ...
                                    5.查询库存表中每本书的条码、位置和借阅的读者编号。没有借阅的,读者编号用NULL表示。4.查询每个读者的借阅信息,包括读者姓名、书名、借阅日期、借阅状态。3.查询每个读者的姓名、单位、`可借天数`和可借数量。2.查询借阅状态为借阅的图书的书号和条码。1.查询张小东的基本情况和图书借阅情况。#全连接、内连接、右连接、左连接。