📜  sql 查询内连接 3 个表 - SQL (1)

📅  最后修改于: 2023-12-03 15:20:17.241000             🧑  作者: Mango

SQL查询内连接3个表

在SQL中,内连接是最常用的技术之一,它有助于在多个表之间进行关联和过滤,从而得到所需的结果。本文将介绍如何使用SQL查询内连接3个表。

数据库和表结构

在本文中,我们将使用以下三个表:

  • customers表,其结构如下:
CREATE TABLE customers (
    id INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    email VARCHAR(50) NOT NULL
);
  • orders表,其结构如下:
CREATE TABLE orders (
    id INT PRIMARY KEY,
    customer_id INT NOT NULL,
    amount FLOAT NOT NULL,
    order_date DATE NOT NULL,
    FOREIGN KEY (customer_id) REFERENCES customers(id)
);
  • order_items表,其结构如下:
CREATE TABLE order_items (
    id INT PRIMARY KEY,
    order_id INT NOT NULL,
    product_name VARCHAR(50) NOT NULL,
    quantity INT NOT NULL,
    price FLOAT NOT NULL,
    FOREIGN KEY (order_id) REFERENCES orders(id)
);

我们假设这三个表中都已经有了一个或多个记录。

查询内连接

查询内连接是一种同时在多个表中查找记录的方法,只返回符合特定条件的记录。内连接的语法如下:

SELECT column1, column2, ... FROM table1 INNER JOIN table2 ON condition1 INNER JOIN table3 ON condition2 WHERE condition3;

在这个查询中,您需要指定要选择的列,然后使用 INNER JOIN 子句将多个表连接在一起。连接的顺序可能会影响结果的性能和正确性,因此需要小心。连接条件必须在每个连接之间指定,例如在 table1table2 之间连接时,条件1必须在两个表的名称之间指定,如下所示:

SELECT column1, column2, ... FROM table1 INNER JOIN table2 ON condition1 INNER JOIN table3 ON condition2 WHERE condition3;

最后,您可以使用 WHERE 子句指定特定的条件,以进一步过滤结果。

示例

以下是一个从 customersorders order_items 表中选择数据的示例查询。该查询将返回所有定单记录,包括顾客和订单项的信息:

SELECT customers.name, orders.order_date, order_items.product_name, order_items.quantity, order_items.price
FROM customers 
INNER JOIN orders ON customers.id = orders.customer_id 
INNER JOIN order_items ON orders.id = order_items.order_id;

在这个查询中,我们选择了三个表中的列,并使用 INNER JOIN 子句将它们连接起来。我们还在每个连接之间指定了条件,以确保只返回符合要求的记录。最后,我们使用了 customersordersorder_items表中的几个列来构造结果。

总结

使用 INNER JOIN 子句在多个表中执行内连接是一种高效,实用的方法,您可以使用它来过滤结果并从多个表中选择数据。在使用内连接时,请确保正确指定连接条件,并始终使用正确的语法。