<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    自由飛翔

    我在仰望,java之上

    統計

    留言簿(2)

    我關注的blog

    閱讀排行榜

    評論排行榜

    轉載:mysql表連接總結

    文章來源:http://blog.sina.com.cn/s/blog_3d48dbb70100hyz4.html
    作者:濤濤
    首先my sql 不支持oracle的(+) 
    內連接: 只連接匹配的行
    左外連接: 包含左邊表的全部行(不管右邊的表中是否存在與它們匹配的行),以及右邊表中全部匹配的行
    右外連接: 包含右邊表的全部行(不管左邊的表中是否存在與它們匹配的行),以及左邊表中全部匹配的行
    全外連接: 包含左、右兩個表的全部行,不管另外一邊的表中是否存在與它們匹配的行。
    交叉連接  生成笛卡爾積-它不使用任何匹配或者選取條件,而是直接將一個數據源中的每個行與另一個數據源的每個
    行都一一匹配
    舉個例子吧。
    表A
    id   name 
    1    張
    2    李
    3    王
    表B
    id   address   A_id
    1    北京      1
    2    上海      3
    3    南京      10
    包容性:A表包容B表,左連接左表是全的.(left join 或 left outer join )
    SQL語句如下:
    SELECT A.name, B.address
    FROM A
    LEFT JOIN B ON A.id = B.A_id
    查詢結果為:
    name     address
    張     北京
    李     NULL
    王     上海
    包容性:B表包容A表,右連接右表是全的.(right join 或 right outer join )
    SQL語句如下:
    SELECT A.name, B.address
    FROM A
    RIGHT JOIN B ON A.id = B.A_id
    查詢結果為:
    name     address
    張     北京
    王     上海
    NULL     南京
    排他性:A,B表中至少有1個匹配時,才返回行。兩表的交集
    SQL語句如下:
    select A.name,B.address from A
    inner join B
    on A.id = B.A_id
    查詢結果為:
    name     address
    張     北京
    王     上海
    inner join  內連接等價于下面的sql:
    SELECT A.name, B.address
    FROM A, B
    WHERE A.id = B.A_id
    注釋:全外連接返回參與連接的兩個數據集合中的全部數據,無論它們是否具有與之相匹配的行。在功能上,它等價于
    對這兩個數據集合分別進行左外連接和右外連接,然后再使用消去重復行的并操作將上述兩個結果集合并為一個結果集
    。(full join 或 full outer join )
    SQL語句如下:
    select * from A
    full join B
    查詢結果為:
    id     name     id     address A_id
    1     張     1     北京     1
    2     李     1     北京     1
    3     王     1     北京     1
    1     張     2     上海     3
    2     李     2     上海     3
    3     王     2     上海     3
    1     張     3     南京     10
    2     李     3     南京     10
    3     王     3     南京     10
    注釋:返回3*3=9條記錄,即笛卡爾積
    SQL語句如下:
    SELECT * FROM A
    CROSS JOIN B
    查詢結果為:
    id     name     id     address A_id
    1     張     1     北京     1
    2     李     1     北京     1
    3     王     1     北京     1
    1     張     2     上海     3
    2     李     2     上海     3
    3     王     2     上海     3
    1     張     3     南京     10
    2     李     3     南京     10
    3     王     3     南京     10
    CROSS JOIN等價于:
    select * from A,B
    注意:
    1. on A.id = B.id 等同于 using(id)//這里字段名要相同
    2. 當 MySQL 在從一個表中檢索信息時,你可以提示它選擇了哪一個索引。  
    如果 EXPLAIN 顯示 MySQL 使用了可能的索引列表中錯誤的索引,這個特性將是很有用的。  
    通過指定 USE INDEX (key_list),你可以告訴 MySQL 使用可能的索引中最合適的一個索引在表中查找記錄行。  
    可選的二選一句法 IGNORE INDEX (key_list) 可被用于告訴 MySQL 不使用特定的索引。    
    效率問題:
    1.inner join比left join快
    注:inner join  內連接等價于下面的sql: SELECT A.name, B.address FROM A, B WHERE A.id = B.A_id
    所以一般要用一般的連接就可以了.
    2.連接字段建索引
    多表外連接
    select   A.*,B.f1,B.f2,B.fn,C.f1,C.f2,C.fn   from   A    
      left   join   B   on   A.id=B.id    
      left   join   C   on   C.id=A.id  
      where .......



    Gavin

    posted on 2011-10-20 11:24 GavinMiao 閱讀(6491) 評論(1)  編輯  收藏 所屬分類: mysql

    評論

    # re: 轉載:mysql表連接總結 2013-12-04 23:20 ewr

    ardfdf  回復  更多評論   

    主站蜘蛛池模板: 亚洲AV永久纯肉无码精品动漫| 国产黄色一级毛片亚洲黄片大全| 亚洲天天在线日亚洲洲精| A国产一区二区免费入口| 亚洲日本一区二区一本一道 | 亚洲成a人片在线观看播放| 国产免费拔擦拔擦8X高清在线人 | 亚洲另类激情综合偷自拍| 精品亚洲永久免费精品| 亚洲成人中文字幕| 国产精品久久久久久久久免费| 亚洲精品**中文毛片| 丁香花在线观看免费观看| 亚洲国产精品ⅴa在线观看| 日韩一级免费视频| 一二三四在线观看免费中文在线观看| 国产成人精品高清免费| 又大又硬又粗又黄的视频免费看| 国产成人精品久久亚洲| 国产情侣久久久久aⅴ免费| 久久亚洲精品无码aⅴ大香| 无码国产精品久久一区免费| 亚洲爆乳少妇无码激情| AV在线亚洲男人的天堂| 无码精品人妻一区二区三区免费看| 亚洲成人一级电影| 免费人成激情视频| 免费国产午夜高清在线视频| 91亚洲性爱在线视频| 国产高清免费在线| 青柠影视在线观看免费高清 | 在线观看免费亚洲| 岛国岛国免费V片在线观看| 久久水蜜桃亚洲av无码精品麻豆| 免费电视剧在线观看| h视频免费高清在线观看| 亚洲春色在线观看| 亚洲?V乱码久久精品蜜桃| 99热在线免费播放| 精品久久久久久亚洲中文字幕| 久久亚洲高清观看|