測試環境為 CentOS 7 x86_64 虛擬機.
前面有討論到 SQL 語法 JOIN 與 UNION – https://benjr.tw/101855 ,可以把兩個 Table 的資料結合處理,多個 Table 也可以嗎?
是的,直接來看下面的範例.
[root@localhost ~]# mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 25 Server version: 5.5.60-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> CREATE DATABASE testdb; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> USE testdb; Database changed |
下面範例有三個 Table.
- project (存放專案名稱與相對應人員名單)
project 這個資料表主要儲存專案的相關資料.MariaDB [testdb]> CREATE TABLE project (K1 int(11) NOT NULL auto_increment , name varchar(199) NOT NULL , member varchar(199) NOT NULL, PRIMARY KEY (K1));
Query OK, 0 rows affected (0.02 sec)
MariaDB [testdb]> DESCRIBE project;
+--------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+----------------+
| K1 | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(199) | NO | | NULL | |
| member | varchar(199) | NO | | NULL | |
+--------+--------------+------+-----+---------+----------------+
3 rows in set (0.02 sec)
在 project 資料表建立專案與個別成員資料資料.
MariaDB [testdb]> INSERT INTO project (name , member) VALUES(
'A'
,
'Ben'
);
Query OK, 1 row affected (0.01 sec)
MariaDB [testdb]> INSERT INTO project (name , member) VALUES(
'A'
,
'Jason'
);
Query OK, 1 row affected (0.00 sec)
MariaDB [testdb]> INSERT INTO project (name , member) VALUES(
'A'
,
'Thomas'
);
Query OK, 1 row affected (0.00 sec)
MariaDB [testdb]> INSERT INTO project (name , member) VALUES(
'B'
,
'Jack'
);
Query OK, 1 row affected (0.00 sec)
MariaDB [testdb]> INSERT INTO project (name , member) VALUES(
'B'
,
'Andy'
);
Query OK, 1 row affected (0.00 sec)
MariaDB [testdb]> INSERT INTO project (name , member) VALUES(
'B'
,
'Chuck'
);
Query OK, 1 row affected (0.00 sec)
MariaDB [testdb]> INSERT INTO project (name , member) VALUES(
'C'
,
'Jack'
);
Query OK, 1 row affected (0.01 sec)
MariaDB [testdb]> INSERT INTO project (name , member) VALUES(
'C'
,
'Jason'
);
Query OK, 1 row affected (0.00 sec)
MariaDB [testdb]> INSERT INTO project (name , member) VALUES(
'C'
,
'Chuck'
);
Query OK, 1 row affected (0.00 sec)
MariaDB [testdb]> SELECT * FROM project;
+----+------+--------+
| K1 | name | member |
+----+------+--------+
| 1 | A | Ben |
| 2 | A | Jason |
| 3 | A | Thomas |
| 4 | B | Jack |
| 5 | B | Andy |
| 6 | B | Chuck |
| 7 | C | Jack |
| 8 | C | Jason |
| 9 | C | Chuck |
+----+------+--------+
9 rows in set (0.00 sec)
- staff (存放員工姓名與部門)
staff 這個資料表主要儲存員工的相關資料.MariaDB [testdb]> CREATE TABLE staff (K1 int(11) NOT NULL auto_increment , name varchar(199) NOT NULL , dept varchar(199) NOT NULL, PRIMARY KEY (K1));
Query OK, 0 rows affected (0.02 sec)
MariaDB [testdb]> DESCRIBE staff;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| K1 | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(199) | NO | | NULL | |
| dept | varchar(199) | NO | | NULL | |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
並在 staff Table 建立了員工 Ben , Jason , Thomas , Jack , Andy , Chuck 與其相對應的部門資料.
MariaDB [testdb]> INSERT INTO staff (name , dept) VALUES(
'Ben'
,
'HR'
);
Query OK, 1 row affected (0.01 sec)
MariaDB [testdb]> INSERT INTO staff (name , dept) VALUES(
'Jason'
,
'HW'
);
Query OK, 1 row affected (0.00 sec)
MariaDB [testdb]> INSERT INTO staff (name , dept) VALUES(
'Thomas'
,
'Test'
);
Query OK, 1 row affected (0.01 sec)
MariaDB [testdb]> INSERT INTO staff (name , dept) VALUES(
'Jack'
,
'PM'
);
Query OK, 1 row affected (0.00 sec)
MariaDB [testdb]> INSERT INTO staff (name , dept) VALUES(
'Andy'
,
'Test'
);
Query OK, 1 row affected (0.00 sec)
MariaDB [testdb]> INSERT INTO staff (name , dept) VALUES(
'Chuck'
,
'SW'
);
Query OK, 1 row affected (0.00 sec)
MariaDB [testdb]> SELECT * FROM staff;
+----+--------+------+
| K1 | name | dept |
+----+--------+------+
| 1 | Ben | HR |
| 2 | Jason | HW |
| 3 | Thomas | Test |
| 4 | Jack | PM |
| 5 | Andy | Test |
| 6 | Chuck | SW |
+----+--------+------+
6 rows in set (0.01 sec)
- dept (存放部門與部門敘述)
dept 這個資料表主要儲存部門與其詳細相關資料.MariaDB [testdb]> CREATE TABLE dept (K1 int(11) NOT NULL auto_increment , name varchar(199) NOT NULL , info varchar(199) NOT NULL, PRIMARY KEY (K1));
Query OK, 0 rows affected (0.01 sec)
MariaDB [testdb]> DESCRIBE dept;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| K1 | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(199) | NO | | NULL | |
| info | varchar(199) | NO | | NULL | |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)
並在 dept Table 建立相對應的部門資料與其詳細資料.
MariaDB [testdb]> INSERT INTO dept (name , info) VALUES(
'HR'
,
'Human Resource'
);
Query OK, 1 row affected (0.00 sec)
MariaDB [testdb]> INSERT INTO dept (name , info) VALUES(
'HW'
,
'HardWare'
);
Query OK, 1 row affected (0.00 sec)
MariaDB [testdb]> INSERT INTO dept (name , info) VALUES(
'Test'
,
'Validation Test'
);
Query OK, 1 row affected (0.00 sec)
MariaDB [testdb]> INSERT INTO dept (name , info) VALUES(
'PM'
,
'Project Manager'
);
Query OK, 1 row affected (0.00 sec)
MariaDB [testdb]> INSERT INTO dept (name , info) VALUES(
'SW'
,
'SoftWare'
);
Query OK, 1 row affected (0.00 sec)
MariaDB [testdb]> SELECT * FROM dept;
+----+------+-----------------+
| K1 | name | info |
+----+------+-----------------+
| 1 | HR | Human Resource |
| 2 | HW | HardWare |
| 3 | Test | Validation Test |
| 4 | PM | Project Manager |
| 5 | SW | SoftWare |
+----+------+-----------------+
5 rows in set (0.01 sec)
JOIN
在 project 資料表中有 member 姓名,在 staff 也有員工姓名,在 staff 也有部門資料, dept 資料表中也有部門資料.相對應資料如下.
Multiple Tables JOIN 語法如下.
SELECT p.name , p.member , s.dept , d.info FROM project p INNER JOIN staff s ON p.member = s.name INNER JOIN dept d ON s.dept = d.name WHERE p.name= 'A' ; |
MariaDB [testdb]> SELECT p.name , p.member , s.dept , d.info FROM project p INNER JOIN staff s ON p.member = s.name INNER JOIN dept d ON s.dept = d.name WHERE p.name= 'A' ; +------+--------+------+-----------------+ | name | member | dept | info | +------+--------+------+-----------------+ | A | Ben | HR | Human Resource | | A | Jason | HW | HardWare | | A | Thomas | Test | Validation Test | +------+--------+------+-----------------+ 3 rows in set (0.00 sec) |
沒有解決問題,試試搜尋本站其他內容