mySQL UNION運(yùn)算符的默認(rèn)規(guī)則研究
更新時(shí)間:2009年07月17日 00:38:32 作者:
SQL UNION運(yùn)算符的默認(rèn)規(guī)則研究,學(xué)習(xí)union的朋友可以參考下。
復(fù)制代碼 代碼如下:
/* 建立數(shù)據(jù)表 */
create table td_base_data( id int(10) not null auto_increment,userId int(10) default '0',primary key (`id`))ENGINE=MyISAM DEFAULT CHARSET=gbk;
create table td_base_data_20090527( id int(10) not null auto_increment,userId int(10) default '0',primary key (`id`))ENGINE=MyISAM DEFAULT CHARSET=gbk;
/* 插入模擬記錄 */
insert into td_base_data(userId) values(1);
insert into td_base_data(userId) values(45);
insert into td_base_data(userId) values(45);
insert into td_base_data(userId) values(1);
insert into td_base_data(userId) values(45);
insert into td_base_data_20090527(userId) values(1);
insert into td_base_data_20090527(userId) values(45);
insert into td_base_data_20090527(userId) values(45);
insert into td_base_data_20090527(userId) values(1);
insert into td_base_data_20090527(userId) values(45);
insert into td_base_data_20090527(userId) values(45);
/* 查詢測(cè)試 */
select count(userId) as cnumber from td_base_data where userId = '45';
/* 3 */
select count(userId) as cnumber from td_base_data_20090527 where userId = '45';
/* 4 */
select (select count(userId) from td_base_data where userId = '45') + (select count(userId) from td_base_data_20090527 where userId = '45') as cnumber;
/* 7 */
select count(*) from
(
select id from td_base_data where userId = '45'
union
select id from td_base_data_20090527 where userId = '45'
) as tx;
/* 4 */
select count(*) from
(
select * from td_base_data where userId = '45'
union
select * from td_base_data_20090527 where userId = '45'
) as tx;
/* 4 */
/* 證明在mysql中,union本身有剔除重復(fù)項(xiàng)的作用 */
/* 查詢手冊(cè)定義 */
/*
查詢mysql參考手冊(cè):
13.2.7.2. UNION語(yǔ)法
如果您對(duì)UNION不使用關(guān)鍵詞ALL,則所有返回的行都是唯一的,如同您已經(jīng)對(duì)整個(gè)結(jié)果集合使用了DISTINCT。如果您指定了ALL,您會(huì)從所有用過(guò)的SELECT語(yǔ)句中得到所有匹配的行。
DISTINCT關(guān)鍵詞是一個(gè)自選詞,不起任何作用,但是根據(jù)SQL標(biāo)準(zhǔn)的要求,在語(yǔ)法中允許采用。(在MySQL中,DISTINCT代表一個(gè)共用體的默認(rèn)工作性質(zhì)。)
*/
/* 證明在mysql中,union默認(rèn)就是DISTINCT的 */
/*
查詢mssql參考手冊(cè):
Transact-SQL 參考
UNION 運(yùn)算符:
使用 UNION 組合兩個(gè)查詢的結(jié)果集的兩個(gè)基本規(guī)則是:
1.所有查詢中的列數(shù)和列的順序必須相同。
2.數(shù)據(jù)類型必須兼容。
參數(shù):
UNION
指定組合多個(gè)結(jié)果集并將其作為單個(gè)結(jié)果集返回。
ALL
在結(jié)果中包含所有的行,包括重復(fù)行。如果沒(méi)有指定,則刪除重復(fù)行。
*/
/* 證明在mssql中,union默認(rèn)也是DISTINCT的 */
/* 查詢標(biāo)準(zhǔn)定義 */
/*
查詢SQL2003標(biāo)準(zhǔn):
Transact-SQL 參考
4.10.6.2 Operators that operate on multisets and return multisets
MULTISET UNION is an operator that computes the union of two multisets. There are two variants, specified using ALL or DISTINCT, to either retain duplicates or remove duplicates.
7.13 <query expression>
Syntax Rules
6) If UNION, EXCEPT, or INTERSECT is specified and neither ALL nor DISTINCT is specified, then DISTINCT is implicit.
*/
/* 可見(jiàn)SQL2003標(biāo)準(zhǔn)定義了DISTINCT就是union的默認(rèn)值 */
/* 正確查詢,同時(shí)應(yīng)該在兩表的userId字段上做索引以加快查詢速度 */
select count(userId) as cnumber from
(
select userId from td_base_data where userId = '45'
union all
select userId from td_base_data_20090527 where userId = '45'
) as tx;
相關(guān)文章
關(guān)于mysql數(shù)據(jù)庫(kù)連接編碼問(wèn)題
這篇文章主要介紹了關(guān)于mysql數(shù)據(jù)庫(kù)連接編碼問(wèn)題,默認(rèn)的編碼和數(shù)據(jù)庫(kù)表中的數(shù)據(jù)使用的編碼是不一致的,如果是中文,那么在數(shù)據(jù)庫(kù)中執(zhí)行時(shí)已經(jīng)是亂碼了,需要的朋友可以參考下2023-04-04美團(tuán)DB數(shù)據(jù)同步到數(shù)據(jù)倉(cāng)庫(kù)的架構(gòu)與實(shí)踐
今天小編就為大家分享一篇關(guān)于美團(tuán)DB數(shù)據(jù)同步到數(shù)據(jù)倉(cāng)庫(kù)的架構(gòu)與實(shí)踐,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02winxp 安裝MYSQL 出現(xiàn)Error 1045 access denied 的解決方法
自己遇到了這個(gè)問(wèn)題,也找了很久才解決,就整理一下,希望對(duì)大家有幫助!2010-07-07