mysql 內連接和外連接


創建兩張表

mysql> create table employee(
    ->       emp_id int auto_increment primary key not null,
    ->       emp_name varchar(50),
    ->       age int,
    ->       dept_id int
    ->       );
 
         
mysql> insert into employee(emp_name,age,dept_id) values
  -> ('A',19,200),
  -> ('B',26,201),
  -> ('C',30,201),
  -> ('D',24,202),
  -> ('E',20,200),
  -> ('F',38,204);

 

  

mysql> create table department(
-> dept_id int,
-> dept_name varchar(100)
-> );

 

mysql> insert into department values
-> (200,'人事部'),
-> (201,'技術部'),
-> (202,'銷售部'),
-> (203,'財政部');

 

查看表數據

 

mysql> select * from employee;
+--------+----------+------+---------+
| emp_id | emp_name | age | dept_id |
+--------+----------+------+---------+
| 1 | A | 19 | 200 |
| 2 | B | 26 | 201 |
| 3 | C | 30 | 201 |
| 4 | D | 24 | 202 |
| 5 | E | 20 | 200 |
| 6 | F | 38 | 204 |
+--------+----------+------+---------+

 

 

mysql> select * from department;
+---------+-----------+
| dept_id | dept_name |
+---------+-----------+
| 200 | 人事部 |
| 201 | 技術部 |
| 202 | 銷售部 |
| 203 | 財政部 |
+---------+-----------+

 

 

 

把兩張表的數據全部輸出

mysql> select * from employee,department;
+--------+----------+------+---------+---------+-----------+
| emp_id | emp_name | age  | dept_id | dept_id | dept_name |
+--------+----------+------+---------+---------+-----------+
|      1 | A        |   19 |     200 |     200 | 人事部    |
|      1 | A        |   19 |     200 |     201 | 技術部    |
|      1 | A        |   19 |     200 |     202 | 銷售部    |
|      1 | A        |   19 |     200 |     203 | 財政部    |
|      2 | B        |   26 |     201 |     200 | 人事部    |
|      2 | B        |   26 |     201 |     201 | 技術部    |
|      2 | B        |   26 |     201 |     202 | 銷售部    |
|      2 | B        |   26 |     201 |     203 | 財政部    |
|      3 | C        |   30 |     201 |     200 | 人事部    |
|      3 | C        |   30 |     201 |     201 | 技術部    |
|      3 | C        |   30 |     201 |     202 | 銷售部    |
|      3 | C        |   30 |     201 |     203 | 財政部    |
|      4 | D        |   24 |     202 |     200 | 人事部    |
|      4 | D        |   24 |     202 |     201 | 技術部    |
|      4 | D        |   24 |     202 |     202 | 銷售部    |
|      4 | D        |   24 |     202 |     203 | 財政部    |
|      5 | E        |   20 |     200 |     200 | 人事部    |
|      5 | E        |   20 |     200 |     201 | 技術部    |
|      5 | E        |   20 |     200 |     202 | 銷售部    |
|      5 | E        |   20 |     200 |     203 | 財政部    |
|      6 | F        |   38 |     204 |     200 | 人事部    |
|      6 | F        |   38 |     204 |     201 | 技術部    |
|      6 | F        |   38 |     204 |     202 | 銷售部    |
|      6 | F        |   38 |     204 |     203 | 財政部    |
+--------+----------+------+---------+---------+-----------+

 

 

選出employee表dept_id和department表 dept_id相同的

mysql> select * from employee,department where employee.dept_id = department.dept_id;
--select * from employee inner join department on employee.dept_id = department.dept_id;
+--------+----------+------+---------+---------+-----------+
| emp_id | emp_name | age  | dept_id | dept_id | dept_name |
+--------+----------+------+---------+---------+-----------+
|      1 | A        |   19 |     200 |     200 | 人事部    |
|      2 | B        |   26 |     201 |     201 | 技術部    |
|      3 | C        |   30 |     201 |     201 | 技術部    |
|      4 | D        |   24 |     202 |     202 | 銷售部    |
|      5 | E        |   20 |     200 |     200 | 人事部    |
+--------+----------+------+---------+---------+-----------+

 

 

 

mysql> SELECT employee.emp_name,department.dept_name from
    ->                         employee INNER JOIN department
    ->                         on  employee.dept_id = department.dept_id
    ->                         and employee.emp_name='A';
+----------+-----------+
| emp_name | dept_name |
+----------+-----------+
| A        | 人事部    |
+----------+-----------+

 

 

 

外連接

mysql> SELECT employee.emp_name,department.dept_name from
    ->                         employee left join department
    ->                         on  employee.dept_id = department.dept_id;
+----------+-----------+
| emp_name | dept_name |
+----------+-----------+
| A        | 人事部    |
| B        | 技術部    |
| C        | 技術部    |
| D        | 銷售部    |
| E        | 人事部    |
| F        | NULL      |
+----------+-----------+


mysql> SELECT employee.emp_name,department.dept_name from
    ->                         department left join employee
    ->                         on  employee.dept_id = department.dept_id;
+----------+-----------+
| emp_name | dept_name |
+----------+-----------+
| A        | 人事部    |
| E        | 人事部    |
| B        | 技術部    |
| C        | 技術部    |
| D        | 銷售部    |
| NULL     | 財政部    |
+----------+-----------+
 
         

 

 

 全外連接:在內連接的基礎上增加左邊有右邊沒有的和右邊有左邊沒有的結果

    -- mysql不支持全外連接 full JOIN
    -- mysql可以使用此種方式間接實現全外連接
mysql>    select * from employee RIGHT JOIN department on employee.dept_id = department.dept_id
    ->    UNION
    ->    select * from employee LEFT JOIN department on employee.dept_id = department.dept_id;
+--------+----------+------+---------+---------+-----------+
| emp_id | emp_name | age  | dept_id | dept_id | dept_name |
+--------+----------+------+---------+---------+-----------+
|      1 | A        |   19 |     200 |     200 | 人事部    |
|      5 | E        |   20 |     200 |     200 | 人事部    |
|      2 | B        |   26 |     201 |     201 | 技術部    |
|      3 | C        |   30 |     201 |     201 | 技術部    |
|      4 | D        |   24 |     202 |     202 | 銷售部    |
|   NULL | NULL     | NULL |    NULL |     203 | 財政部    |
|      6 | F        |   38 |     204 |    NULL | NULL      |
+--------+----------+------+---------+---------+-----------+

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM