posts - 23,comments - 15,trackbacks - 0

          user表:

           id   | name
           ---------
           1   | libk     
           2   | zyfon
           3   | daodao

          user_action表:

          user_id |  action
          ---------------
              1     |  jump
              1     |    kick
              1     |    jump
              2     |    run
              4     |    swim

          sql:
          select id, name, action from user as u
          left join user_action a on u.id = a.user_id

          result:
              id  |   name    |   action
          --------------------------------
              1   |   libk      |   jump    ①
              1   |   libk      |   kick     ②
              1   |   libk      |   jump    ③
              2   |   zyfon    |   run      ④
              3   |   daodao |   null      ⑤

          分析:
          注意到user_action中還有一個(gè)user_id=4, action=swim的紀(jì)錄,但是沒(méi)有在結(jié)果中出現(xiàn),
          而user表中的id=3, name=daodao的用戶在user_action中沒(méi)有相應(yīng)的紀(jì)錄,但是卻出現(xiàn)在了結(jié)果集中
          因?yàn)楝F(xiàn)在是left join,所有的工作以left為準(zhǔn).
          結(jié)果1,2,3,4都是既在左表又在右表的紀(jì)錄,5是只在左表,不在右表的紀(jì)錄
          結(jié)論:
          我們可以想象left join 是這樣工作的
          從左表讀出一條,選出所有與on匹配的右表紀(jì)錄(n條)進(jìn)行連接, 形成n條紀(jì)錄(包括重復(fù)的行,如:結(jié)果1和結(jié)果3),
          如果右邊沒(méi)有與on條件匹配的表,那連接的字段都是null.
          然后繼續(xù)讀下一條。
          引申:
          我們可以用右表沒(méi)有on匹配則顯示null的規(guī)律, 來(lái)找出所有在左表,不在右表的紀(jì)錄, 注意用來(lái)判斷的那列必須聲明為not null的。
          如:
          sql:
              select id, name, action from user as u
              left join user_action a on u.id = a.user_id
              where a.user_id is NULL    
              (注意:1.列值為null應(yīng)該用is null 而不能用=NULL 
                        2.這里a.user_id 列必須聲明為 NOT NULL 的)
          result:
              id  |    name   |   action
              --------------------------
              3   |   daodao  |   NULL
          posted on 2007-04-10 14:56 飛翔的心 閱讀(935) 評(píng)論(0)  編輯  收藏 所屬分類: SQL

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 大邑县| 镇坪县| 九龙县| 新巴尔虎左旗| 汨罗市| 枣强县| 信宜市| 黄大仙区| 平顶山市| 禄丰县| 岗巴县| 唐海县| 临澧县| 合江县| 茂名市| 旬邑县| 自贡市| 樟树市| 富裕县| 长白| 同仁县| 韶山市| 内黄县| 江山市| 玉屏| 常宁市| 军事| 阳江市| 彭水| 崇明县| 彝良县| 明光市| 临高县| 宁武县| 德庆县| 永福县| 佛学| 盘山县| 延寿县| 汕尾市| 来凤县|