趁熱再整理一個關於數據庫(Oracle)的關鍵字的用法sql
union關鍵字數據庫
union字面意思就是「聯合」,經過該關鍵字能夠將兩個sql語句合併起來一塊兒查詢,以達到想要的查詢結果。spa
舉個例子code
設有表以下:blog
學生表:io
+----+------+------+---------+ | id | name | age | classid | +----+------+------+---------+ | 1 | 關羽 | 35 | 7班 | | 2 | 張飛 | 33 | 5班 | | 3 | 趙雲 | 31 | 3班 | | 4 | 馬超 | 28 | 2班 | | 5 | 黃忠 | 60 | 8班 | +----+------+------+---------+
執行如下sql語句:class
-- 經過union能夠將兩個sql語句合併起來 select * from student where student.age >= 35 union select * from student where student.age < 30;
查詢結果:select
+----+-------+-------+---------+ | id | name | age | classid | +----+-------+-------+---------+ | 1 | 關羽 | 35 | 7班 | | 5 | 黃忠 | 60 | 8班 | | 4 | 馬超 | 28 | 2班 | +----+--------+------+---------+
經過union關鍵字將兩條sql語句合併一塊兒查詢,查詢到結果一併顯示出來。sql語句
再看另外一條sql語句:nio
-- 經過union能夠將兩個sql語句合併起來 select * from student where student.age >= 30 union select * from student where student.age < 35;
執行結果以下:
+----+------+------+---------+ | id | name | age | classid | +----+------+------+---------+ | 1 | 關羽 | 35 | 7班 | | 2 | 張飛 | 33 | 5班 | | 3 | 趙雲 | 31 | 3班 | | 5 | 黃忠 | 60 | 8班 | | 4 | 馬超 | 28 | 2班 | +----+------+------+---------+
經過該sql語句查詢到全部記錄,能夠看到union關鍵字至關於將兩個where字句的條件用或(||、or)關聯起來。注意union不會顯示重複的記錄。
與union關鍵字相似做用的就是union all關鍵字,二者的區別是union all關鍵字查詢出來不會合並重復的記錄,union all會顯示查到的全部記錄,相同記錄可重複出現。
如上面的sql語句將關鍵字union換成union all,執行結果將會不同
sql語句:
-- 經過union能夠將兩個sql語句合併起來 select * from student where student.age >= 30 union all select * from student where student.age < 35;
union all執行結果:
+----+------+------+---------+ | id | name | age | classid | +----+------+------+---------+ | 1 | 關羽 | 35 | 7班 | | 2 | 張飛 | 33 | 5班 | | 3 | 趙雲 | 31 | 3班 | | 5 | 黃忠 | 60 | 8班 | | 2 | 張飛 | 33 | 5班 | | 3 | 趙雲 | 31 | 3班 | | 4 | 馬超 | 28 | 2班 | +----+------+------+---------+
能夠看到,union all也將兩條sql語句合併起來了,不一樣的是,每條sql查詢出來的結果都會直接顯示出來(前4條記錄是第一個sql,後三條是第二個sql),它並無將重複記錄合併起來。
必需要注意的是,union和union all查詢中,兩個select語句的字段類型要匹配,字段個數也要一致。
union和union all能夠不侷限於同一張表,兩個sql語句能夠分別對應不一樣的表。
例如,還設有另外一張表以下:
+------------+--------------+------+---------------+ | teacher_id | teacher_name | age | teach_classid | +------------+--------------+------+---------------+ | a | 張三 | 50 | 7班 | | b | 李四 | 41 | 5班 | | c | 王五 | 38 | 3班 | +------------+--------------+------+---------------+
執行如下sql語句:
select * from student where student.age >= 30 union select * from teacher where teacher.age < 50;
執行結果以下:
+----+------+------+---------+ | id | name | age | classid | +----+------+------+---------+ | 1 | 關羽 | 35 | 7班 | | 2 | 張飛 | 33 | 5班 | | 3 | 趙雲 | 31 | 3班 | | 5 | 黃忠 | 60 | 8班 | | b | 李四 | 41 | 5班 | | c | 王五 | 38 | 3班 | +----+------+------+---------+
上面這個例子經過union關鍵字將兩條分別查詢不一樣表的sql語句合併起來了,注意合併以後的字段名稱以第一條sql語句的字段名稱來命名。
union all一樣道理,只不過不會合並重復記錄。