程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 初步引見MySQL中的聚集操作

初步引見MySQL中的聚集操作

編輯:MySQL綜合教程

初步引見MySQL中的聚集操作。本站提示廣大學習愛好者:(初步引見MySQL中的聚集操作)文章只能為提供參考,不一定能成為您想要的結果。以下是初步引見MySQL中的聚集操作正文


啥是聚集操作?

平日來講,將聯接操作看做是表之間的程度操作,由於該操作生成的虛擬表包括兩個表中的列。而我這裡總結的聚集操作,普通將這些操作看做是垂直操作。MySQL數據庫支撐兩種聚集操作:UNION DISTINCT和UNION ALL。

與聯接操作一樣,聚集操作也是對兩個輸出停止操作,並生成一個虛擬表。在聯接操作中,普通把輸出表稱為左輸出和右輸出。聚集操作的兩個輸出必需具有雷同的列數,若數據類型分歧,MySQL數據庫主動將停止隱式轉換。同時,成果列的稱號由左輸出決議。
後期預備

預備測試表table1和table2:

create table table1 
      (aid int not null auto_increment, 
      title varchar(20), 
      tag varchar(10), 
      primary key(aid)) 
      engine=innodb default charset=utf8;

create table table2 
      (bid int not null auto_increment, 
      title varchar(20), 
      tag varchar(10), 
      primary key(bid)) 
      engine=innodb default charset=utf8;

拔出以下測試數據:

insert into table1(aid, title, tag) values(1, 'article1', 'MySQL');
insert into table1(aid, title, tag) values(2, 'article2', 'PHP');
insert into table1(aid, title, tag) values(3, 'article3', 'CPP');

insert into table2(bid, title, tag) values(1, 'article1', 'MySQL');
insert into table2(bid, title, tag) values(2, 'article2', 'CPP');
insert into table2(bid, title, tag) values(3, 'article3', 'C');

UNION DISTINCT

UNION DISTINCT組合兩個輸出,並運用DISTINCT過濾反復項,普通可以直接省略DISTINCT症結字,直接應用UNION。

UNION的語法以下:

SELECT column,... FROM table1 
UNION [ALL]
SELECT column,... FROM table2
...

在多個SELECT語句中,對應的列應當具有雷同的字段屬性,且第一個SELECT語句中被應用的字段稱號也被用於成果的字段稱號。

如今我運轉以下sql語句:

(select * from table1) union (select * from table2);

將會獲得以下成果:

+-----+----------+-------+
| aid | title  | tag  |
+-----+----------+-------+
|  1 | article1 | MySQL |
|  2 | article2 | PHP  |
|  3 | article3 | CPP  |
|  2 | article2 | CPP  |
|  3 | article3 | C   |
+-----+----------+-------+

我們發明,表table1和表table2中的反復數據項:

|  1 | article1 | MySQL |

只湧現了一次,這就是UNION的感化後果。

MySQL數據庫今朝對UNION DISTINCT的完成方法以下:

  •     創立一張暫時表,也就是虛擬表;
  •     對這張暫時表的列添加獨一索引;
  •     將輸出的數據拔出暫時表;
  •     前往虛擬表。

由於添加了獨一索引,所以可以過濾失落聚集中反復的數據項。這裡反復的意思是SELECT所選的字段完整雷同時,才會算作是反復的。

UNION ALL

UNION ALL的意思是不會消除失落反復的數據項,好比我運轉以下的sql語句:
(select * from table1) union all (select * from table2);

你將會獲得以下成果:

+-----+----------+-------+
| aid | title  | tag  |
+-----+----------+-------+
|  1 | article1 | MySQL |
|  2 | article2 | PHP  |
|  3 | article3 | CPP  |
|  1 | article1 | MySQL |
|  2 | article2 | CPP  |
|  3 | article3 | C   |
+-----+----------+-------+

發明反復的數據其實不會被挑選失落。

在應用UNION DISTINCT的時刻,因為向暫時表中添加了獨一索引,拔出的速度明顯會是以而遭到影響。假如確認停止UNION操作的兩個聚集中沒有反復的選項,最有用的方法應當是應用UNION ALL。

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