带表的SQL访问

带表的SQL访问,sql,database,database-design,Sql,Database,Database Design,它不允许我上传图像,但列是OrderID、CustomerName、CustomerAddress、ProductNumber、SellDate、ProductDescription 我正在努力自学SQL。有人能帮我确定一些事情吗 1) 我想编写一条SQL语句,检索下订单7的客户的客户名称和地址 是这样吗 Select CustomerName, Address From Order Where OrderID = ‘7’ INSERT INTO order(OrderID, Custome

它不允许我上传图像,但列是OrderID、CustomerName、CustomerAddress、ProductNumber、SellDate、ProductDescription

我正在努力自学SQL。有人能帮我确定一些事情吗

1) 我想编写一条SQL语句,检索下订单7的客户的客户名称和地址

是这样吗

Select CustomerName, Address
From Order 
Where OrderID = ‘7’
INSERT INTO order(OrderID, CustomerName, CustomerAddress, ProductNumber, SellDate, ProductDescription) 
VALUES (8, 'Ben C', '12 Kents Road', 01/15/2012, Clay :)); 
2) 接下来,我想编写一条SQL语句,将新订单添加到订单表中

是这样吗

Select CustomerName, Address
From Order 
Where OrderID = ‘7’
INSERT INTO order(OrderID, CustomerName, CustomerAddress, ProductNumber, SellDate, ProductDescription) 
VALUES (8, 'Ben C', '12 Kents Road', 01/15/2012, Clay :)); 
3) 这个数据模型有什么问题,您将如何重新设计它?我真的需要帮助。需要分类吗?我如何描述新的高级设计

4) 如何将这些数据从旧模型移动到新模型


5) 使用新的数据模型,我需要编写一个联接来检索下订单7的客户的客户名称和地址。我还没有到这里,因为我不知道为什么旧的数据模型不好。

首先,您需要回答一个问题:

  • 客户可以下多个订单吗?如果您的回答是“是”,您是否想要一份客户目录
在这种情况下,您需要规范化数据库。首先,您需要将数据分离为逻辑集;在这种情况下,客户、产品和订单。。。我将评估一个订单可以有一个或多个产品

然后,设计您的表(我将使用MySQL风格的代码):

您的客户目录:

create table tbl_customers (
    customerId int not null primary key,
    customerName varchar(100),
    customerAdress varchar(200)
);
create table tbl_products (
    productNumber int not null primary key,
    productName varchar(100),
);
create table tbl_orders (
    orderId int not null primary key,
    orderDate date,
    customerId int unsigned not null
);
您的产品目录:

create table tbl_customers (
    customerId int not null primary key,
    customerName varchar(100),
    customerAdress varchar(200)
);
create table tbl_products (
    productNumber int not null primary key,
    productName varchar(100),
);
create table tbl_orders (
    orderId int not null primary key,
    orderDate date,
    customerId int unsigned not null
);
您的订单目录:

create table tbl_customers (
    customerId int not null primary key,
    customerName varchar(100),
    customerAdress varchar(200)
);
create table tbl_products (
    productNumber int not null primary key,
    productName varchar(100),
);
create table tbl_orders (
    orderId int not null primary key,
    orderDate date,
    customerId int unsigned not null
);
对于每个订单,您需要知道您将订购哪些产品的“单位”:

create table tbl_orders_products (
    orderProductId int not null primary key,
    orderId int not null,
    productNumber int not null,
    units int,
);
在此之后,您将使用数据填充表,然后可以执行适合您的查询

请注意:

  • tbl\u订单
    tbl\u客户
    相关。。。您的客户的数据必须先插入
    tbl_customers
    ,然后才能下订单
  • 在插入订单的详细信息之前,您需要创建订单
  • 在插入订单的详细信息之前,您需要填充
    tbl\u产品
这只是解决问题的一种方法

希望这对你有帮助


现在,如果您想移动到此模型,您需要做一些工作:

  • 填充产品目录:
    插入tbl_产品值(1,'productA'),(2,'productB'),…
  • 填充您的客户目录
  • 然后你就可以开始下订单了。我会告诉你你有以下客户:

    customerId | customerName | customerAdress
    ---------------------------------------------
             1 | John Doe     | 31 elm street
             2 | Jane Doe     | 1223 park street
    
    。。。和产品:

    productNumber | productName
    ------------------------------
             1000 | Pencil
             2000 | Paper clip
             3000 | Bottled water
    
    现在,下订单需要两个步骤:首先,创建订单记录,然后插入订单详细信息:

  • 订单(客户John Doe):
    插入tbl_订单值(1,'2012-10-17',1)

  • 订单详情(一支铅笔,十个回形针):
    插入tbl_订单_产品值(1,1,1000,1)、(2,1,2000,10)

  • 现在,要选择订单7的客户(如问题中所述),您可以使用以下查询:

    select c.*
    from tbl_customers as c
    inner join tbl_orders as o on c.customerId = o.customerId
    where o.orderId = 7;
    
    这只是一个起点。你应该寻找好书或在线教程(w3教程可以是一个很好的在线“起点”)


    虽然我不太喜欢MS Access,但它是学习sql基础知识的好程序,而且有很多关于它的书籍和学习资源注意:我不喜欢Access,我也不想宣传它,但它可能是一个很好的学习工具。

    一个简单的提示。在为数据解决方案建模时,试着写下描述场景的简单句子。例如(好的,这只是一个基本问题):

    • 订单由许多订单行组成
    • 订单行指的是产品
    • 客户创建了许多订单
    这里,名词描述了场景的实体。然后,对于每个实体,尝试描述其属性:

    • 订单以唯一的序列号、日期和总数为特征。它指的是客户
    • 订单行是指产品,其特征是数量、单价和小计
    • 顾客
    等等。 在您的模型中,大致需要为每个实体创建一个表。表字段取自每个实体的属性。对于每个字段,请记住定义正确的数据类型


    好的,这不是一个建模教程,但它是一个起点,只是为了接近解决方案。

    首先,你需要正常化,这方面有很多东西,但是大量的教程试图利用一些常识,让它变得非常模糊

    看看你的列名,我看到了三个表

    客户(CustomerID、CustomerName、CustomerAddress)

    CustomerOrder(OrderID、CustomerID、SellDate、ProductNumber)尝试不将表和列命名为Sql关键字

    产品(产品编号、产品描述)

    规范化表示,您应该能够唯一地标识表中的任何记录,您可以使用OrderId标识这些记录。当我拆分表时,我添加了CustomerID,因为可以有多个同名的客户

    另一个简单的规则是在您的结构中,如果您为一个客户下了多个订单,您将多次存储他们的姓名和地址,这是浪费,但真正的问题是,如果该客户更改了地址怎么办?您如何找到要更改的行,您可以在Where name=“Fred”和Address=“Here”中进行更改,但您不知道是否有多个客户呼叫了地址为Here的Fred

    所以您的第一个查询将是一个连接

    Select Customers.CustomerName,Customers.CustomerAddress From Customers
    Inner join CustomerOrders On Customers.CustomerID = CustomerOrders.CustomerID
    Where CustomerOrders.OrderID = 7
    
    或者,如果您现在想跳过过去的学习连接,您可以通过两个查询来完成

    Select CustomerID From CustomerOrders Where OrderID = 7
    
    然后

    您应该使用联接,但您可能会发现子查询更容易理解。您可以使用同时执行两个查询

    Select CustomerID From CustomerOrders 
    Where CustomerID In (Select CustomerID From CustomerOrders Where OrderID = 7)
    
    不知道sql表的创建有多大进展,但主键和外键是需要考虑的两件事。那会让你