MySQL多表查詢解析

一、兩張表查詢
表結構
主表t_logistics_cell_info
這裏寫圖片描述
從表t_logistics_cell_list
這裏寫圖片描述
分析表t_logistics_cell_list中logistics_id對應表t_logistics_cell_info中的id,所以我們在寫連接時where條件可寫成
t_logistics_cell_info.id=t_logistics_cell_list_logistics.id
完整例子:
SELECT * FROM t_logistics_cell_info,t_logistics_cell_list WHERE t_logistics_cell_info.id=t_logistics_cell_list.logistics_id;
由於表t_logistics_cell_info中的一條記錄對應表t_logistics_cell_list中有72條記錄所以在寫的時候要加上group by對錶t_logistics_cell_list進行分組再進行查詢,以爲我們只需要獲取表t_logistics_cell_list中的一條與t_logistics_cell_info對應即可所以查詢語句這樣寫
SELECT t1.id,t2.logistics_id,t2.id,t1.epc,t1.amount,t1.product_id,t2.logistics_id,t2.packing_epc,t2.flag,t1.gmt_create FROM t_logistics_cell_info t1,(SELECT * FROM t_logistics_cell_list GROUP BY logistics_id) t2 WHERE t1.id=t2.logistics_id LIMIT 10;
解析:這裏我把兩張表進行了重命名,t1,t2分別對應t_logistics_cell_info,(SELECT * FROM t_logistics_cell_list GROUP BY logistics_id) 因爲這裏需要對t_logistics_cell_list中的數據進行分組表中數據很多,所以我限制了返回的數據10條LIMIT 10
結果展示
這裏寫圖片描述
由於我只查詢了指定字段,所以只返回了t1,t2中的
t1.id,t2.logistics_id,t2.id,t1.epc,t1.amount,t1.product_id,t2.logistics_id,t2.packing_epc,t2.flag,t1.gmt_create這些字段
多表查詢的方式有很多種,我只是根據需要對子查詢進行介紹,例如等值連接,左外連接,右外連接,自然連接等就等後期用到再記錄吧。
二、三表查詢
表結構
t_logistics_cell_info
這裏寫圖片描述
t_packing_list
這裏寫圖片描述
t_logistics_cell_list
這裏寫圖片描述
有兩張表跟上面兩張表是同樣的,不多記錄了
t_packing_list這張表中的packing_info_id對應t_logistics_cell_list表中的id
所以在寫的時候先關聯t_logistics_cell_list和t_logistics_cell_info表,獲取t_logistics_cell_list中的id,再與t_packing_list表關聯查詢
同樣還是需要對錶進行分組
SELECT t1.packing_info_id,t1.code,t1.inside_code,t1.flag,t2.product_id FROM t_packing_list t1,
(SELECT p2.logistics_id,p1.surplus_amount,p2.id,p2.packing_epc,p1.product_id FROM
(SELECT * FROM t_logistics_cell_info WHERE surplus_amount=72 AND product_id=7) p1,
(SELECT * FROM t_logistics_cell_list GROUP BY logistics_id) p2 WHERE p1.id=p2.logistics_id) t2 WHERE t1.packing_info_id=t2.id GROUP BY t1.packing_info_id
這裏我先查詢t_logistics_cell_info中surplus_amount=72和product_id=7的數據
再對t_logistics_cell_list中的數據進行分組,然後將這兩張表結合p1.id=p2.logistics_id,生成一個新的表命名爲t2,再將t2中的packing_info_id與t_packing_list中的id關聯 t1.packing_info_id=t2.id
查詢結果
這裏寫圖片描述
總結:
測試對數據庫的要求是必須的,所以一定要經常練習才能信手拈來這裏可以給大家推薦一個訓練的網站:實驗樓,這裏面有很多項目可以練習的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章