mysql多表連線查詢
1.交叉連線查詢
交叉連線返回的結果是被連線的兩個表中所有資料行的笛卡兒積;比如:集合A={a,b},集合B={0,1,2},則集合A和B的笛卡爾積為{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。所以,交叉連線也被稱為笛卡爾連線,其語法格式如下:
SELECT * FROM 表1 CROSS JOIN 表2;
在該語法中:CROSS JOIN用於連線兩個要查詢的表,通過該語句可以查詢兩個表中所有的資料組合。
由於這個交叉連線查詢在實際運用中沒有任何意義,所以只做為了解即可
2.內連線查詢
內連線(Inner Join)又稱簡單連線或自然連線,是一種非常常見的連線查詢。內連線使用比較運算子對兩個表中的資料進行比較並列出與連線條件匹配的資料行,組合成新的 記錄。也就是說在內連線查詢中只有滿足條件的記錄才能出現在查詢結果中。其語法格式如下:
SELECT 查詢欄位1,查詢欄位2, ... FROM 表1 [INNER] JOIN 表2 ON 表1.關係欄位=表2.關係欄位
在該語法中:INNER JOIN用於連線兩個表,ON來指定連線條件;其中INNER可以省略。
mysql安裝:
準備資料,程式碼如下:
-- 若存在資料庫mydb則刪除
DROP DATABASE IF EXISTS mydb;
-- 建立資料庫mydb
CREATE DATABASE mydb;
-- 選擇資料庫mydb
USE mydb;
-- 建立部門表
CREATE TABLE department(
did int (4) NOT NULL PRIMARY KEY,
dname varchar(20)
);
-- 建立員工表
CREATE TABLE employee (
eid int (4) NOT NULL PRIMARY KEY,
ename varchar (20),
eage int (2),
departmentid int (4) NOT NULL
);
-- 向部門表插入資料
INSERT INTO department VALUES(1001,'財務部');
INSERT INTO department VALUES(1002,'技術部');
INSERT INTO department VALUES(1003,'行政部');
INSERT INTO department VALUES(1004,'生活部');
-- 向員工表插入資料
INSERT INTO employee VALUES(1,'張三',19,1003);
INSERT INTO employee VALUES(2,'李四',18,1002);
INSERT INTO employee VALUES(3,'王五',20,1001);
INSERT INTO employee VALUES(4,'趙六',20,1004);
查詢員工姓名及其所屬部門名稱 MySQL命令:
select employee.ename,department.dname from department inner join employee on department.did=employee.departmentid;
3.外連線查詢
在使用內連線查詢時我們發現:返回的結果只包含符合查詢條件和連線條件的資料。但是,有時還需要在返回查詢結果中不僅包含符合條件的資料,而且還包括左表、右表或兩個表中的所有資料,此時我們就需要使用外連線查詢。外連線又分為左(外)連線和右(外)連線。其語法格式如下:
SELECT 查詢欄位1,查詢欄位2, ... FROM 表1 LEFT | RIGHT [OUTER] JOIN 表2 ON 表1.關係欄位=表2.關係欄位 WHERE 條件
由此可見,外連線的語法格式和內連線非常相似,只不過使用的是LEFT [OUTER] JOIN、RIGHT [OUTER] JOIN關鍵字。其中,關鍵字左邊的表被稱為左表,關鍵字右邊的表被稱為右表;OUTER可以省略。
在使用左(外)連線和右(外)連線查詢時,查詢結果是不一致的,具體如下:
1、LEFT [OUTER] JOIN 左(外)連線:返回包括左表中的所有記錄和右表中符合連線條件的記錄。
2、RIGHT [OUTER] JOIN 右(外)連線:返回包括右表中的所有記錄和左表中符合連線條件的記錄。