<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 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    MySQL Join詳解

    Posted on 2006-10-21 17:30 semovy 閱讀(264) 評論(0)  編輯  收藏 所屬分類: My SQL數據庫方面
    還是先 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 中的資料為基礎

    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 放在左邊的情形(當然以 emp_dept 中的數據為基礎來顯示資料,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 中的資料為基礎來顯示資料

    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毛片大| 免费人成视频在线观看免费| 国产精品美女自在线观看免费| 亚洲人成人网毛片在线播放| 免费无码精品黄AV电影| 国产亚洲精品成人AA片| 免费看又爽又黄禁片视频1000| 亚洲精品无码专区| 全部免费国产潢色一级| 一区视频免费观看| 亚洲中文久久精品无码ww16| 51午夜精品免费视频| 亚洲动漫精品无码av天堂| 亚洲视频免费在线观看| 亚洲精品中文字幕无乱码| 精品久久久久成人码免费动漫| 亚洲综合成人婷婷五月网址| 国产色爽免费视频| 香蕉免费看一区二区三区| 亚洲精品免费视频| 最近最新的免费中文字幕| 色吊丝免费观看网站| 亚洲精品字幕在线观看| 亚洲毛片免费视频| 激情无码亚洲一区二区三区 | 一级毛片免费全部播放| 亚洲国产精品一区二区第一页| 91久久精品国产免费直播| 国产精品亚洲自在线播放页码 | 一个人看的免费高清视频日本| 亚洲国产成人一区二区三区| 又大又硬又爽又粗又快的视频免费| 亚洲国产无线乱码在线观看| 国产精品亚洲综合一区| 91精品成人免费国产片| 无码毛片一区二区三区视频免费播放| 少妇中文字幕乱码亚洲影视| 色www永久免费视频|