多表查詢SQL優化

2021-08-05 19:48:56 字數 1131 閱讀 7168

多表連線left join 

是乙個例子:三張表,也就是多表聯查,使用聚集函式sum,用到了group by

select c.channel_short_nameu.user_name,(bs.settlement_amount - bs.received_amount)trans,bs.bill_source_id from bill_source bs 

left join channel c on bs.channel_id = c.channel_id

left join "user" u on c.channel_id = u.channel_id

where bs.channel_id = c.channel_id and  bs.ins_date >= '20005-01-01' and bs.ins_date <= '2006-12-31'

group by c.channel_short_name,u.user_name,trans

order by trans desc

上邊的sql是之前沒有優化的時候,相當於 a b c 三個表,channel表為中間表,user表既有channel_id,而bs表也有channel_id,所以直接用a表關聯b表,b表關聯c表是常用的套路,而下面的直接用left join  左連線a關聯c表,同時左連線b表之後再加入group by、order by 元素。

select c.channel_short_name,u.user_name,(bs.settlement_amount - bs.received_amount)trans from bill_source bs 

left join "user" u  on bs.channel_id = u.channel_id, channel c

where bs.channel_id = c.channel_id and  bs.ins_date >= '20005-01-01' and bs.ins_date <= '2006-12-31'

group by c.channel_short_name,u.user_name,trans

order by trans desc

SQL 多表查詢

不同的 sql join inner join 內連線 如果表中至少有乙個匹配,也從左表返回所有的行 left join 左連線 即使右表中沒有匹配,也從右表返回所有的行 right join 右連線 即使左表中沒有匹配,也從右表返回所有的行 full join 全連線 只有其中乙個表中存在匹配也從...

SQL 多表查詢

join操作符 1.笛卡爾積,rxs 可直接轉換為sql語句 2.等值連線,記作 可直接轉換為sql語句 3.自然連線,記作 可轉換為sql語句 4.左外連線和右外連線的表示方法及轉換為sql 注意若多個關係有同名屬性,則用 關係名.屬性名 指出重名屬性 連線也可以與投影,選擇等結合使用。1.查詢選...

SQL多表優化思路

一 驅動表選擇 左右連線可以指定驅動表,但是inner join無法指定,一般是系統自動判定 1.當使用left join時,左表是驅動表,右表是被驅動表 2.當使用right join時,右表時驅動表,左表是驅動表 3.當使用join時,mysql會選擇資料量比較小的表作為驅動表,大表作為被驅動表...