SQL语句高级技巧

      引言  

        随着计算机在社会各领域应用的深入,软件开发人员不得不面临着或多或少的数据处理、数据库访问。

在SQL(Structured Query Language)语言DML中,有四大语句堪称其精髓部分。下面就讲述一下其中之一, Case When 语句的用法。本文介绍用它实现数据仓库中的维度转换,来将数据展现给分析人员来进行决策支持与分析。

       CASE WHEN  Conition   

                    THEN     。。。

                    ELSE     。。。

                    END

 

 

      数据仓库中的维度转换

        在数据仓库数据展现中,我们通常要用到将数据表进行维度转换。如数据仓库中某一关系模式

            Vehsm (Roadno, Year , Fluxcount,。。。)

        对于数据分析人员来说,他们更想了解某一条高速公路在一段时间内车流量的变化情况,那最好就是将关系表 TB_ADFLUXCOLT 以下面的关系模式来展现

            Vehcount_Trans (Roadno, Year Fluxcount 1, .。。。, Year Fluxcount n)

 

        下面笔者就分别以Case When语句、BrioQuery来分别演示一下如何实现维度转换。

  

 

      Case When语句来实现维度转换

        下面就以DB2数据库为例,以“万能数据库查询分析器” 中文版本《DB 查询分析器》、英文版本《DB Query Analyzer》作为客户端工具来来演示一下Case When 语句如何实现维度转换。

 

 

selectuu.roadno,rr.roadname,

      sum(casewhenuu.year=2009thenuu.FLUXCOUNTelse0endasyear_2009,

      sum(casewhenuu.year=2010thenuu.FLUXCOUNTelse0endasyear_2010,

      sum(casewhenuu.year=2011thenuu.FLUXCOUNTelse0endasyear_2011

from

(

   selectroadno,year(squaddate)asyear,sum(FLUXCOUNT)asFLUXCOUNT

   fromTB_ADFLUXCOLT 

   where  squaddatebetween'2009-01-01'and'2011-12-31'andoiflag=0

   groupbyroadno,year(squaddate)

) uu, 

(

   selectdistinct  roadno,roadname

   fromtb_road  

   wherestatus=0andlevelin(0,1) androadnamenotlike'%南部快速%'

) rr

whereuu.roadno=rr.roadno 

groupbyuu.roadno,rr.roadname

withur;

 

 

 
            图1    DB 查询分析器中输入要执行的Case When语句

 



           图2    DB 查询分析器  执行Case When语句

 

 

  
           图3    DB Query Analyzer 中输入要执行的Case When语句

 

 
           图4    DB Query Analyzer 执行Case When语句

 

 

      BrioQuery来实现维度转换

        在数据仓库工具中,BrioQuery提供了比较强大的数据展现功能,能方便地实现上面的维度转换。

 

 
           图5    BrioQuery   数据表 Vehsm

 

 


            图6    BrioQuery   执行查询后的结果

 

 

           图7    BrioQuery   维度转换后的结果

 

 

        但对于大数据量表的维度转换来说,则几乎无法完成,笔者在中文核心刊物《电信科学》2003年11期《广东电信公话200专用话机话务动态分析系统的构建》文章中,详细地介绍了“广东电信公话200专用话机话务动态分析系统”中是如何实现这一点的,这个话务动态系统是自己以前在广东省电信有限公司工作的时候独自开发的,有兴趣的话,可以看

 

 

        本人的优快云博客的博文:

            “广东电信公话200专用话机话务动态分析系统的构建”

             http://blog.youkuaiyun.com/magenfeng/article/details/7691403

 

    引言  

 

        随着计算机在社会各领域应用的深入,软件开发人员不得不面临着或多或少的数据处理、数据库访问。

        在SQL(Structured Query Language)语言DML中,有四大语句堪称其精髓部分。下面就讲述一下其中之一,

Left Outer Join Left Join |  Right Outer Join |  Right Join |  Inner Join  语句的用法。

 

        内连接:当实现同等连接和非同等连接时,分别使用等于和不等于运算符表示的连接条件,匹配源表和目标表中的行,这些连接称为内连接(inner join)。这个和用select查询多表是一样的效果,所以很少用到;等同于 From a,b where a.X=b.X

语法如下:

        Select <要选择的字段>

        From <主要资料表> 

        inner join < 次要资料表> [On 规则 ] 

 

       外连接:当返回内连接没有包含的行时实现外连接(Outer Join)。外连接分为:左外连接,右外连接,全外连接。left join 是left outer join的简写,left join默认是outer属性的;right join 是right outer join的简写,right join默认是outer属性的。

 

        语法如下:

        Select <要查询的字段>

        From  <<资料表> 

        [Outer] Join <次要资料表>[On 规则 ]  

 

 

 

    本例所用工具简单说明

 

       下面就以MS ACCESS数据库为例,以“万能数据库查询分析器” 中文版本《DB 查询分析器》、英文版本《DB Query Analyzer》作为客户端工具来来演示一下Inner Join 和 Outer Join 语句的用法。

之所以选择“万能数据库查询分析器”作为客户端工具,主要是因为,一方面,“万能数据库查询分析器”具有强大的功能、友好的操作界面、良好的操作性、跨越数据库平台。在《程序员》2007第2期的“新产品&工具点评”部分,编辑“特别推荐”了“万能数据库查询分析器”发布。

       另一方面,截止到目前,中文版本DB查询分析器》在国内最著名的软件下载网站“中关村在线”中下载量近9万次,位居整个数据库类排行谤中前20位。

 

        在OutJoin.mdb 中有三个数据表,本例中用到如下两个:

             Tb_road (AREANO, ROADNO, ROADNAME, STATUS)

               Tb_vehcount (ROADNO, MONTHS, ROADFLUX)

 

       另外:要先使用“控制面板”中“管理工具”下的“数据源(ODBC)”创建数据源OuterJoinAccess ;或者用《DB 查询分析器》/《DB Query Analyzer》中“工具/tools”菜单下的“ODBC数据源管理器/ODBC Data Source Manager”来创建数据源OuterJoinAccess

  

 

 

 

      “万能数据库查询分析器”中文版本《DB查询分析器》为例

 

       下面就以MS ACCESS数据库为例,以“万能数据库查询分析器” 中文版本《DB 查询分析器》在Windows XP上运行,来为客户端工具来来演示一下Outer Join 、 Inner Join 语句的使用。请记住下面的两句话

            A  Left   join Left表明左边的表A是全集

            A  Right  join Right表明右边的表B是全集

 

       运行《DB 查询分析器》,连接上数据源OuterJoinAccess ,用户名与口令均为空(MS ACCESS数据库可不用密码和口令),然后输入以下命令:

select*

fromtb_road  


            tb_road表内容

 

select*

fromtb_ vehcount


            tb_vehcount表内容

 

SELECT a.AREANO, a.ROADNO, a.ROADNAME, a.STATUS, b.ROADNO, b.MONTHS, b.ROADFLUX

FROM tb_road AS a LEFT JOIN tb_vehcount AS b ON a.ROADNO = b.ROADNO;


            Left Join执行结果                        

 

SELECT a.areano, a.roadno, a.roadname, a.status, b.roadno, b.MONTHS, b.ROADFLUX

FROM tb_road AS a RIGHT JOIN tb_vehcount AS b ON a.roadno=b.roadno;


            Right Join执行结果                        

 

SELECT a.areano, a.roadno, a.roadname, a.status, b.roadno, b.MONTHS, b.ROADFLUX

FROM tb_road AS a INNER JOIN tb_vehcount AS b ON a.ROADNO=b.ROADNO;


          
  Inner Join执行结果                        

 

SELECT a.areano, a.roadno, a.roadname, a.status, b.roadno, b.MONTHS, b.ROADFLUX

FROM tb_road AS a, tb_vehcount AS b

where a.ROADNO=b.ROADNO;


          
  select查询多表执行结果                        

 

 

 

 

      “万能数据库查询分析器”英文版本《DB Query Analzyer》为例

 

       下面就以MS ACCESS数据库为例,以“万能数据库查询分析器” 英文版本《DB Query Analyzer》在Windows 2000上运行,来作为客户端工具来来演示一下Outer Join 、 Inner Join 语句的使用。请记住下面的两句话

            A  Left   join Left表明左边的表A是全集

            A  Right  join Right表明右边的表B是全集

 

       运行《DB Query Analyzer》,连接上数据源OuterJoinAccess ,用户名与口令均为空(MS ACCESS数据库可不用密码和口令),然后输入以下命令:

 

select*

fromtb_road

 
          
  tb_road表内容

 

select*

fromtb_ vehcount

             tb_vehcount表内容

 

SELECT a.AREANO, a.ROADNO, a.ROADNAME, a.STATUS, b.ROADNO, b.MONTHS, b.ROADFLUX

FROM tb_road AS a LEFT JOIN tb_vehcount AS b ON a.ROADNO = b.ROADNO;


          
  Left Join执行结果                        

 

SELECT a.areano, a.roadno, a.roadname, a.status, b.roadno, b.MONTHS, b.ROADFLUX

FROM tb_road AS a RIGHT JOIN tb_vehcount AS b ON a.roadno=b.roadno;


          
  Right Join执行结果                        

 

SELECT a.areano, a.roadno, a.roadname, a.status, b.roadno, b.MONTHS, b.ROADFLUX

FROM tb_road AS a INNER JOIN tb_vehcount AS b ON a.ROADNO=b.ROADNO;


          
  Inner Join执行结果                        

 

SELECT a.areano, a.roadno, a.roadname, a.status, b.roadno, b.MONTHS, b.ROADFLUX

FROM tb_road AS a, tb_vehcount AS b

where a.ROADNO=b.ROADNO;


          
  select查询多表执行结   

0       引言  

 

随着计算机在社会各领域应用的深入,软件开发人员不得不面临着或多或少的数据处理、数据库访问。

SQLStructured Query Language)语言DML中,有四大语句堪称其精髓部分。下面就讲述一下其中之一,WITH AS语句的用法。

WITH AS短语,也叫做子查询部分,可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到。有的时候,是为了让SQL语句的可读性更高些,也有可能是在UNION ALL的不同部分,作为提供数据的部分。

特别对于UNION ALL比较有用。因为UNIONALL的每个部分可能相同,但是如果每个部分都去执行一遍的话,则成本太高,所以可以使用WITH AS短语,则只要执行一遍即可。

 

语法如下:

[ WITH table_name ]

AS

(query_definition )

 

 

 

 

1       本例所用工具简单说明

 

下面就以DB2数据库为例,以“万能数据库查询分析器”中文版本《DB查询分析器》、英文版本《DB Query Analyzer》作为客户端工具来来演示一下Inner Join Outer Join语句的用法。

之所以选择“万能数据库查询分析器”作为客户端工具,主要是因为,一方面,“万能数据库查询分析器”具有强大的功能、友好的操作界面、良好的操作性、跨越数据库平台。在《程序员》20072期的“新产品&工具点评”部分,编辑“特别推荐”了“万能数据库查询分析器”发布。

另一方面,截止到目前,中文版本DB查询分析器》在国内最著名的软件下载网站“中关村在线”中下载量近9万次,位居整个数据库类排行谤中前20位。

 

 

 

  

2       “万能数据库查询分析器”中文版本《DB查询分析器》为例

 

下面就以DB2数据库为例,以“万能数据库查询分析器”英文版本《DB查询分析器》Windows XP上运行,来作为客户端工具来来演示一下With As结合Outer Join Inner Join语句的使用。 

 

运行《DB查询分析器》,连接上数据源unit4_2,然后输入以下命令:

 

with w_XROADLEVELas

(

   select *from TB_XROADLEVELwhere (areano,roadno)in

   (select areano,roadnofrom tb_roadwhere level=2)

select u.incroadno,r.roadname,squaddate,

sum(casewhen u.areano=4407and u.outroadno= 1then unpaymoney/100.0else 0end)as out__1,

sum(casewhen u.areano=4407and u.outroadno= 2then unpaymoney/100.0else 0end)as out__2,

sum(casewhen u.areano=4407and u.outroadno= 17then unpaymoney/100.0else 0end)as out_17,

sum(casewhen u.areano=4407and u.outroadno= 22then unpaymoney/100.0else 0end)as out_22,

sum(casewhen u.areano=4407and u.outroadno= 27then unpaymoney/100.0else 0end)as out_27,

sum(casewhen u.areano=4407and u.outroadno= 37then unpaymoney/100.0else 0end)as out_37,

sum(casewhen u.areano=4407and u.outroadno= 40then unpaymoney/100.0else 0end)as out_40,

sum(casewhen u.areano=4407and u.outroadno= 41then unpaymoney/100.0else 0end)as out_41,

sum(casewhen u.areano=4407and u.outroadno= 48then unpaymoney/100.0else 0end)as out_48,

sum(casewhen u.areano=4407and u.outroadno= 49then unpaymoney/100.0else 0end)as out_49,

sum(casewhen u.areano=4407and u.outroadno= 50then unpaymoney/100.0else 0end)as out_50,

sum(casewhen u.areano=4407and u.outroadno= 57then unpaymoney/100.0else 0end)as out_57,

sum(casewhen u.areano=4407and u.outroadno= 58then unpaymoney/100.0else 0end)as out_58,

sum(casewhen u.areano=4407and u.outroadno= 60then unpaymoney/100.0else 0end)as out_60,

sum(casewhen u.areano=4407and u.outroadno= 63then unpaymoney/100.0else 0end)as out_63,

sum(casewhen u.areano=4407and u.outroadno= 70then unpaymoney/100.0else 0end)as out_70,

sum(casewhen u.areano=4407and u.outroadno= 71then unpaymoney/100.0else 0end)as out_71,

sum(casewhen u.areano=4407and u.outroadno= 75then unpaymoney/100.0else 0end)as out_75,

sum(casewhen u.areano=4407and u.outroadno= 80then unpaymoney/100.0else 0end)as out_80,

sum(casewhen u.areano=4407and u.outroadno= 83then unpaymoney/100.0else 0end)as out_83,

sum(casewhen u.areano=4407and u.outroadno= 84then unpaymoney/100.0else 0end)as out_84,

sum(casewhen u.areano=4407and u.outroadno=262then unpaymoney/100.0else 0end)as out262,

sum(casewhen u.areano=4407and u.outroadno=263then unpaymoney/100.0else 0end)as out263,

sum(casewhen u.areano=4407and u.outroadno=264then unpaymoney/100.0else 0end)as out264,

sum(casewhen u.areano=4407and u.outroadno=265then unpaymoney/100.0else 0end)as out265,

sum(casewhen u.areano=4407and u.outroadno=266then unpaymoney/100.0else 0end)as out266,

sum(casewhen u.areano=4407and u.outroadno=267then unpaymoney/100.0else 0end)as out267,

sum(casewhen u.areano=4407and u.outroadno=268then unpaymoney/100.0else 0end)as out268,

sum(casewhen u.areano=4407and u.outroadno=269then unpaymoney/100.0else 0end)as out269,

sum(casewhen u.areano=4407and u.outroadno=272then unpaymoney/100.0else 0end)as out272,

sum(casewhen u.areano=4407and u.outroadno=273then unpaymoney/100.0else 0end)as out273 

from

(

 select a.areano,a.SquadDate,a.unpaymoney,

       case ri.levelwhen 0then a.incroadnowhen 3then xi.roadno

            endas incroadno,

 

       case ro.levelwhen 0then a.outroadnowhen 3then xo.roadno

            endas outroadno

 from w_unpay_veh a

 innerjoin tb_road rion a.areano=ri.areanoand a.incroadno=ri.roadno

 innerjoin tb_road roon a.areano=ro.areanoand a.outroadno=ro.roadno

 leftouterjoin w_XROADLEVEL xion xi.areano=a.areanoand xi.SUBROADNO=a.incroadno

 leftouterjoin w_XROADLEVEL xoon xo.areano=a.areanoand xo.SUBROADNO=a.outroadno

 where SQUADDATE>='2012-08-01' and SQUADDATE<'2012-09-01'

)as u, tb_road r

where r.areano=4407and u.areano=r.areanoand u.incroadno=r.roadno

groupby u.incroadno,r.roadname,squaddateorderby u.incroadno,squaddate;

 

          1  输入SQL语句,准备执行(一)

 

 

          2  输入SQL语句,准备执行(二)

 

 

 

           3  执行结果                        

 

 

 

3       万能数据库查询分析器英文版本《DB Query Analzyer》为例

 

下面就以DB2数据库为例,以“万能数据库查询分析器”英文版本《DB Query Analyzer》在Windows 2000上运行,来作为客户端工具来来演示一下With As结合Outer Join Inner Join语句的使用。 

 

运行《DB Query Analyzer》,连接上数据源unit4_2,然后输入以下命令:

 

with w_XROADLEVELas

(

   select *from TB_XROADLEVELwhere (areano,roadno)in

   (select areano,roadnofrom tb_roadwhere level=2)

select u.incroadno,r.roadname,squaddate,

sum(casewhen u.areano=4407and u.outroadno= 1then unpaymoney/100.0else 0end)as out__1,

sum(casewhen u.areano=4407and u.outroadno= 2then unpaymoney/100.0else 0end)as out__2,

sum(casewhen u.areano=4407and u.outroadno= 17then unpaymoney/100.0else 0end)as out_17,

sum(casewhen u.areano=4407and u.outroadno= 22then unpaymoney/100.0else 0end)as out_22,

sum(casewhen u.areano=4407and u.outroadno= 27then unpaymoney/100.0else 0end)as out_27,

sum(casewhen u.areano=4407and u.outroadno= 37then unpaymoney/100.0else 0end)as out_37,

sum(casewhen u.areano=4407and u.outroadno= 40then unpaymoney/100.0else 0end)as out_40,

sum(casewhen u.areano=4407and u.outroadno= 41then unpaymoney/100.0else 0end)as out_41,

sum(casewhen u.areano=4407and u.outroadno= 48then unpaymoney/100.0else 0end)as out_48,

sum(casewhen u.areano=4407and u.outroadno= 49then unpaymoney/100.0else 0end)as out_49,

sum(casewhen u.areano=4407and u.outroadno= 50then unpaymoney/100.0else 0end)as out_50,

sum(casewhen u.areano=4407and u.outroadno= 57then unpaymoney/100.0else 0end)as out_57,

sum(casewhen u.areano=4407and u.outroadno= 58then unpaymoney/100.0else 0end)as out_58,

sum(casewhen u.areano=4407and u.outroadno= 60then unpaymoney/100.0else 0end)as out_60,

sum(casewhen u.areano=4407and u.outroadno= 63then unpaymoney/100.0else 0end)as out_63,

sum(casewhen u.areano=4407and u.outroadno= 70then unpaymoney/100.0else 0end)as out_70,

sum(casewhen u.areano=4407and u.outroadno= 71then unpaymoney/100.0else 0end)as out_71,

sum(casewhen u.areano=4407and u.outroadno= 75then unpaymoney/100.0else 0end)as out_75,

sum(casewhen u.areano=4407and u.outroadno= 80then unpaymoney/100.0else 0end)as out_80,

sum(casewhen u.areano=4407and u.outroadno= 83then unpaymoney/100.0else 0end)as out_83,

sum(casewhen u.areano=4407and u.outroadno= 84then unpaymoney/100.0else 0end)as out_84,

sum(casewhen u.areano=4407and u.outroadno=262then unpaymoney/100.0else 0end)as out262,

sum(casewhen u.areano=4407and u.outroadno=263then unpaymoney/100.0else 0end)as out263,

sum(casewhen u.areano=4407and u.outroadno=264then unpaymoney/100.0else 0end)as out264,

sum(casewhen u.areano=4407and u.outroadno=265then unpaymoney/100.0else 0end)as out265,

sum(casewhen u.areano=4407and u.outroadno=266then unpaymoney/100.0else 0end)as out266,

sum(casewhen u.areano=4407and u.outroadno=267then unpaymoney/100.0else 0end)as out267,

sum(casewhen u.areano=4407and u.outroadno=268then unpaymoney/100.0else 0end)as out268,

sum(casewhen u.areano=4407and u.outroadno=269then unpaymoney/100.0else 0end)as out269,

sum(casewhen u.areano=4407and u.outroadno=272then unpaymoney/100.0else 0end)as out272,

sum(casewhen u.areano=4407and u.outroadno=273then unpaymoney/100.0else 0end)as out273 

from

(

 select a.areano,a.SquadDate,a.unpaymoney,

       case ri.levelwhen 0then a.incroadnowhen 3then xi.roadno

            endas incroadno,

 

       case ro.levelwhen 0then a.outroadnowhen 3then xo.roadno

            endas outroadno

 from w_unpay_veh a

 innerjoin tb_road rion a.areano=ri.areanoand a.incroadno=ri.roadno

 innerjoin tb_road roon a.areano=ro.areanoand a.outroadno=ro.roadno

 leftouterjoin w_XROADLEVEL xion xi.areano=a.areanoand xi.SUBROADNO=a.incroadno

 leftouterjoin w_XROADLEVEL xoon xo.areano=a.areanoand xo.SUBROADNO=a.outroadno

 where SQUADDATE>='2012-08-01' and SQUADDATE<'2012-09-01'

)as u, tb_road r

where r.areano=4407and u.areano=r.areanoand u.incroadno=r.roadno

groupby u.incroadno,r.roadname,squaddateorderby u.incroadno,squaddate;

 

          1  输入SQL语句,准备执行(一)

   

 

          2  输入SQL语句,准备执行(二)

 

 

          3  执行结果                        

0       引言  

随着计算机在社会各领域应用的深入,软件开发人员不得不面临着或多或少的数据处理、数据库访问。

SQLStructured Query Language)语言DML中,有四大语句堪称其精髓部分。下面就讲述一下其中之一,UNIONUNION ALL语句的用法。

UNION 操作符用于合并两个或多个SELECT语句的结果集。

请注意,UNION内部的SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条SELECT 语句中的列的顺序必须相同。

 

UNION 语法如下:

SELECT column1, column2,…, columnX

FROM table_name1

UNION

SELECT column1, column2,…, columnX

FROM table_name2

   

UNION  ALL语法如下:

SELECT column1, column2,…, columnX

FROM table_name1

UNION ALL

SELECT column1, column2,…, columnX

FROM table_name2

   

   UNIONUNION ALL区别

        UNION操作符选取不同的值,即UNION是去了重的。如果允许重复的值,请使用UNION ALL

   

 

 

1       本例所用工具简单说明

下面就以DB2数据库为例,以“万能数据库查询分析器”中文版本《DB查询分析器》、英文版本《DB Query Analyzer》作为客户端工具来来演示一下Inner JoinOuter Join 语句的用法。

之所以选择“万能数据库查询分析器”作为客户端工具,主要是因为,一方面,“万能数据库查询分析器”具有强大的功能、友好的操作界面、良好的操作性、跨越数据库平台。在《程序员》20072期的“新产品&工具点评”部分,编辑“特别推荐”了“万能数据库查询分析器”发布。

另一方面,截止到目前,中文版本DB查询分析器》在国内最著名的软件下载网站“中关村在线”中下载量近9万次,位居整个数据库类排行谤中前20位。

 

  

 

2       建立MYSQL数据库的ODBC数据源UNION_MYSQL

   《DB 查询分析器》是通过ODBC数据源来访问各种数据库及EXCEL的,所以首先要建立要访问的数据库或EXCEL的ODBC数据源。如果您的主机上没有对应数据库的ODBC驱动程序,那您还要下载(通常该数据库厂家的官方网站上都提供有ODBC驱动程序下载)安装对应数据库的ODBC驱动程序,然后再建立相应的ODBC数据源。

 

 

 

 

3       “万能数据库查询分析器”中文版本《DB查询分析器》为例

下面就以MYSQL数据库为例,以“万能数据库查询分析器”中文版本《DB查询分析器》在Windows XP上运行,来作为客户端工具来来演示一下UNIONUNION ALL语句的使用。

运行《DB Query Analyzer》,连接上数据源UnionAccess,用户名与口令均为空(MS ACCESS数据库可不用密码和口令),然后输入以下命令:

需要注意的是,TB_area数据表本身就有重复记录

 

 

SELECT    AREANO,AREANAME,AREASERVERIP

FROM  `tb_area`   

  1     Tb_area表内容

 

SELECT    "AREANO", "AREANAME", "AREASERVERIP"

FROM  "Tb_area2"  


          2      Tb_area2表内容

 

SELECT    AREANO,AREANAME,AREASERVERIP

FROM  `tb_area` 

UNION

SELECT    AREANO,AREANAME,AREASERVERIP

FROM  `tb_area2`   


           3  两个表Union执行结果                        

    

SELECT    AREANO,AREANAME,AREASERVERIP

FROM  `tb_area` 

UNION ALL

SELECT    AREANO,AREANAME,AREASERVERIP

FROM  `tb_area2`   


           4   Union all执行结果                        

 

大家想一下tb_area本身就有重复记录那如果是tb_area自身Union结果会是怎么样???

 SELECT    "AREANO", "AREANAME", "AREASERVERIP"

FROM  "Tb_area" 

UNION

SELECT    "AREANO", "AREANAME", "AREASERVERIP"

FROM  "Tb_area" 


           5  同一个表Union执行结果                                      

 

 

 

 

4       万能数据库查询分析器英文版本《DB Query Analzyer》为例

下面就以MS ACCESS数据库为例,以“万能数据库查询分析器”英文版本《DB Query Analyzer》在Windows 2000上运行,来作为客户端工具来来演示一下UNIONUNION ALL语句的使用。

运行《DB Query Analyzer》,连接上数据源UnionAccess,用户名与口令均为空(MS ACCESS数据库可不用密码和口令),然后输入以下命令:

需要注意的是,TB_area数据表本身就有重复记录

 

SELECT    "AREANO", "AREANAME", "AREASERVERIP"

FROM  "Tb_area"  


   1     Tb_area表内容

 

SELECT    "AREANO", "AREANAME", "AREASERVERIP"

FROM  "Tb_area2"  


           2     Tb_area2表内容

 

SELECT    "AREANO", "AREANAME", "AREASERVERIP"

FROM  "Tb_area" 

UNION

SELECT    "AREANO", "AREANAME", "AREASERVERIP"

FROM  "Tb_area2" 


           3  两个表Union执行结果                        

    

SELECT    "AREANO", "AREANAME", "AREASERVERIP"

FROM  "Tb_area" 

UNIONALL

SELECT    "AREANO", "AREANAME", "AREASERVERIP"

FROM  "Tb_area2" 


           4   Union all执行结果                        

 

大家想一下tb_area本身就有重复记录那如果是tb_area自身Union结果会是怎么样???

 SELECT    "AREANO", "AREANAME", "AREASERVERIP"

FROM  "Tb_area" 

UNION

SELECT    "AREANO", "AREANAME", "AREASERVERIP"

FROM  "Tb_area" 


           5  同一个表Union执行结果                      

 

由于篇幅原因,在OracleSybaseMS SQL ServerInformix数据库上的操作就不再赘述,有兴趣的朋友自己可以去操作一下。

DB查询分析器》使用技巧 系列:

 

《DB 查询分析器》使用技巧之(一)

http://blog.youkuaiyun.com/magenfeng/article/details/7189174

 

《DB 查询分析器》使用技巧之(二)

http://blog.youkuaiyun.com/magenfeng/article/details/7189176

 

《DB 查询分析器》使用技巧之(三)

http://blog.youkuaiyun.com/magenfeng/article/details/7192402

 

《DB 查询分析器》使用技巧之(四)

http://blog.youkuaiyun.com/magenfeng/article/details/7195059

 

《DB 查询分析器》使用技巧之(五)

http://blog.youkuaiyun.com/magenfeng/article/details/7196846

 

《DB 查询分析器》使用技巧之(六)

http://blog.youkuaiyun.com/magenfeng/article/details/7164432

 

《DB 查询分析器》使用技巧之(七)

http://blog.youkuaiyun.com/magenfeng/article/details/7197934 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值