-
1 基础知识
-
2 任务挑战
多表连接查询
等值连接
找Bookstore数据库中客户订购的图书书名,订购册数和订购时间。
SELECT Book.书名, Sell.订购册数, Sell.订购时间
FROM Book, Sell
WHERE Book.图书编号=Sell.图书编号;
Join内连接
要实现上一题的结果,可以使用以下语句:
SELECT Book.书名, Sell.订购册数, Sell.订购时间
FROM Book inner join Sell
ON Book.图书编号=Sell.图书编号;
当ON后面的字段相同时,还可以写成:
SELECT Book.书名, Sell.订购册数, Sell.订购时间
FROM Book join sell using(图书编号);
三表连接:
用JOIN关键字表达下列查询:查找购买了“网页程序设计”且订购数量大于5本的图书和会员姓名和订购册数。
SELECT Book.图书编号, 会员姓名, 书名, 订购册数
FROM Sell JOIN Book ON Book. 图书编号= Sell.图书编号
JOIN Members ON Sell.身份证号 = Members.身份证号
WHERE 书名 = '网页程序设计' AND 订购册数>5 ;
自表连接
作为特例,可以将一个表与它自身进行连接,称为自连接。若要在一个表中查找具有相同列值的行,则可以使用自连接。使用自连接时需为表指定两个别名,且对所有列的引用均要用别名限定。
【例】 查找BookStore数据库中订单不同、图书编号相同的图书的订单号、图书编号和订购册数。
SELECT a.订单号,a.图书编号,a.订购册数
FROM Sell AS a JOIN Sell AS b
ON a. 图书编号=b. 图书编号
where a. 订单号!=b. 订单号;
左外连接(LEFT OUTER JOIN)
结果表中除了匹配行外,还包括左表有的但右表中不匹配的行,对于这样的行,从右表被选择的列设置为NULL。
【例】查找所有图书的图书编号、数量及订购了图书的会员身份证号,若从未订购过,也要包括其情况。
SELECT Book.图书编号,Book.数量,身份证号
FROM Book LEFT OUTER JOIN Sell
ON Book.图书编号= Sell.图书编号;
右外连接(RIGHT OUTER JOIN):
结果表中除了匹配行外,还包括右表有的但左表中不匹配的行,对于这样的行,从左表被选择的列设置为NULL。
【例】查找订购了图书的会员的订单号、图书编号和订购册数以及所有会员的会员姓名。
SELECT 订单号,图书编号,订购册数, Members.会员姓名
FROM Sell RIGHT JOIN Members
ON Members.身份证号= Sell.身份证号;

