zoukankan      html  css  js  c++  java
  • JOIN用法

    GPS平台、网站建设、软件开发、系统运维,找森大网络科技!
    https://cnsendnet.taobao.com
    来自森大科技官方博客
    http://www.cnsendblog.com/index.php/?p=2044

    昨天搞培训老颉将了数据库和SQL的一些知识,大部分还是明白的,对SQL的连接部分不是很清楚,今天彻底搞明白它算了,学习ing...

    1. INNER JOIN

    内连接,返回多个表中符合条件的数据而舍弃不符合条件的数据。

    Run:

    SELECT *
    FROM TABLE_POICATE1 C1 INNER JOIN TABLE_POICATE2 C2
    ON C1.CATE1_CODE=C2.CATE1_CODE INNER JOIN TABLE_POICATE3 C3
    ON C2.CATE1_CODE=C3.CATE1_CODE AND C2.CATE2_CODE=C3.CATE2_CODE
    WHERE C3.CATE1_CODE="04" AND C3.CATE2_CODE="02" AND C3.CATE3_CODE="03";

    <=>

    SELECT *
    FROM TABLE_POICATE1 C1, TABLE_POICATE2 C2, TABLE_POICATE3 C3
    WHERE C3.CATE1_CODE=C2.CATE1_CODE AND C3.CATE2_CODE=C2.CATE2_CODE AND
    C2.CATE1_CODE=C1.CATE1_CODE
    AND (C3.CATE1_CODE="04" AND C3.CATE2_CODE="02" AND C3.CATE3_CODE="03");

    Result:

    04 金融机构 JRJG 04 02 政策性银行 ZCXYH 04 02 03 中国农业发展银行 ZGNYFZYH

    按我们需要的格式联接起来:

    Run:

    SELECT C1.CATE1_NAME || "/" || C2.CATE2_NAME || "/" || C3.CATE3_NAME AS CATENAME
    FROM TABLE_POICATE1 C1 INNER JOIN TABLE_POICATE2 C2
    ON C1.CATE1_CODE=C2.CATE1_CODE INNER JOIN TABLE_POICATE3 C3
    ON C2.CATE1_CODE=C3.CATE1_CODE AND C2.CATE2_CODE=C3.CATE2_CODE
    WHERE C3.CATE1_CODE="04" AND C3.CATE2_CODE="02" AND C3.CATE3_CODE="03";

    Result:

    金融机构/政策性银行/中国农业发展银行

    2.OUTER JOIN

    2.1. LEFT OUTER JOIN/LEFT JOIN

    左连接,返回所有匹配行并从join左边表中返回所有不匹配的行,右边表用null填充

    Run:

    SELECT *
    FROM TABLE_POICATE1 C1 RIGHT JOIN TABLE_POICATE2 C2
    ON C2.CATE1_CODE=C1.CATE1_CODE

    Result:

    02 政府机构 ZFJG 02 04 边检机关 BJJG
    02 政府机构 ZFJG 02 05 涉外机构 SWJG
    02 政府机构 ZFJG 02 06 驻地机构 ZDJG
    02 政府机构 ZFJG 02 07 民主党派 MZDP
    ...

    Run:

    代码

    SELECT C3.CATE1_CODE,C3.CATE2_CODE,C3.CATE3_CODE,C1.CATE1_NAME,C2.CATE2_NAME,C3.CATE3_NAME
    FROM TABLE_POICATE1 C1 LEFT JOIN TABLE_POICATE2 C2
    ON C1.CATE1_CODE=C2.CATE1_CODE LEFT JOIN TABLE_POICATE3 C3
    ON C2.CATE1_CODE=C3.CATE1_CODE AND C2.CATE2_CODE=C3.CATE2_CODE

    Result:

     

    07 05 99 工商企业 纺织服装 其它
    07 06 01 工商企业 电子电器 电子电器
    07 06 02 工商企业 电子电器 电工照明
    07 06 99 工商企业 电子电器 其它
    07 07 01 工商企业 仪表仪器 仪表仪器
    07 07 99 工商企业 仪表仪器 其它
    ...

     

    这个得出的列表就是正常情况下我们一般需要的结果了。。。

    在一类表中插入17门址类,再连接。。。

    99 其它 QT 99 99 其它 QT
    17 门址 mz {null} {null} {null} {null}

    2.2. RIGHT OUTER JOIN/RIGHT JOIN

    右连接,返回所有匹配行并从join右边表返回所有不匹配行,左边表没有的用null填充

    其实它就是刚好和左连接对称啦

    2.3. FULL OUTER JOIN/FULL JOIN

    全连接,返回所有匹配的行和不匹配的行。

    SQLite不支持右连接和全连接

    NND,就不测试了,反正结果已经知道了。

    3. CROSS JOIN

    交叉连接,返回笛卡尔积

    SELECT * FROM TABLE_CATE1 CROSS JOIN TABLE_CATE2

    <=>

    SELECT * FROM TABLE_CATE1, TABLE_CATE2

    如果TABLE_CATE1有m行,TABLE_CATE2有n行,那返回的结果是m×n行的。

    4. 自连接

    自己练自己喽,好像不叫self join。。。

    下面是我现学现卖在霏凡上举给别人的例子:

    一家有三代人,这三代之间肯定是父子关系无疑吧?

    1、三代人关系:

    张爷爷 -> 张爸爸 -> 张儿子

    2、做成表(test)来反映

    名字 他爹 他儿子

    --------------------------------

    张爷爷 null 张爸爸

    张爸爸 张爷爷 张儿子

    张儿子 张爸爸 null

    3、用SQL查这家的树形关系图

    SELECT A.名字 AS 老爸, B.名字 AS 儿子
    FROM test A  JOIN test B
    ON A.他儿子=B.他爹

    结果:

    老爸 儿子

    --------------------

    张爷爷 张爸爸

    张爸爸 张儿子

    -END-

    GPS平台、网站建设、软件开发、系统运维,找森大网络科技!
    https://cnsendnet.taobao.com
    来自森大科技官方博客
    http://www.cnsendblog.com/index.php/?p=2044

  • 相关阅读:
    Linux驱动下的platform总线架构(转)
    一生中很值得看的30个故事之一断箭
    学习嵌入式LINUX系统的笔记和体会
    DIY:自己动手做一个迷你 Linux 系统
    linux里面i386 i686 i486 i586代表什么?是什么意思
    菜鸟编译Linux内核
    LINUX核心重编与升级
    ARM 内核移植中常见的错误
    Linux 2.6.19.x 内核编译配置选项简介
    基于S3C2410平台移植Linux 2.6内核指南
  • 原文地址:https://www.cnblogs.com/cnsend/p/15542280.html
Copyright © 2011-2022 走看看