实践 INNER JOIN 查询,组合来自关联表的数据。这些练习将使用一个小型在线商店数据库。数据库结构示例假设我们有三张表:Customers、Orders 和 Products。1. 客户表 (Customers)此表存储注册客户的信息。客户ID (主键)名姓电子邮件注册日期1AliceSmithalice@example.com2023-01-152BobJohnsonbob.j@example.net2023-02-203CharlieDavischarlie.d@mail.org2023-01-104DianaBrowndiana@sample.com2023-03-05customer_id 是此表的主键 (PK)。2. 订单表 (Orders)此表记录客户订单。订单ID (主键)客户ID (外键)产品ID (外键)订单日期数量10115012023-03-10110235022023-03-12210315032023-03-15110425012023-03-16310545042023-03-18110635012023-03-201order_id 是主键 (PK)。customer_id 是一个外键 (FK),引用 Customers(customer_id)。product_id 是一个外键 (FK),引用 Products(product_id)。3. 产品表 (Products)此表列出可用的产品。产品ID (主键)产品名称类别价格501笔记本电脑科技1200502键盘科技75503咖啡杯家居15504台灯家居45505无线鼠标科技25product_id 是主键 (PK)。以下是这些表如何关联的视觉表示:digraph G { rankdir=LR; node [shape=box, style=rounded, fontname="Helvetica", fontsize=10]; edge [fontsize=10]; Customers [label="客户表\n(customer_id 主键)"]; Orders [label="订单表\n(order_id 主键)\n(customer_id 外键)\n(product_id 外键)"]; Products [label="产品表\n(product_id 主键)"]; Customers -> Orders [label="customer_id"]; Products -> Orders [label="product_id"]; }关系图显示 Customers 和 Products 表分别通过外键 customer_id 和 product_id 链接到 Orders 表。现在,让我们来编写一些查询!练习 1:获取客户姓名和订单日期目标: 获取一个列表,显示每位客户的名以及他们所下每个订单的日期。方法: 我们需要来自 Customers(名)和 Orders(订单日期)的数据。这些表通过 customer_id 关联。我们将在该公共列上使用 INNER JOIN。查询:SELECT Customers.first_name, Orders.order_date FROM Customers INNER JOIN Orders ON Customers.customer_id = Orders.customer_id;说明:SELECT Customers.first_name, Orders.order_date: 指定我们想要从每张表中获取的列。我们使用 TableName.ColumnName 语法进行明确指定,特别是当列名可能在两张表中都存在时(尽管此处 first_name 和 order_date 的情况并非如此)。FROM Customers: 指定第一张表。INNER JOIN Orders: 指定我们想要连接的第二张表。ON Customers.customer_id = Orders.customer_id: 这是连接条件。它告诉数据库匹配 Customers 表中 customer_id 与 Orders 表中 customer_id 相同的行。只有匹配的行才会包含在结果中。预期输出:名订单日期Alice2023-03-10Charlie2023-03-12Alice2023-03-15Bob2023-03-16Diana2023-03-18Charlie2023-03-20练习 2:使用表别名目标: 获取 order_id、客户的 email 和 order_date。使用表别名以求简洁。在输出中将 email 列重命名为 customer_email。方法: 我们再次连接 Customers 和 Orders。这次,我们将使用简短的别名(c 代表 Customers,o 代表 Orders),使查询更易于阅读和编写。我们还为 email 使用列别名。查询:SELECT o.order_id, c.email AS customer_email, o.order_date FROM Customers AS c INNER JOIN Orders AS o ON c.customer_id = o.customer_id;说明:Customers AS c: 将别名 c 分配给 Customers 表。Orders AS o: 将别名 o 分配给 Orders 表。o.order_id、c.email、o.order_date: 我们使用别名(c. 和 o.)来引用列,而不是完整的表名。c.email AS customer_email: 使用列别名将结果集中的 email 列重命名为 customer_email。ON c.customer_id = o.customer_id: 连接条件现在使用表别名。预期输出:订单ID客户电子邮件订单日期101alice@example.com2023-03-10102charlie.d@mail.org2023-03-12103alice@example.com2023-03-15104bob.j@example.net2023-03-16105diana@sample.com2023-03-18106charlie.d@mail.org2023-03-20练习 3:连接三张表目标: 获取一个组合列表,显示客户的名、所订购产品的名称和订购数量。方法: 我们需要来自所有三张表的信息:Customers(名)、Products(产品名称)和 Orders(数量)。我们需要两个 INNER JOIN 子句:一个将 Customers 连接到 Orders(使用 customer_id),另一个将 Orders 连接到 Products(使用 product_id)。我们将再次使用表别名。查询:SELECT c.first_name, p.product_name, o.quantity FROM Customers AS c INNER JOIN Orders AS o ON c.customer_id = o.customer_id INNER JOIN Products AS p ON o.product_id = p.product_id; 说明:我们首先通过 customer_id 连接 Customers (c) 和 Orders (o)。然后,我们添加另一个 INNER JOIN 以引入 Products 表 (p)。第二个 ON 子句(o.product_id = p.product_id)根据 product_id 将第一次连接的结果(包含 o.product_id)连接到 Products 表。SELECT 列表从所有三个使用了别名的表(c、p、o)中提取列。预期输出:名产品名称数量Alice笔记本电脑1Charlie键盘2Alice咖啡杯1Bob笔记本电脑3Diana台灯1Charlie笔记本电脑1练习 4:组合 JOIN、WHERE 和 ORDER BY目标: 找出客户ID为1(Alice)所下所有订单的 order_id 和 product_name。按 order_id 对结果排序。方法: 我们需要连接 Orders 和 Products 以获取与每个订单关联的产品名称。然后,我们使用 WHERE 子句筛选结果,仅包含来自 customer_id = 1 的订单。最后,我们使用 ORDER BY 进行排序。查询:SELECT o.order_id, p.product_name FROM Orders AS o INNER JOIN Products AS p ON o.product_id = p.product_id WHERE o.customer_id = 1 ORDER BY o.order_id;说明:我们首先通过 product_id INNER JOIN Orders (o) 和 Products (p)。WHERE o.customer_id = 1: 此子句过滤连接后的结果,仅保留 Orders 表中 customer_id 为 1 的行。请注意,如果我们也连接了 Customers 表,我们也可以使用 WHERE c.customer_id = 1,但由于 customer_id 已经存在于 Orders 表中,因此对于此特定查询目标,连接 Customers 并非绝对必要。ORDER BY o.order_id: 根据 order_id 对最终筛选的结果集进行升序排序(这是默认排序方式)。预期输出:订单ID产品名称101笔记本电脑103咖啡杯这些实践示例表明 INNER JOIN 如何让您将分散在不同表中的关联信息编织在一起。通过熟练掌握连接、使用主键和外键正确指定连接条件以及运用别名,您可以构建有效的查询,从关系数据库中提取有价值的信息。尝试修改这些查询或基于示例数据创建您自己的查询,以便更深入地理解表组合。