SQL在两个表之间创建连接

时间:2014-12-24 14:46:04

标签: sql-server

我想创建三个表。

  1. 订单(包含订单ID和客户名称)
  2. 产品(包含产品ID,描述和价格)
  3. 订单项(包含订单ID,订单项ID,产品ID和数量)
  4. 我希望我的网络应用允许客户选择订单号,因此,它会显示该订单中的产品,所述产品的数量,产品的价格以及总价格我将在我的代码中动态计算的订单。

    我的SQL看起来像这样

    CREATE TABLE Products
    (
    ProductID int NOT NULL,
    ProductDescription varchar(MAX) NOT NULL,
    ProductPrice smallmoney NOT NULL,
    PRIMARY KEY (ProductID)
    )
    
    CREATE TABLE Orders(
    OrderID int NOT NULL,
    CustomerName varchar(MAX) NOT NULL,
    PRIMARY KEY (OrderID)
    )
    
    CREATE TABLE LineItem(
    LineItemID int NOT NULL,
    OrderID int NOT NULL FOREIGN KEY REFERENCES Orders(OrderID),
    ProductID int NOT NULL FOREIGN KEY REFERENCES Products(ProductID),
    Quantity int NOT NULL,
    PRIMARY KEY (LineItemID)
    )
    

    这是包含关系的数据库图表。 Database diagram

    以下是所有表格上的select all语句的结果

    database tables

    我的关系是否正确设置了我想达到的目标?我很抱歉,如果这看起来很简单,但我对此很新,虽然SQL语句非常简单,但关联表的方法却并非如此。

2 个答案:

答案 0 :(得分:2)

SELECT p.ProductPrice, p.ProductDescription, o.CustomerName, l.Quantity 
FROM LineItem AS l 
INNER JOIN Products AS p ON l.ProductID=p.ProductID 
INNER JOIN Orders AS o ON l.OrderID=o.OrderID 
ORDER BY l.LineItemID 

将提供来自所有这些表的组合信息。您可以添加要从中获取数据的任何其他列。

INNER JOINJOIN关键字是语法糖,具有相同的效果。当您按INNER JOIN绑定两个表时,只会返回包含在这两个表中的结果。

使用ON关键字,您将定义表的关系列。例如,在INNER JOIN Products AS p ON l.ProductID=p.ProductID子句中,我定义表ProductID的列Products中的数据与表ProductID的列LineItem是关系的。

答案 1 :(得分:1)

您在产品订单之间存在多对多关系,因此在 LineItem 的结构中table我认为您已经拥有主键(Product Id,OrderID),我认为您不需要 LocalItemID

CREATE TABLE LineItem(
 OrderID int NOT NULL FOREIGN KEY REFERENCES Orders(OrderID),
 ProductID int NOT NULL FOREIGN KEY REFERENCES Products(ProductID),
 Quantity int NOT NULL,
 PRIMARY KEY (OrderID ,ProductID )
)

您可以使用以下方法加入表:

SELECT p.ProductPrice, o.CustomerName, li.Quantity 
 FROM LineItem AS li 
 JOIN Products AS p ON li.ProductID=p.ProductID 
 JOIN Orders ON li.OrderID=o.OrderID