先解釋一下什麼是集合運算。
在資料庫中,集合運算就是對滿足同一規則的記錄進行的加減等四則運算。
集合運算子包括:union(並集)、intersect(交集)、except(差集)。
集合運算子可以去除重複行。如果希望集合運算子保留重複行,就需要使用all選項。
※mysql不支援intersect和except。oracle中使用minus代替except
表的加減法(以行為單位)
一、加法——union
select a,b from t1 union select a,b from t2
注意事項:①作為運算物件的記錄的列數、列的型別必須一致
②union會去除重複的記錄。包含重覆記錄可以使用all
③order by子句只能在最後使用一次。
二、選取表中公共部分——intersect
語法和注意事項同union。
select a,b from t1 intersect select a,b from t2
三、記錄的減法——except
語法同union。
except有一點要特別注意:減數和被減數的位置不同,得到的結果也不相同。
表的聯結(以列為單位對錶進行聯結)
一、內連線——inner join
有兩種,顯式的和隱式的,返回連線表中符合連線條件和查詢條件的資料行。(所謂的鏈結表就是資料庫在做查詢形成的中間表)。
二、外連線——outer join
外連不但返回符合連線和查詢條件的資料行,還返回不符合條件的一些行。
外連線分三類:左外連線(left outer join)、右外連線(right outer join)和全外連線(full outer join)。
三者的共同點是都返回符合連線條件和查詢條件(即:內連線)的資料行。不同點如下:
左外連線還返回左表中不符合連線條件單符合查詢條件的資料行。
右外連線還返回右表中不符合連線條件單符合查詢條件的資料行。
全外連線還返回左表中不符合連線條件單符合查詢條件的資料行,並且還返回右表中不符合連線條件單符合查詢條件的資料行。
全外連線實際是上左外連線和右外連線的數學合集(去掉重複),即「全外=左外 union 右外」。
說明:左表就是在「(left outer join)」關鍵字左邊的表。右表當然就是右邊的了。在三種型別的外連線中,outer 關鍵字是可省略的。
三、聯合連線——union join
這是一種很少見的連線方式。oracle、mysql均不支援,其作用是:找出全外連線和內連線之間差異的所有行。這在資料分析中排錯中比較常用。也可以利用資料庫的集合操作來實現此功能。
四、自然連線——natural inner join
自然連線無需指定連線列,sql會檢查兩個表中是否相同名稱的列,且假設他們在連線條件中使用,並且在連線條件中僅包含乙個連線列。不允許使用on語句,不允許指定顯示列,顯示列只能用*表示(oracle環境下測試的)。對於每種連線型別(除了交叉連線外),均可指定natural
注意事項:
on後面的條件(on條件)和where條件的區別:
on條件:是過濾兩個鏈結表笛卡爾積形成中間表的約束條件。
where條件:在有on條件的select語句中是過濾中間表的約束條件。在沒有on的單錶查詢中,是限制物理表或者中間查詢結果返回記錄的約束。
在兩表或多表連線中是限制連線形成最終中間表的返回結果的約束。
資料庫的集合運算(表的加減法和聯結)
先解釋一下什麼是集合運算。在資料庫中,集合運算就是對滿足同一規則的記錄進行的加減等四則運算。集合運算子包括 union 並集 intersect 交集 except 差集 集合運算子可以去除重複行。如果希望集合運算子保留重複行,就需要使用all選項。mysql不支援intersect和except。...
SQL學習筆記 集合運算 表的加減運算
集合在資料庫領域表示記錄的集合,用來進行集合運算的運算子稱為集合運算子 加法運算 select product id,product name from product1 union select product id,product name from product2 運算結果 product ...
鍊錶 一元多項式的加 減法運算
問題描述 假設2個稀疏一元多項式分別由帶頭結點的有序單鏈表a和b儲存 指數項遞增有序 現要求設計乙個演算法,實現稀疏一元多項式的加減法計算。要求使用a和b的原儲存空間 運算後b不再存在,a鍊錶中儲存結果多項式 輸入中的單鏈表的長度不得在計算演算法中利用,僅作為建表使用。注意 加 減法計算後,如某一項...