• 用“万能数据库查询分析器”测试SQLite对4大SQL精髓语句的支持


    用“万能数据库查询分析器”测试 SQLite 对4大SQL精髓语句的支持

                                                         马根峰

         (广东联合电子收费股份有限公司,广州 510300)

     

     

    作者博客:

    CSDN博客:http://blog.csdn.net/magenfeng

    新浪博客: http://blog.sina.com.cn/magenfeng

    QQ空间: http://user.qzone.qq.com/630414817/main#!

     

     

     

     

     

    0       引言 

     

    SQLite,是一款轻型的数据库,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,比如现在最常见的安卓Android系统中。

     

    SQLStructured Query Language)语言DML中,有四大语句堪称其精髓部分,分别是CASE WHEN语句,Left Outer Join | Left Join | Right Outer Join |  Right Join | Inner Join语句WITH AS语句UNIONUNION ALL语句

     

    本人分别在“软件开发高手须掌握的4SQL精髓语句(一)”至“软件开发高手须掌握的4SQL精髓语句(四)、“软件开发高手须掌握的4SQL精髓语句(综合篇)5篇博文中进行了详细的阐述。

     

    本篇博文本人将用“万能数据库查询分析器”的中英文版本,来测评一下SQLite对上述4大精髓SQL的支持情况,以及用“万能数据库查询分析器”将SQLite查询的结果灵活地用拷贝、导出EXCEL中,来方便用户的办公处理。

      

     

     

     

     

    1       本例所用工具简单说明

     

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

     

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

     

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

     

            百度上搜索“万能数据库查询分析器”结果超过300万条

     

    本例所用SQLite版本: 3.37

           SQLite ODBC驱动程序版本:SQLite 3.5.7 ODBC driver

          DB查询分析器》版本: 2.02

          DB Query Analyzer》版本 2.02

     

     

     

     

     

      

    2       建立SQLite数据库的 ODBC数据源mgf_sqlite8

     

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

     

      下图是用来创建ODBC数据源mgf_sqlite8

     

     

                    

     

     

     

     

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

     

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

     

    运行《DB Query Analyzer》,连接上数据源mgf_sqlite8,用户名与口令均为空,然后输入以下命令:

     

    SELECT   AREANO,(casewhen AREANO=4405then '粤北区域' 

                          when AREANO=4406then '粤东区域' end) as Areaname,

             ROADNO,ROADNAME

    FROM TB_ROAD 

    WHERE AREANOIN (4405,4406)

    ;

              1     执行 Case When语句

     

    SELECT a.Areano,a.Areaname,b.roadno,b.roadname

    FROM (SELECT *FROM tb_areaWHERE AREANOIN (4402,4403,4405,4407) ) a

        LEFTJOIN (SELECT *FROM tb_roadWHERE AREANOIN (4405,4406) )  b

     ON a.areano=b.areano

    ;

              2     执行Left Join 语句

     

    SELECT a.Areano,a.Areaname,b.roadno,b.roadname

    FROM (SELECT *FROM tb_areaWHERE AREANOIN (4405) ) a

        RIGHTJOIN (SELECT *FROM tb_roadWHERE AREANOIN (4405,4406) )  b

     ON a.areano=b.areano

    ;

               3  执行Right Join 语句,表明SQLite不支持Right Join语句                        

     

    SELECT a.Areano,a.Areaname,b.roadno,b.roadname

    FROM (SELECT *FROM tb_areaWHERE AREANOIN (4405) ) a

        INNERJOIN (SELECT *FROM tb_roadWHERE AREANOIN (4405,4406) )  b

     ON a.areano=b.areano

    ;

               4  执行Inner Join 语句                        

     

    with v_area as

    (

    select *

    from tb_area

    where areano=4402

    )

    select *

    from tb_area aleftjoin  tb_road b

     on a.areano=b.areano

    ;

              5  执行With as 语句,表明SQLite不支持 With as语句                                      

     

    SELECT   areano,areaname

    FROM TB_AREA 

    WHERE AREANOIN (4402,4405,4406,4407)

    UNION

    SELECT   areano,areaname

    FROM TB_AREA 

    WHERE AREANOIN (4402,4405,4406,4407)

    ;

              6  执行Union语句                        

     

    SELECT   areano,areaname

    FROM TB_AREA 

    WHERE AREANOIN (4402,4405,4406,4407)

    UNIONALL

    SELECT   areano,areaname

    FROM TB_AREA 

    WHERE AREANOIN (4402,4405,4406,4407)

    ;

     

              7  执行Union All 语句                        

     

     

              8  执行结果导出到 .csv文件中,用EXCEL打开                        

     

                       

     

     

     

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

     

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

     

    运行《DB Query Analyzer》,连接上数据源mgf_sqlite8,用户名与口令均为空,然后输入以下命令:

     

     

    SELECT   AREANO,(casewhen AREANO=4405then '粤北区域' 

                          when AREANO=4406then '粤东区域' end) as Areaname,

             ROADNO,ROADNAME

    FROM TB_ROAD 

    WHERE AREANOIN (4405,4406)

    ;

              1     执行 Case When语句

     

    SELECT a.Areano,a.Areaname,b.roadno,b.roadname

    FROM (SELECT *FROM tb_areaWHERE AREANOIN (4402,4403,4405,4407) ) a

        LEFTJOIN (SELECT *FROM tb_roadWHERE AREANOIN (4405,4406) )  b

     ON a.areano=b.areano

    ;

              2     执行Left Join 语句

     

    SELECT a.Areano,a.Areaname,b.roadno,b.roadname

    FROM (SELECT *FROM tb_areaWHERE AREANOIN (4405) ) a

        RIGHTJOIN (SELECT *FROM tb_roadWHERE AREANOIN (4405,4406) )  b

     ON a.areano=b.areano

    ;

              3  执行Right Join 语句,表明SQLite不支持Right Join语句                        

     

    SELECT a.Areano,a.Areaname,b.roadno,b.roadname

    FROM (SELECT *FROM tb_areaWHERE AREANOIN (4405) ) a

        INNERJOIN (SELECT *FROM tb_roadWHERE AREANOIN (4405,4406) )  b

     ON a.areano=b.areano

    ;

              4  执行Inner Join 语句                        

     

    with v_area as

    (

    select *

    from tb_area

    where areano=4402

    )

    select *

    from tb_area aleftjoin  tb_road b

     on a.areano=b.areano

    ;

              5  执行With as 语句,表明SQLite不支持 With as语句                                      

     

    SELECT   areano,areaname

    FROM TB_AREA 

    WHERE AREANOIN (4402,4405,4406,4407)

    UNION

    SELECT   areano,areaname

    FROM TB_AREA 

    WHERE AREANOIN (4402,4405,4406,4407)

    ;

              6  执行Union语句                        

     

    SELECT   areano,areaname

    FROM TB_AREA 

    WHERE AREANOIN (4402,4405,4406,4407)

    UNIONALL

    SELECT   areano,areaname

    FROM TB_AREA 

    WHERE AREANOIN (4402,4405,4406,4407)

    ;

     

              7  执行Union All 语句                        

     

     

              8  执行结果导出到 .csv文件中,用EXCEL打开                        

     

               

     

     

     

    5       结论

     

    SQLite数据库支持CASE WHEN语句、Left Outer Join |  Left Join |  Inner Join语句,,UNIONUNION ALL语句,不支持 Right Outer Join | Right JoinWITH AS语句

     

      本人在执行过程中,发现由于SQLite数据ODBC驱动程序中的有些问题导致出“万能数据库查询分析器”一次执行多条SQL语句时,会出现第二条SQL语句执行出现问题。

     

    这在以前测试过的ORACLESYBASEDB2INFORMIXMS SQL SERVERMS ACCESSParadoxEXCEL中是没有出现过的,所以强烈建议大家在一次选中一条SQL语句或者只输入一条SQL语句来执行

     

     

     

     

     

    软件开发高手须掌握的4SQL精髓语句 系列:

     

    软件开发高手须掌握的4SQL精髓语句(综合篇)

    http://blog.csdn.net/magenfeng/article/details/8126418  

     

    软件开发高手须掌握的4SQL精髓语句(四)

    http://blog.csdn.net/magenfeng/article/details/8050612 

     

    软件开发高手须掌握的4SQL精髓语句(三)

    http://blog.csdn.net/magenfeng/article/details/8015093

     

    软件开发高手须掌握的4SQL精髓语句(二)

    http://blog.csdn.net/magenfeng/article/details/8003558

     

    软件开发高手须掌握的4SQL精髓语句(一)

    http://blog.csdn.net/magenfeng/article/details/7969385

     

     

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

     

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

    http://blog.csdn.net/magenfeng/article/details/7189174

     

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

    http://blog.csdn.net/magenfeng/article/details/7189176

     

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

    http://blog.csdn.net/magenfeng/article/details/7192402

     

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

    http://blog.csdn.net/magenfeng/article/details/7195059

     

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

    http://blog.csdn.net/magenfeng/article/details/7196846

     

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

    http://blog.csdn.net/magenfeng/article/details/7164432

     

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

    http://blog.csdn.net/magenfeng/article/details/7197934

     

     

    《程序员》“特别推荐”了“万能数据库查询分析器”:

     

    在《程序员》20072期的“新产品&工具点评”部分,编辑“特别推荐”了“万能数据库查询分析器”发布。

    http://blog.csdn.net/magenfeng/article/details/7192368

     

     

     

    “万能数据库查询分析器”所获得的成果

     

    自己开发的“万能数据库查询分析器”终于有了较大的成果

    http://blog.csdn.net/magenfeng/article/details/8079396

     

    

  • 相关阅读:
    JS中attribute和property的区别
    px(像素)、pt(点)、ppi、dpi、dp、sp之间的关系
    计算几何
    动态凸包
    斜率DP题目
    斜率DP个人理解
    后缀数组题目
    CF#190DIV.1
    MANACHER---求最长回文串
    扩展KMP题目
  • 原文地址:https://www.cnblogs.com/wuyida/p/6300802.html
Copyright © 2020-2023  润新知