六、關聯查詢
阿新 • • 發佈:2022-05-21
六、關聯查詢
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_idINNER 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;