【轉】mysql的union、left join、 right join、 inner join和視圖學習

來源:互聯網
上載者:User

標籤:_id   time   彙總函式   別名   avg   left join   資料   成功   分析   

1.聯合 union 進行多個查詢語句時,要求多次查詢的結果列數必須一樣。此時,查詢的結果以第一個sql語句的列名為準且union會自動去重複我們應該使用union all。 例......


1.聯合 union 進行多個查詢語句時,要求多次查詢的結果列數必須一樣。此時,查詢的結果以第一個sql語句的列名為準且union會自動去重複我們應該使用union all。
例如:
select id,sum(num) from (select * from ta union all select * from tb) as tmp group by id;
select id,sum(num) from (select * from ta union select * from tb);
select id,sum(num) from (select * from ta union select * from tb) as tmp;
請自己測試以上三個語句的結果;
注意:ta和tb的列數必須一樣,否則不能寫成 select * from ta union select * from tb;*應該替換成具體的欄位名;
當子語句的中含有where、order by或limit時,子語句應該用括弧括起來。
如:
select id,sum(num) from (select * from taorder by id desc union all select * from tb order by id desc) as tmp group by id; 錯誤的寫法
select id,sum(num) from ((select * from ta order by id desc) union all (select * from tb order by id desc)) as tmp group by id; 正確的寫法,重複了而且得不到想要的結果
select id,sum(num) from ((select * from ta ) union all (select * from tb) order by id desc) as tmp group by id; 一般都是寫在合并後
在字句中,只有order by 配合 limit 使用才會有意義,否則會被文法分析器去除。
2.串連 join、left join、right join、inner join左串連、右串連、內串連、外串連(目前MySQL並不支援,但是可以用 左串連+union+串連 實現)
串連的意義是:為了得到更完整的資訊(如:學生資訊),此時,我需要從更多的表(可能是學生資訊表、學產生績、學生家庭表等)進行尋找。
JOIN: 如果表中有至少一個匹配,則返回行。
LEFT JOIN(以左表為基準): 即使右表中沒有匹配,也從左表返回所有的行。
RIGHT JOIN(以右表為基準): 即使左表中沒有匹配,也從右表返回所有的行。
左串連和有串連是可以互換的。如 ta left join tb =========== tb right join ta 都是表示以ta表為基準進行查詢。
可以多次使用串連,但是當重複串連某一張表的時候,我們應該使用 as 給表取別名。
如:selectt1.name,`match_result`,t2.name,`match_time` from ta left jointb as t1 on ta.host_id=t1.id left join tb as t2 on ta.guest_id =t2.id;
3.視圖的學習(可以對一些開發人員訪問資料庫的許可權進行設定,看到該看到的,不該看到的就無法看到,如:sina.qq開發的介面,第三方使用者只能使用一些資料)
定義:視圖是虛表,是從一個或幾個基本表(或視圖)中匯出的表,在系統的資料字典中僅存放了視圖的定義,不存放視圖對應的資料。
作用: 簡單性(看到的就是需要的)、安全性(通過視圖使用者只能查詢和修改他們所能見到的資料)、大資料分表的時候用到(當一張表的資料量比較大的時候)。使用許可權可被限制在基表的行的子集上。使用許可權可被限制在基表的列的子集上。使用許可權可被限制在基表的行和列的子集上。使用許可權可被限制在多個基表的串連所限定的行上。使用許可權可被限制在基表中的資料的統計匯總上。使用許可權可被限制在另一視圖的一個子集上,或是一些視圖和基表合并後的子集上。
視圖與表的關係(他們是一一對應的,類似函數與反函數的關係):
1.修改某張表時,則與該表有關視圖的資料也會發生變化。
2.修改視圖時,若視圖的列和表的列一一對應(也就是說沒有彙總函式sum() avg() count() max() min()等、group by),則修改成功,否則失敗(像整體的修改無法確切決定局部的修改);

文檔來源:http://www.itxm.net/a/shujuku/2016/1205/840.html

【轉】mysql的union、left join、 right join、 inner join和視圖學習

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.