mysql數據庫中的多表查詢(內連接,外連接,子查詢)


用兩個表(a_table、b_table),關聯字段a_table.a_id和b_table.b_id來演示一下MySQL的內連接、外連接( 左(外)連接、右(外)連接、全(外)連接)。

MySQL版本:Server version: 5.6.31 MySQL Community Server (GPL)

數據庫表:a_table、b_table

主題:內連接、左連接(左外連接)、右連接(右外連接)、全連接(全外連接)

表為:

   

內連接:

1. 交叉連接查詢(基本不會使用-得到的是兩個表的乘積) (這種查詢時候會產生笛卡爾積)
語法: select * from A,B;
2. 內連接查詢(使用的關鍵字 inner join -- inner可以省略)
隱式內連接: select * from A,B where 條件;
顯示內連接: select * from A inner join B on 條件;

執行語句為:select * from a_table a inner join b_table bon a.a_id = b.b_id;

總結:當且僅當兩個表中的數據都符合on后面的條件的時候,才會被select出來.

左連接:

外連接查詢(使用的關鍵字 outer join -- outer可以省略)
左外連接:left outer join

語句:select * from a_table a left join b_table bon a.a_id = b.b_id;
執行結果:

總結:在查詢的時候,以left join 這個關鍵字左邊的表為主表,會將這個表中的數據全部查詢出來,如果右表中沒有這條數據,則用NULL字段表示.

右外連接:

右外連接:right outer join
select * from A right outer join B on 條件;

語句:select * from a_table a right outer join b_table b on a.a_id = b.b_id;
執行結果:

總結:在查詢的時候,會以right join 這個關鍵字右邊的表為主,然后將符合條件的查詢出來,左表中沒有的字段,使用NULL進行補充

全連接(全外連接)

MySQL目前不支持此種方式,可以用其他方式替代解決。

子查詢:

子查詢:一條select語句結果作為另一條select語法一部分(查詢條件,查詢結果,表等)。

語法: select ....查詢字段 ... from ... 表.. where ... 查詢條件

#3 子查詢, 查詢“化妝品”分類上架商品詳情
#隱式內連接
SELECT p.*
FROM products p , category c
WHERE p.category_id=c.cid AND c.cname = '化妝品';
#子查詢
##作為查詢條件
SELECT *
FROM products p
WHERE p.category_id =
(
SELECT c.cid FROM category c
WHERE c.cname='化妝品'
);
##作為另一張表
SELECT *
FROM products p ,
(SELECT * FROM category WHERE cname='化妝品') c
WHERE p.category_id = c.cid;

查詢結果:

總結:可以將一條查詢語句作為另外一個查詢語句的條件和表,再次進行查詢.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM