1. 程式人生 > 其它 >六、關聯查詢

六、關聯查詢

六、關聯查詢

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;