联接查询:内连接、左连接、右连接、全连接。
嵌套子查询:一个查询语句的结果作为另外一个查询语句的表或者条件。
相关子查询:相关子查询的执行依赖于外部查询。多数情况下是子查询的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.查询张小东的基本情况和图书借阅情况。#全连接、内连接、右连接、左连接。