六、关联查询

六、关联查询

6.1、子查询

子查询是 MySQL 中比较常用的查询方法,通过子查询可以实现多表关联查询。子查询指将一个查询语句嵌套在另一个查询语句中。

练习:

-- 查询乱世佳人的出版社名称
 select pub_id from book where title="乱世佳人";
 select name from publisher where id = 6;
-- 查询清华出版社出版所有书籍名称
select id from publisher where name="清华出版社";
select id,title from book where pub_id = 1;
-- 查询西游记的作者名字
select id from book where title="西游记";
select author_id from book2author where book_id=1;
select name from author where id in (1,2);

6.2、join查询

6.2.1、笛卡尔积查询

mysql> select * from book,publisher;

 

 

6.2.2、内连接(inner join)

查询两张表中都有的关联数据,相当于利用条件从笛卡尔积结果中筛选出了正确的结果。

案例1:

-- 查询两张表中都有的关联数据,相当于利用条件从笛卡尔积结果中筛选出了正确的结果。

select * from book,publisher where book.pub_id=publisher.id;
OR
SELECT * FROM book INNER JOIN publisher ON book.pub_id=publisher.id;

 

 案例2:

SELECT * FROM book INNER JOIN book2author ON book.id=book2author.book_id;

SELECT * FROM book INNER JOIN book2author ON book.id=book2author.book_id 
                   INNER JOIN author on book2author.author_id=author.id

6.2.3、左连接(left join)

左外连接又称为左连接,使用 LEFT OUTER JOIN 关键字连接两个表,并使用 ON 子句来设置连接条件。

SELECT * FROM publisher LEFT JOIN book ON book.pub_id=publisher.id;

上述语法中,“表1”为基表,“表2”为参考表。左连接查询时,可以查询出“表1”中的所有记录和“表2”中匹配连接条件的记录。如果“表1”的某行在“表2”中没有匹配行,那么在返回结果中,“表2”的字段值均为空值(NULL)。

 

 

6.2.4、右连接(right join)

右外连接又称为右连接,右连接是左连接的反向连接。使用 RIGHT OUTER JOIN 关键字连接两个表,并使用 ON 子句来设置连接条件。

与左连接相反,右连接以“表2”为基表,“表1”为参考表。右连接查询时,可以查询出“表2”中的所有记录和“表1”中匹配连接条件的记录。如果“表2”的某行在“表1”中没有匹配行,那么在返回结果中,“表1”的字段值均为空值(NULL)。

SELECT * FROM book RIGHT JOIN publisher ON book.pub_id=publisher.id;

 

posted @ 2022-05-21 16:17  xiaohaoge  阅读(288)  评论(0编辑  收藏  举报