zoukankan      html  css  js  c++  java
  • 数据库中join的用法(on、left。right)

    Table A 
    aid   adate 
    1      a1 
    2      a2 
    3      a3

    TableB

    bid bdate 
    1    b1 
    2   b2 
    4    b4 
    两个表a,b相连接,要取出id相同的字段 
    select * from a inner join b on a.aid = b.bid这是仅取出匹配的数据. 
    此时的取出的是: 
    1 a1 b1 
    2 a2 b2 

    那么left join 指: 
    select * from a left join b on a.aid = b.bid 
    首先取出a表中所有数据,然后再加上与a,b匹配的的数据 
    此时的取出的是: 
    1 a1 b1 
    2 a2 b2 
    3 a3 空字符 

    同样的也有right join 
    指的是首先取出b表中所有数据,然后再加上与a,b匹配的的数据 
    此时的取出的是: 
    1 a1 b1 
    2 a2 b2 
    4 空字符 b4

    另外的例子

    表A记录如下: 
    aID        aNum 
    1           a20050111
    2           a20050112
    3           a20050113
    4          a20050114
    5           a20050115
     

    表B记录如下: 
    bID        bName 
    1            2006032401
    2            2006032402
    3           2006032403
    4           2006032404
    8           2006032408

    实验如下: 
    1.    left join 
    sql语句如下: 

    SELECT * FROM A
    LEFT JOIN B 
    ON A.aID = B.bID


    结果如下: 
    aID        aNum                 bID           bName
    1            a20050111      1                2006032401
    2             a20050112         2               2006032402
    3             a20050113         3               2006032403
    4            a20050114         4               2006032404
    5            a20050115         NULL        NULL
     
    (所影响的行数为 5 行)

    结果说明:
    left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
    换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
    B表记录不足的地方均为NULL.
     

    2.    right join 
    sql语句如下: 

    SELECT * FROM A
    RIGHT JOIN B 
    ON A.aID = B.bID


    结果如下: 
    aID        aNum                 bID           bName
    1            a20050111      1                2006032401
    2             a20050112         2               2006032402
    3             a20050113         3               2006032403
    4            a20050114         4               2006032404
    NULL     NULL                 8              2006032408
     
    (所影响的行数为 5 行)

    结果说明:
    仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.
     

    3.inner join 
    sql语句如下: 

    SELECT * FROM A
    INNERJOIN B 
    ON A.aID = B.bID


    结果如下: 
    aID        aNum                 bID           bName
    1            a20050111      1                2006032401
    2             a20050112         2               2006032402
    3             a20050113         3               2006032403
    4            a20050114         4               2006032404
     

    结果说明:
    很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.
     

    复杂表的链接:

    右外连接 
    select a.*, b.* from bunclass a right join ctclass b on a.classid=b.classid where a.nclassid=20 

  • 相关阅读:
    Nowcoder9981A.串(排列组合)
    267D.Fedor and Essay(强连通分量缩点+DAG上DP)
    1290C. Prefix Enlightenment(带权并查集)
    LeetCode1. 两数之和
    LeetCode451. 根据字符出现频率排序
    LeetCode205. 同构字符串
    LeetCode290. 单词规律
    LeetCode202. 快乐数
    LeetCode242. 有效的字母异位词
    LeetCode136. 只出现一次的数字
  • 原文地址:https://www.cnblogs.com/zhao123/p/3383790.html
Copyright © 2011-2022 走看看