Mysql多表查詢(兩張獨立表,一張關系表)


一、數據庫設計
1、三個數據表長這樣
 
其中user表記錄用戶信息,cat主要記錄男女性別,mete表是用戶id和性別id的對應關系
 
2、具體數據如下
 
二、查詢目標
查詢出所有性別為“男”的用戶的“姓名”,如下記錄兩種不同形式的查詢
1、單純的條件查詢
SQL:
select user.value from user where user.uid in (select mete.uid from mete where mete.cid=1) 

 

結果:
 
語句解釋:
先使用select mete.uid from mete where mete.cid=1語句在mete表中,查找到所有“男”的uid(這里默認我們已經知道cid=1代表男性),再通過條件查詢,與上句查詢結果進行比對,從而顯示出user表中的所有男性名字。
 
2、使用連接查詢,條件顯示所有用戶的姓名和對應的性別
SQL:
select U.value,C.value from mete as M join cat as C on C.cid=M.cid join user as U on U.uid=M.uid 

 

結果:
語句解釋:使用到了內聯查詢,只輸出包含連接條件的數據行,從左往右看,可以理解為先將mete表與cat表連接,通過條件C.cid=M.cid,形成了一個性別類型匹配的新表,新表再和user表連接,通過U.uid=M.uid ,形成了一個姓名匹配的表,此時這三張表就聯合形成了一個性別類型、名稱類型一一對應的表,長得是這樣,
再通過select語句,選出了我們想要的姓名和性別對應的表。
 
注:如上是內聯查詢,只輸出滿足所有條件的數據,也可以通過外聯查詢,不對數據過濾,只對數據組合的新表
SQL:
select * from mete as M left join cat as C on C.cid=M.cid left join user as U on U.uid=M.uid 
語句解釋:在join前加left/right,則可以使用外聯查詢,不同的是連接的表組和后輸出左表(右表)中不符合條件的記錄,如下

 


免責聲明!

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



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