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

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

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

    posts - 0, comments - 77, trackbacks - 0, articles - 356
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    MySQL Join詳解

    Posted on 2006-10-21 17:30 semovy 閱讀(264) 評論(0)  編輯  收藏 所屬分類: My SQL數(shù)據(jù)庫方面
    還是先 Create table 吧

    create table emp(
    id int not null primary key,
    name varchar(10)
    );

    create table emp_dept(
    dept_id varchar(4) not null,
    emp_id int not null,
    emp_name varchar(10),
    primary key (dept_id,emp_id));

    insert into emp() values
    (1,"Dennis-1"),
    (2,"Dennis-2"),
    (3,"Dennis-3"),
    (4,"Dennis-4"),
    (5,"Dennis-5"),
    (6,"Dennis-6"),
    (7,"Dennis-7"),
    (8,"Dennis-8"),
    (9,"Dennis-9"),
    (10,"Dennis-10");

    insert into emp_dept() values
    ("R&D",1,"Dennis-1"),
    ("DEv",2,"Dennis-2"),
    ("R&D",3,"Dennis-3"),
    ("Test",4,"Dennis-4"),
    ("Test",5,"Dennis-5");

    >> left join
    -------------
    select a.id,a.name,b.dept_id
    from emp a left join emp_dept b on (a.id=b.emp_id);

    # 挑出左邊的 table emp 中的所有資料,即使 emp_dept 中沒有的資料也挑出來,沒有的就用 NULL 來顯示,
    # 也即顯示資料是以左邊的 table emp 中的資料為基礎(chǔ)

    mysql> select a.id,a.name,b.dept_id
    -> from emp a left join emp_dept b on (a.id=b.emp_id);
    +----+-----------+---------+
    | id | name | dept_id |
    +----+-----------+---------+
    | 1 | Dennis-1 | R&D |
    | 2 | Dennis-2 | DEv |
    | 3 | Dennis-3 | R&D |
    | 4 | Dennis-4 | Test |
    | 5 | Dennis-5 | Test |
    | 6 | Dennis-6 | NULL |
    | 7 | Dennis-7 | NULL |
    | 8 | Dennis-8 | NULL |
    | 9 | Dennis-9 | NULL |
    | 10 | Dennis-10 | NULL |
    +----+-----------+---------+

    # 挑出 table emp 中有而 table emp_dept 中沒有的人員資料
    select a.id,a.name,b.dept_id
    from emp a left join emp_dept b on (a.id=b.emp_id)
    where b.dept_id IS NULL;

    mysql> select a.id,a.name,b.dept_id
    -> from emp a left join emp_dept b on (a.id=b.emp_id)
    -> where b.dept_id IS NULL;
    +----+-----------+---------+
    | id | name | dept_id |
    +----+-----------+---------+
    | 6 | Dennis-6 | NULL |
    | 7 | Dennis-7 | NULL |
    | 8 | Dennis-8 | NULL |
    | 9 | Dennis-9 | NULL |
    | 10 | Dennis-10 | NULL |
    +----+-----------+---------+

    # 把 table emp_dept 放在左邊的情形(當(dāng)然以 emp_dept 中的數(shù)據(jù)為基礎(chǔ)來顯示資料,emp 中比emp_dept 中多的資料也就不會顯示出來了):

    select a.id,a.name,b.dept_id
    from emp_dept b left join emp a on (a.id=b.emp_id);
    mysql> select a.id,a.name,b.dept_id
    -> from emp_dept b left join emp a on (a.id=b.emp_id);
    +------+----------+---------+
    | id | name | dept_id |
    +------+----------+---------+
    | 2 | Dennis-2 | DEv |
    | 1 | Dennis-1 | R&D |
    | 3 | Dennis-3 | R&D |
    | 4 | Dennis-4 | Test |
    | 5 | Dennis-5 | Test |
    +------+----------+---------+

    >> right join
    ---------------
    select a.id,a.name,b.dept_id
    from emp a right join emp_dept b on (a.id=b.emp_id);
    # 挑資料時以右邊 table emp_dept 中的資料為基礎(chǔ)來顯示資料

    mysql> select a.id,a.name,b.dept_id
    -> from emp a right join emp_dept b on (a.id=b.emp_id);
    +------+----------+---------+
    | id | name | dept_id |
    +------+----------+---------+
    | 2 | Dennis-2 | DEv |
    | 1 | Dennis-1 | R&D |
    | 3 | Dennis-3 | R&D |
    | 4 | Dennis-4 | Test |
    | 5 | Dennis-5 | Test |
    +------+----------+---------+
    5 rows in set (0.00 sec)

    # 我們再把 table 的位置交換一下,再用 right join 試試

    select a.id,a.name,b.dept_id
    from emp_dept b right join emp a on (a.id=b.emp_id);

    mysql> select a.id,a.name,b.dept_id
    -> from emp_dept b right join emp a on (a.id=b.emp_id);
    +----+-----------+---------+
    | id | name | dept_id |
    +----+-----------+---------+
    | 1 | Dennis-1 | R&D |
    | 2 | Dennis-2 | DEv |
    | 3 | Dennis-3 | R&D |
    | 4 | Dennis-4 | Test |
    | 5 | Dennis-5 | Test |
    | 6 | Dennis-6 | NULL |
    | 7 | Dennis-7 | NULL |
    | 8 | Dennis-8 | NULL |
    | 9 | Dennis-9 | NULL |
    | 10 | Dennis-10 | NULL |
    +----+-----------+---------+

    # 是不是和 left join 一樣了?

    >> direct join
    --------------
    # 如果用right join 同不用 Join 直接挑資料是相同的,它等介於以下的指令

    select a.id,a.name,b.dept_id
    from emp a ,emp_dept b
    where a.id=b.emp_id;

    mysql> select a.id,a.name,b.dept_id
    -> from emp a ,emp_dept b
    -> where a.id=b.emp_id;
    +----+----------+---------+
    | id | name | dept_id |
    +----+----------+---------+
    | 2 | Dennis-2 | DEv |
    | 1 | Dennis-1 | R&D |
    | 3 | Dennis-3 | R&D |
    | 4 | Dennis-4 | Test |
    | 5 | Dennis-5 | Test |
    +----+----------+---------+

    怎樣,弄明白了嗎?

    主站蜘蛛池模板: 每天更新的免费av片在线观看 | 亚洲国产成人久久综合区| 久久精品亚洲一区二区三区浴池 | 久久久久亚洲AV无码专区网站| 亚洲精品无码久久久久| 亚洲国产精品成人综合久久久| 色多多免费视频观看区一区| 日韩免费在线观看| 国产精品亚洲色婷婷99久久精品| 99久久精品免费精品国产| 亚洲国产成人私人影院| 最近中文字幕大全免费视频| 亚洲妇女水蜜桃av网网站| 国产免费黄色无码视频| 亚洲欧洲日产国码av系列天堂| 亚洲国产精品无码久久久秋霞1 | 97青青草原国产免费观看| 免费人成在线观看播放国产| 久久久久亚洲精品日久生情| 亚洲免费电影网站| 亚洲一区二区三区香蕉| 亚洲国产无线乱码在线观看| 四虎永久免费网站免费观看| 一本一道dvd在线观看免费视频| 妞干网免费视频观看| 91在线精品亚洲一区二区| 免费看成人AA片无码视频羞羞网| 亚洲成a人片77777kkkk| 久久99国产综合精品免费| 亚洲熟女精品中文字幕| 亚洲欧洲精品成人久久奇米网| 亚洲一区二区三区写真| 91九色视频无限观看免费| 亚洲国产精品久久人人爱| 日产乱码一卡二卡三免费| 久久精品国产亚洲AV无码偷窥| 色播在线永久免费视频网站| 亚洲美女一区二区三区| 国产免费观看黄AV片| 激情内射亚洲一区二区三区爱妻| 95老司机免费福利|