關係代數中的操作可以分為兩類:
(一):傳統的集合操作。並,差,交,笛卡爾積。
(二):擴充的關係操作:投影(關係表的垂直分隔),選擇(關係表的水平分隔),串連(關係表的結合),除法(笛卡爾積的逆運算)。
1.並 -- Union
在oracle 裡面的並有兩種union,union all。區別在於union過濾重複行!一般在沒有重複行的時候使用union all這樣查詢的效率快。
eg:
select * from A union (all) select * from B
2.差 -- minus
eg:select * from B minus select * from B
3.笛卡爾積 Cartesian Product -- cross join
eg:select * from A cross join B
結果:行數:A的行數和B的行數的乘積;列數:A的列數加B的列數。
關係代數的四個組合操作
1.交 intersect
eg: select * from A intersect select * from B;(A表,B表 需要有相同的欄位值 即有相同的元數)
結果:A 表 和 B表的交集
2.串連
在關係代數裡面的串連分為兩種:θ串連和F串連。
θ串連:笛卡爾積加上選擇操作。
F串連:滿足某一個公式F的串連。
θ串連:重要的當θ串連的操作符為=的時候就是我們常說的等值串連。
等值串連的結果:如果沒有做投影操作,選擇出來的笛卡爾積,選擇滿足相等條件的行。列為做串連表的列和。
eg:select * from A ,B where A.id=B.id。
自然串連natural Join
類似上面的等值串連,先做笛卡爾積,然後選擇元組。其中的公用屬性只出現一次。
eg:select * from A natural join B ===行數等於===select * from A ,B where A.id=B.id(注意列數的不一樣)
3.外串連 outer join (包括left (outer) join ,right (outer) join, full outer join)
eg:select * from A left outer join B on(A.id=B.id)
equals
select * from A left join outer join using(id);--using後面的()不能少
equals
select * from A ,B where A.id = B.id(9i之後的寫法)(+)
把外串連用加好(+)括起來表示,那括弧放在那個表上,標識這個表沒有匹配沒有關係可以用控制補充上去,這個+動作就是填充空值的動作.
基本表串連:
連線類型:inner join ; left outer join ;right outer join ;full outer join;
串連條件:natural(應該寫在連線類型的左邊);on 等值串連的條件(應該寫在連線類型的右邊); using(A1,A2,..An)(應該寫在連線類型的右邊)
連線類型分為:內和外串連兩種。內串連是等值的F串連,外串連又分為左,右,完全外串連