[MySQLの]:マルチテーブルクエリ

背面の外部キー制約の例では、これは学習マルチテーブルクエリの概念と操作の一部となります。

別に何か他のものから、直接の例を作成します。

CREATE TABLE dept(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20)
);
INSERT INTO dept VALUES (NULL,'法师'),(NULL,'坦克'),(NULL,'剑客'),(NULL,'战士');

CREATE TABLE emp(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
dept_id INT
);
INSERT INTO emp VALUES (NULL,'佐伊',1),(NULL,'扎克',2),(NULL,'亚索',3),(NULL,'盖伦',4)

まず、直積のお問い合わせ

-- 直接书写两张表的名称进行查询即可获取笛卡尔积查询的结果
SELECT * FROM dept,emp; -- 两张表数据相乘

-- 在笛卡尔积查询的结果中需要筛选出正确的数据(类似内连接查询)
SELECT * FROM dept,emp WHERE emp.dept_id = dept.id;

ここに画像を挿入説明

第二に、内側のクエリに参加します

-- 在笛卡尔积查询的结果之上,获取两边表都有的记录。
SELECT * FROM dept INNER JOIN emp 
ON dept.id = emp.dept_id ;

ここに画像を挿入説明

-- 选择指定内容显示
SELECT emp.NAME AS 英雄,dept.NAME AS 职业 FROM dept INNER JOIN emp
ON dept.id = emp.dept_id;
-- 给表起别名,所有的字段需要用别名获取
SELECT e.NAME AS 英雄,d.NAME AS 职业 FROM dept d INNER JOIN emp e
ON d.id = e.dept_id;

ここに画像を挿入説明

第三に、外側の結合問合せ

左外部結合します

基本の買収を含むが、[左と右のデータがない]クエリテーブルを結合します。

まず、この試験についてのデータを追加します。

INSERT INTO dept VALUES (NULL,'射手');

-- 左外连接
SELECT * FROM dept LEFT JOIN emp 
ON dept.id = emp.dept_id;

ここに画像を挿入説明

右の外部結合します

基礎となる接続クエリの取得を含め、[テーブルの左と右のいくつかのデータを持っていません]。

またはテストデータを追加します。

INSERT INTO emp VALUES(NULL,'菲兹',6);

-- 右外连接
SELECT * FROM dept RIGHT JOIN emp 
ON dept.id = emp.dept_id;

ここに画像を挿入説明

完全外部結合します

基礎となる接続クエリの取得を含む[左と右の表の左側に任意のデータ+テーブルを持っていないと、右側にはデータがありません]。

MySQLのFULLキーワードは、完全な外部結合ではなく、を介してのみ、JOIN UNION完全外部結合を実現するために、クエリの結果。

UNIONは再び、同じデータの結果は、コピーのみを保持している場合。

-- 全外连接
SELECT * FROM dept LEFT JOIN emp ON dept.id = emp.dept_id 
UNION   -- 全外连接关键字
SELECT * FROM dept RIGHT JOIN emp ON dept.id = emp.dept_id ;

ここに画像を挿入説明

おすすめ

転載: www.cnblogs.com/summerday152/p/12433835.html