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三表连接查询已经有了更深入的认识。


数据运维技术 » MySQL三表外连接查询详解(mysql三表外连接查询)