mysql学习之旅(九)——多表连接查询的介绍

多表连接查询的介绍

多表连接:
多表连接查询是从多个表中获取数据
在这里插入图片描述语法结构:
table_reference
[INNER] JOIN |{LEFT|RIGHT }[OUTER] JOIN
table_reference
ON conditional_expr
eg:
– 多表连接
– 通过查看图书信息表和图书类别表来获取图书编号、图书名称、图书类别
SELECT book_id,book_name,category FROM bookinfo INNER JOIN bookcategory ON bookinfo.book_category_id=bookcategory.category_id;

内连接

什么是内连接

根据连接条件从多个表中查询选择数据,显示这些表中与连接条件相匹配的数据行,组合成新纪录。
在这里插入图片描述SELECT column_list
FROM t1
[INNER] JOIN t2 ON join_condition1
[INNER] JOIN t3 ON join_condition2
…]
WHERE where_conditions;

案例:
在这里插入图片描述SELECT borrowinfo.book_id,book_name,borrowinfo.card_id,NAME,tel,return_date,STATUS FROM borrowinfo
INNER JOIN bookinfo ON borrowinfo.book_id=bookinfo.book_id
INNER JOIN readerinfo ON borrowinfo.card_id=readerinfo.card_id
WHERE borrowinfo.status=‘否’;

起别名简化——
SELECT t1.book_id,book_name,t1.card_id,NAME,tel,return_date,STATUS FROM borrowinfo t1,INNER可以省略:
JOIN bookinfo t2 ON t1.book_id=t2.book_id
JOIN readerinfo t3 ON t1.card_id=t3.card_id
WHERE t1.status=‘否’;

外连接

外连接

外连接将查询多个表中相关联的行。
外连接分为:
左外连接LEFT[OUTER] JOIN
右外连接RIGHT[OUTER] JOIN
左外连接显示左表全部记录,右表满足连接条件的记录
在这里插入图片描述右外连接显示右表全部记录,左表满足连接条件的记录
在这里插入图片描述语法结构:
SELECT column_list
FROM t1
LEFT|RIGHT [OUTER] JOIN t2 ON jion_condition1;
案例:
在这里插入图片描述1、左表连接
SELECT book_id,book_name,category FROM bookcategory
LEFT JOIN bookinfo ON bookcategory.category_id=bookinfo.book_category_id;
2、右表连接
SELECT book_id,book_name,category FROM bookinfo
RIGHT JOIN bookcategory ON bookcategory.category_id=bookinfo.book_category_id WHERE parent_id<>0;
起别名简化:
SELECT book_id,book_name,category FROM bookcategory b
LEFT JOIN bookinfo a ON b.category_id=a.book_category_id WHERE parent_id<>0;

自连接

如果在一个连接查询中,涉及的两个表都是同一个表,这种查询称为自连接查询。
自连接是一种特殊的连接查询,它是指相互连接的表在物理上为同一张表,但可以在逻辑上分为两张表。

案例:
查询所有图书类别的图书类别编号,类别名称,上级分类名称。
分析:
查看图书类别信息表
SELECT s.category_id AS ‘图书类别编号’,s.category AS ‘图书类别名称’,p.category AS ‘图书的上机分类名称’ FROM bookcategory s
LEFT JOIN bookcategory p
ON s.parent_id=p.category_id;
采用左连接或者自连接看具体需求。

多表更新

UPDATE
table1 {[INNER]JOIN|{LEFT|RIGHT}[OUTER]JOIN} table2
ON conditional_expr
SET col1={expr1|DEFAULT}
[col2={expr2|DEFAULT}]…
[WHERE where_condition]

案例:
在这里插入图片描述UPDATE readerfee t1 JOIN readerinfo t2 ON t1.card_id=t2.card_id
SET actual_return_date=SYSDATE(),book_free=DATEDIFF(SYSDATE(),return_date)*0.2,balance=balance-book_free
WHERE t1.book_id=‘20190801’ AND t2.card_id=‘210210199901011111’;

多表删除

DELECT table1[.],table[.]
FROM table1{[INNER]JOIN|{LEFT|RIGHT}[OUTER]JOIN} table2
ON conditional_expr
[WHERE where_condition]
案例:
在这里插入图片描述复制表
CREATE TABLE bookcategory_bak
AS
SELECT * FROM bookcategory;

CREATE TABLE bookinfo_bak
AS
SELECT * FROM bookinfo;
1、
DELETE t1 FROM bookcategory_bak t1
LEFT JOIN bookinfo_bak t2
ON t1.category_id=t2.book_category_id
WHERE parent_id<>0 AND book_id IS NULL;
2、
DELETE t1,t2 FROM bookcategory_bak t1
INNER JOIN bookinfo_bak t2
ON t1.category_id= t2.book_category_id
WHERE t1.category_id=3;

发布了19 篇原创文章 · 获赞 2 · 访问量 1219

猜你喜欢

转载自blog.csdn.net/weixin_38377637/article/details/100152892