<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中文字幕| 78成人精品电影在线播放日韩精品电影一区亚洲 | 国产人成免费视频网站| 亚洲人成网址在线观看 | 色窝窝免费一区二区三区| 久久精品蜜芽亚洲国产AV| 一级毛片aaaaaa免费看| 亚洲欧洲视频在线观看| 成人爽A毛片免费看| 亚洲中文精品久久久久久不卡| 我想看一级毛片免费的| 亚洲精品无码久久久久秋霞| 在线看片无码永久免费aⅴ| 美女黄频视频大全免费的| 色噜噜亚洲精品中文字幕| 永久免费av无码网站yy| 亚洲黄色网址在线观看| 国产一精品一AV一免费孕妇| 亚洲欧美日韩久久精品| mm1313亚洲国产精品美女| 麻豆成人精品国产免费| 理论亚洲区美一区二区三区| 亚洲视频人成在线播放| a级毛片毛片免费观看久潮| 亚洲一区二区在线免费观看| 国产精彩免费视频| 黄网站色成年片大免费高清| 国产亚洲人成网站观看| 91成人免费在线视频| 亚洲国产成人精品无码区花野真一| 国产精品亚洲综合专区片高清久久久| 久久久精品免费国产四虎| 国产精品亚洲综合五月天| 亚洲一级特黄无码片| 2015日韩永久免费视频播放| 亚洲人成色77777在线观看大| 日本在线看片免费人成视频1000| 国产亚洲美女精品久久久2020| 99国产精品视频免费观看| 亚洲AV无码精品国产成人| 亚洲成在人天堂在线|