📜  门| GATE CS Mock 2018年|套装2 |问题25(1)

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

GATE CS Mock 2018年 - 套装2 - 问题25

这是一道涉及使用RDBMS(关系型数据库管理系统)的问题。在这个问题中,我们需要建立一些数据表,对这些表进行查询与更新操作。

数据表的创建

根据题目描述,我们需要创建三个数据表:customersordersorder_items

Customers
CREATE TABLE customers (
  customer_id INT PRIMARY KEY,
  name VARCHAR(50),
  email VARCHAR(50),
  phone VARCHAR(15),
  address VARCHAR(100)
);

customers表中,我们创建了customer_id列作为主键,并且为每个客户存储他们的名称、电子邮件、电话和地址。

Orders
CREATE TABLE orders (
  order_id INT PRIMARY KEY,
  order_date DATE,
  customer_id INT REFERENCES customers(customer_id),
  total_amount DECIMAL(10,2)
);

orders表中,我们创建了order_id列作为主键,并在该表中引用了customers表中的customer_id列作为外键,以包括每个订单的客户信息。此外,我们还存储了订单的总金额total_amount

Order_items
CREATE TABLE order_items (
  item_id INT PRIMARY KEY,
  order_id INT REFERENCES orders(order_id),
  product_name VARCHAR(50),
  quantity INT,
  price DECIMAL(10,2)
);

order_items表中,我们存储每个订单中的商品信息,同时使用order_id引用了orders表中的外键,以包含每个商品的订单信息。

查询数据
查询订单信息
SELECT o.order_id, o.order_date, c.name, c.email, c.phone, c.address, o.total_amount
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id;

此查询将展示每个订单以及相关客户的详细信息。

查询订单中产品的数量和总金额
SELECT o.order_id, SUM(oi.quantity) AS total_items, SUM(oi.price * oi.quantity) AS total_amount
FROM orders o JOIN order_items oi ON o.order_id = oi.order_id
GROUP BY o.order_id;

此查询将展示每个订单的总商品数量和总金额。

更新数据
添加新客户
INSERT INTO customers (customer_id, name, email, phone, address) VALUES (1, 'John Doe', 'johndoe@example.com', '+1234567890', '123 Main St, Anytown USA');

此查询将向customers表中添加新客户的信息。

添加新订单
INSERT INTO orders (order_id, order_date, customer_id, total_amount) VALUES (1, '2020-01-01', 1, 100.00);

此查询将向orders表中添加新订单的信息。

添加新产品
INSERT INTO order_items (item_id, order_id, product_name, quantity, price) VALUES (1, 1, 'Product A', 1, 50.00);
INSERT INTO order_items (item_id, order_id, product_name, quantity, price) VALUES (2, 1, 'Product B', 2, 25.00);

此查询将向order_items表中添加新产品的信息,并将它们关联到之前添加的订单。