MySQL三表外连接查询详解(mysql三表外连接查询)
MySQL三表外连接查询详解
在进行数据库查询时,有时需要将三个或多个表联合起来进行查询。而又因为MySQL数据库的约束性较强,联结多个表的查询语句书写较为复杂。本文将围绕MySQL三表外连接查询技术展开详细介绍。
基本概念
外连接是一种关系型数据库实现结合查询的技术。在使用外连接查询语句时,如果需要查询的表中存在一对多的关系,那么我们要使用外连接操作。针对外连接操作,MySQL数据库提供了三种不同的实现方式:
1. 左外连接
左外连接是以左表为基础的连接方式,查询左表中所有存在的记录,并将右表中的记录全部匹配。而右表中未匹配的则为空。
2. 右外连接
右外连接是以右表为基础的连接方式,查询右表中所有存在的记录,并将左表中的记录全部匹配。而左表中未匹配的则为空。
3. 全外连接
全连接的方式相对于左右连接更加宽泛。其可以对不同的表中的所有记录都进行匹配,如果不存在则填空。
编写MySQL三表连接查询语句
要编写一条MySQL三表连接查询语句,首先需要对整个查询进行拆分,将查询的内容分解为单个表格,再进行连接。我们来以一个生产厂家-产品-顾客三表的实例来示范具体实现过程。
生产厂家表:
CREATE TABLE Manufacturer (
Manu_ID int(11) NOT NULL AUTO_INCREMENT,
Manu_Name varchar(60) DEFAULT NULL,
PRIMARY KEY (Manu_ID)
) ENGINE=InnoDB
产品表:
CREATE TABLE Product (
Product_ID int(11) NOT NULL AUTO_INCREMENT,
Product_Name varchar(50) NOT NULL DEFAULT ‘0’,
Manu_ID int(11) NOT NULL DEFAULT ‘0’,
PRIMARY KEY (Product_ID),
KEY fk_Manu_idx (Manu_ID),
CONSTRNT fk_Manu FOREIGN KEY (Manu_ID) REFERENCES Manufacturer (Manu_ID)
) ENGINE=InnoDB
顾客表:
CREATE TABLE Customer (
Customer_ID int(11) NOT NULL AUTO_INCREMENT,
Customer_Name varchar(60) NOT NULL DEFAULT ”,
PRIMARY KEY (Customer_ID)
) ENGINE=InnoDB
在上述数据表结构中,我们以厂家表为基础,通过产品表和顾客表进行联结,查询该生产厂家所生产的产品信息,并且还要查询到该产品所被哪些顾客购买。
LEFT JOIN语句的使用
SELECT Manufacturer.Manu_Name, Product.Product_Name, Customer.Customer_Name
FROM Manufacturer
LEFT JOIN Product
ON Manufacturer.Manu_ID = Product.Manu_ID
LEFT JOIN Customer
ON Product.Product_ID = Customer.Customer_ID
WHERE Manufacturer.Manu_Name = “Hewlett-Packard”
在上述代码中,我们使用拆分与联结的方式,通过左连接方式,将三个表联结成一张临时表。接着,我们以该生产商名字“Hewlett-Packard”为查询条件进行筛选,即可得出该生产商的产量和顾客购买量。
RIGHT JOIN语句的使用
SELECT Manufacturer.Manu_Name, Product.Product_Name, Customer.Customer_Name
FROM Manufacturer
RIGHT JOIN Product
ON Manufacturer.Manu_ID = Product.Manu_ID
RIGHT JOIN Customer
ON Product.Product_ID = Customer.Customer_ID
WHERE Manufacturer.Manu_Name = “Hewlett-Packard”
在上述代码中,我们同样使用右对连接进行数据联结,但是此时我们以产品表为基础表,查询到所有购买这个产品的顾客信息。这里仍然以生产厂家名字“Hewlett-Packard”为查询条件。
FULL OUTER JOIN语句的使用
SELECT Manufacturer.Manu_Name, Product.Product_Name, Customer.Customer_Name
FROM Manufacturer
FULL OUTER JOIN Product
ON Manufacturer.Manu_ID = Product.Manu_ID
FULL OUTER JOIN Customer
ON Product.Product_ID = Customer.Customer_ID
WHERE Manufacturer.Manu_Name = “Hewlett-Packard”
在上述代码中,我们采用全连接方式,将三个表联结为一张临时表。它和左连接、右连接不同的是,可以让不同的表中的所有记录都进行匹配查询。这种表示方式相对于其他连接方式更加宽泛,但是需要注意的是它并不是所有数据库都支持FULL OUTER JOIN的语法,如果不支持,则会报错。
总结
MySQL三表外连接查询是一种非常实用的数据库联结技术,在进行复杂查询时十分方便实用。通过本文的介绍,相信大家对于MySQL三表连接查询已经有了更深入的认识。