Mysql 简明教程

MySQL - Using Joins

MySQL 中的 Join 子句用于将一个数据库中的两张或更多张表的记录合并在一起。这些表基于 WHERE 子句中指定的条件连接在一起。

例如,可以将两个不同表中相似列的值相等(=)进行比较作为连接谓词。此外,可以使用多个运算符来连接表,例如 <、>、<>、⇐、>=、!=、BETWEEN、LIKE 和 NOT 等。

我们可以使用 SELECT、UPDATE 和 DELETE 语句中的 JOINS 来连接 MySQL 表。

Types of Joins

SQL 提供了多种类型的连接,它们根据跨多个表连接数据的方式进行分类。它们列在以下内容中:

  1. Inner Join - 内部连接检索两个表的交集。它将第一表的每一行与第二表的每一行进行比较。如果这些行的对满足连接谓词,则将它们连接在一起。这是一个默认连接。

  2. Outer Join - 外部连接检索两个表中的所有记录,即使像内部连接那样,在一个表中不存在另一个表中的对应行。外部连接进一步划分为三种子类型:左连接、右连接和完全连接。我们将在本教程后面了解这些连接。

Example

在此示例中,我们首先使用 CREATE TABLE 查询创建名为 CUSTOMERS 的表,如下所示:

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR(15) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS VARCHAR(25),
   SALARY DECIMAL(10, 2),
   PRIMARY KEY(ID)
);

然后,我们将以下记录插入 CUSTOMERS 表中:

INSERT INTO CUSTOMERS VALUES
(1, 'Ramesh', '32', 'Ahmedabad', 2000),
(2, 'Khilan', '25', 'Delhi', 1500),
(3, 'Kaushik', '23', 'Kota', 2500),
(4, 'Chaitali', '26', 'Mumbai', 6500),
(5, 'Hardik','27', 'Bhopal', 8500),
(6, 'Komal', '22', 'Hyderabad', 9000),
(7, 'Muffy', '24', 'Indore', 5500);

表创建如下 −

ORDERS Table −

我们使用以下 CREATE TABLE 查询创建另一个名为 ORDERS 的表,其中包含客户下的订单详细信息:

CREATE TABLE ORDERS (
   OID INT NOT NULL,
   DATE VARCHAR (20) NOT NULL,
   CUSTOMER_ID INT NOT NULL,
   AMOUNT DECIMAL (18, 2)
);

使用 INSERT 语句,按照如下方式插入值到 ORDERS 表中 −

INSERT INTO ORDERS VALUES
(102, '2009-10-08 00:00:00', 3, 3000.00),
(100, '2009-10-08 00:00:00', 3, 1500.00),
(101, '2009-11-20 00:00:00', 2, 1560.00),
(103, '2008-05-20 00:00:00', 4, 2060.00);

该表显示如下:

Joining Tables −

现在我们编写一个 SQL 查询来联接这两个表。此查询将从表 CUSTOMERS 中选择所有客户,并将从 ORDERS 中提取他们所做的相应数量的订单。

SELECT a.ID, a.NAME, b.DATE, b.AMOUNT
FROM CUSTOMERS a, ORDERS b
WHERE a.ID = b.CUSTOMER_ID;

Output

该表显示如下:

Joins Using a Client Program

除了使用 MySQL 查询联接两个或两个以上的表之外,我们还可以使用客户端程序执行联接操作。

Syntax

Example

以下是这些程序 −