初步引見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
(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。