基本SQL插入语句方法

基本SQL插入语句方法,sql,sql-server,Sql,Sql Server,因为我有两张桌子 客户(id int,用户名varchar) 订单(客户id整数,订单日期时间) 现在,我想根据客户表中提供的客户信息插入订单表 有几种方法可以解决这个问题 首先,我可以将客户信息查询到一个变量中,然后在INSERT语句中使用它 DECLARE @Customer_ID int SELECT @Customer_ID = id FROM Customer where username = 'john.smith' INSERT INTO Orders (customer_id

因为我有两张桌子

  • 客户(id int,用户名varchar)
  • 订单(客户id整数,订单日期时间)
现在,我想根据客户表中提供的客户信息插入订单表

有几种方法可以解决这个问题

首先,我可以将客户信息查询到一个变量中,然后在INSERT语句中使用它

DECLARE @Customer_ID int
SELECT @Customer_ID = id FROM Customer where username = 'john.smith'
INSERT INTO Orders (customer_id, order_date) VALUES (@Customer_ID, GETDATE())
第二种方法是结合使用INSERT和SELECT查询

INSERT INTO Orders (customer_id, order_date)
SELECT id, GETDATE() FROM Customers
WHERE username = 'john.smith'
所以我的问题是,在速度和开销方面,哪种方式更好,为什么?我知道,如果我们从Customer表中查询了大量信息,那么第二种方法会更好


p、 我在一次技术采访中被问到这个问题。

我不推荐任何一种方法。为什么一开始你只有客户的名字而没有id?您是否有一个用户界面,通过将ID保持在其状态来维护对当前客户的引用?按名称查找可能会使您选择错误的客户


如果您出于我不知道的原因而必须这样做,那么第二种方法肯定更有效,因为它只包含一条语句。

我不推荐任何一种方法。为什么一开始你只有客户的名字而没有id?您是否有一个用户界面,通过将ID保持在其状态来维护对当前客户的引用?按名称查找可能会使您选择错误的客户

DECLARE @Customer_ID int
SELECT @Customer_ID = id FROM Customer where username = 'john.smith'
INSERT INTO Orders (customer_id, order_date) VALUES (@Customer_ID, GETDATE())

如果您因为我不知道的原因而必须这样做,那么第二种方法肯定更有效,因为它只包含一条语句。

在典型的真实订单输入系统中,用户已经通过搜索界面查找客户,或者从按字母顺序显示的客户列表中选择客户;因此,当您的客户机程序为该客户插入订单时,它已经知道CustomerID

DECLARE @Customer_ID int
SELECT @Customer_ID = id FROM Customer where username = 'john.smith'
INSERT INTO Orders (customer_id, order_date) VALUES (@Customer_ID, GETDATE())
此外,订单日期通常默认为getdate(),作为订单表定义的一部分,您的查询通常可以忽略该列


但是,要处理订单上的多个行项目,您的“插入到订单”标题需要返回订单标题id,以便可以将其插入到订单明细行项目的子行中。

在典型的真实订单输入系统中,用户已经通过搜索界面查找客户,或者从按字母顺序显示的客户列表中选择客户;因此,当您的客户机程序为该客户插入订单时,它已经知道CustomerID

此外,订单日期通常默认为getdate(),作为订单表定义的一部分,您的查询通常可以忽略该列


但要处理订单上的多个行项目,您的“插入订单”标题需要返回订单标题id,以便可以将其插入订单明细行项目的子行。

第二种方法更好

如果找不到客户,第一种方法将失败。未进行检查以确保已返回客户id

如果找不到客户,第二种方法将一事无成


从开销的角度来看,如果不需要变量,为什么要创建它们。基于集合的sql通常是更好的方法。

第二种方法更好

如果找不到客户,第一种方法将失败。未进行检查以确保已返回客户id

如果找不到客户,第二种方法将一事无成


从开销的角度来看,如果不需要变量,为什么要创建它们。基于集合的sql通常是更好的方法。

将订单表中的客户id设置为指向客户表的外键。

将订单表中的客户id设置为指向客户表的外键。

您在采访中如何回答这个问题?我给了他们与您类似的答案。只是想听听大家的意见。谢谢你的回答。你在面试中是如何回答这个问题的?我给了他们和你一样的答案。只是想听听大家的意见。谢谢你的回复。