Oracle學習筆記(二)----------union

趁熱再整理一個關於數據庫(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一樣道理,只不過不會合並重復記錄。

 

 

 

相關文章
相關標籤/搜索