六、关联查询
六、关联查询
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;