程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql聯合,連接查詢,Mysql聯合,連接

Mysql聯合,連接查詢,Mysql聯合,連接

編輯:MySQL綜合教程

Mysql聯合,連接查詢,Mysql聯合,連接


一、 聯合查詢    UNION, INTERSECT, EXCEPT

  UNION運算符可以將兩個或兩個以上Select語句的查詢結果集合合並成一個結果集合顯示,即執行聯合查詢。UNION的語法格式為:    
        select_statement 
        UNION [ALL] selectstatement   [UNION [ALL] selectstatement][…n]   

  其中selectstatement為待聯合的Select查詢語句。    
  ALL選項表示將所有行合並到結果集合中。不指定該項時,被聯合查詢結果集合中的重復行將只保留一行。    
聯合查詢時,查詢結果的列標題為第一個查詢語句的列標題。因此,要定義列標題必須在第一個查詢語句中定義。要對聯合查詢結果排序時,也必須使用第一查詢語句中的列名、列標題或者列序號。 在使用UNION 運算符時,應保證每個聯合查詢語句的選擇列表中有相同數量的表達式,並且每個查詢選擇表達式應具有相同的數據類型,或是可以自動將它們轉換為相同的數據類型。在自動轉換時,對於數值類型,系統將低精度的數據類型轉換為高精度的數據類型。    

在包括多個查詢的UNION語句中,其執行順序是自左至右,使用括號可以改變這一執行順序。例如:    
查詢1 UNION (查詢2 UNION 查詢3) 

  INTERSECT,EXCEPT

  INTERSECT是交集. EXCEPT是差集的意思

select user_id from user intersect select user_id from toy; 
//就是返回這兩個select查詢相同的部分.(這裡就是有玩具的孩子的user_id)

select user_id from user except select user_id from toy; 
//就是返回第一個select 減去第二個select 結果的部分。(這裡就是沒有玩具的孩子的user_id)

二、連接查詢 

  通過連接運算符可以實現多個表查詢。連接是關系數據庫模型的主要特點,也是它區別於其它類型數據庫管理系統的一個標志。

在標准SQL中的UNION語句如下:

      SELECT column_name(s) FROM table_name1
      UNION
      SELECT column_name(s) FROM table_name2

  其中有前提:每個SELECT的內容(表項)必須是相同的結構。詳細的說,鏈接的表的列數必須互相相同,同時相對的列屬性也必須相同。而列名可以不同(結構相同)

  首先交叉連接:cross join

select u.username, t.toyname from user as u cross join toy as t; 
//交叉連接就是把所有第一個表和第二個表的值一一對應 
//例如:假如第一個表格有5個值,第二個表有4個值,這個結果就應該有20條記錄。

  內聯接:inner join

    相等連接:(equal join)

  select u.username, t.toyname from user as u inner join toy as t on(也可以用where) u.user_id = t.user_id; 
  //這個的結果就是各自擁有的玩具了。

    不等連接:(non-equal join)

  select u.username, t.toyname from user as u inner join toy as t on(也可以用where) u.user_id <> t.user_id order by u.username; 
  //這個的結果是各自沒有的玩具

    自然連接:(natural join)

  這個是有在連接的兩個表格中的列名稱相等的時候才能用。

1 <code class=" hljs sql">select u.username, t.toyname from user as u natural join toy as t; //和上面的相等連接的結果是一樣的。</code>

  外連接:outer join

    左外聯接、右外聯接比較相似:left outer join ; right outer join;

1 2 <code class=" hljs sql">select u.usrename, t.toyname from user u inner join toy t on (這裡不能用where) u.user_id = t.user_id; //這個是查詢用戶姓名和他所擁有的玩具名字</code>

select u.username, t.toyname from user u left outer join toy t on u.user_id = t.user_id; 
//這個是以左表(user)為基准,來查詢所有用戶姓名和他所擁有的玩具名字。

select u.username, t.toyname from user u right outer join toy t on u.user_id = t.user_id; 
//這個是以右表(toy)為基准,來查詢所有玩具的擁有者姓名,對於沒有擁有者的為NULL

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved