• 联接查询


    一、交叉联接(纯粹的联接查询)
         只进行笛卡尔积操作

         Customers表中的原始数据:

         

         Employees表中的原始数据:

         

         进行交叉联接:

    1 use edisondb;
    2  select C.custid as '顾客号', E.empid as '售货员号'
    3  from customers as C
    4 CROSS JOIN employees as E
    5 ;

         查询结果如下:

        

    重要习惯:在使用联接查询时,尽可能使用“表别名.列名”的形式,这样可有效区分不同表中列名相同的列

    二、内联接=交叉联接+条件过滤  

     1.简单内联接

    1 use edisondb;
    2  select C.custid as '顾客号', E.empid as '售货号'
    3 from customers as C
    4 JOIN employees as E
    5 ON C.age=E.age
    6 ;

       查询结果如下:

      

       执行步骤:a)进行交叉联接操作,得到如下“中间数据集”:

                         

                      b)对以上“中间数据集”进行条件过滤,选出C.age=E.age的行,按适当形式输出

                         

     2.组合联接

        实际上就是有多个行过滤条件

    1 use edisondb;
    2 select C.custid as '顾客号', E.empid as '售货号'
    3 from customers as C
    4 JOIN employees as E
    5 ON C.age=E.age and C.country=E.country
    6 ;

       查询结果如下:

      

      执行步骤:a)进行交叉联接操作,得到如下“中间数据集”:

                       

                     b)对以上“中间数据集”进行条件过滤,选出C.age=E.age 且 C.country=E.country 的行,按适当形式输出

                       

     3.多表联接

       新增一张Region表中数据如下:

      

       进行多表联接查询:

    1 use edisondb;
    2 select C.custid as '顾客号', E.empid as '售货员号',R.country as '售货员号有效国家'
    3 from customers as C
    4 JOIN employees as E
    5 ON C.age=E.age
    6 JOIN region as R
    7 ON E.country=R.country
    8 ;
       查询结果如下:

      

      执行步骤:1)先对前面两张表进行简单内联接操作,得到数据集如下(省略一步“中间数据集”):

                        

                        注:可以将其视作一张新的表,再与第三张表进行简单内联接操作

                      2)将上面得到的数据集与第Region表进行简单内联接操作

                         步骤:a)进行交叉联接操作,得到如下“中间数据集”:

                                  

                                  b) 对以上“中间数据集”进行条件过滤,选出E.country=R.country的行,按适当形式输出

                                  

    三、外联接=交叉联接+条件过滤+添加外部行 

    1.左联接(添加左边表中未出现在“中间数据集”中的行)
    进行左联接查询:
    1 use edisondb;
    2 select *
    3 from customers as C
    4 LEFT OUTER JOIN employees as E
    5 ON C.age=E.age and C.country=E.country
    6 ;
    查询结果如下:


    执行步骤:1)先进行简单内联接操作,得到数据集如下(省略一步“中间数据集”):


    2)对照左边表Employee表,找到未出现在“中间数据集”中的行,添加进“中间数据集”,空列用NULL填充


    2.右联接(添加右边表中未出现在“中间数据集”中的行)
       略,和左联接相似


  • 相关阅读:
    【2017.12.02普及组模拟】送快递
    【NOIP2013模拟联考7】OSU
    顺序表元素位置倒置示例c++实现
    c++字符串排序
    JAVA实现四则运算的简单计算器
    JAVA图形小动画之简单行星运动
    JAVA多线程编程
    ege图形库之简单贪吃蛇(c++)
    ege图形库之动画排序
    c语言中一种典型的排列组合算法
  • 原文地址:https://www.cnblogs.com/edisonfeng/p/2091811.html
Copyright © 2020-2023  润新知