TOP

SQL-第 13 课。添加数据 (INSERT INTO)

在前面的部分中,我们考虑了从先前创建的表中检索数据的工作。现在是时候弄清楚如何创建/删除表、添加新记录和删除旧记录了。

为此,SQL 中有如下运算符:

  • CREATE - 创建一个表;
  • ALTER - 更改表的结构;
  • DROP - 删除表或字段;
  • INSERT - 将数据添加到表中。
  • 让我们开始通过 INSERT 运算符来熟悉这组运算符。


    1. 添加整行

    顾名思义,INSERT INTO 运算符用于将行插入(添加)到数据库表中。

    添加可以通过多种方式完成:

  • 添加一整行;
  • 添加新行的一部分;
  • 添加查询结果。
  • 因此,要向表中添加新行,我们需要指定表名,列出列名,并使用 INSERT INTO table_name(field1, field2 ...) VALUES (value1, value2 ...) 构造。让我们考虑一个例子。

    INSERT INTO Sellers (ID, Address, City, Seller_name, Country) 
    VALUES ('6', '1st Street', 'Los Angeles', 'Harry Monroe', 'USA')
    

    您还可以更改列名的顺序,但同时需要更改VALUES参数中值的顺序。

    2.添加部分线条

    在前面的示例中,当使用 INSERT 运算符时,我们显式指定了表列的名称。使用这种语法,我们可以跳过一些列。这意味着您为某些列输入值,而不为其他列提供值。例子:

    INSERT INTO Sellers (ID, City, Seller_name) 
    VALUES ('6', 'Los Angeles', 'Harry Monroe')
    

    在这个例子中,我们没有为Address和Country两列指定值。如果允许您定义表,您可以从 aaa 语句中排除某些列。在这种情况下,必须满足以下条件之一:该列被定义为允许空值(没有任何值)或在表定义中指定了默认值。这意味着如果未指定值,则将使用默认值。如果您从表中省略一列,该列不允许 NULL 值出现在其行中,并且没有定义默认使用的值,则 DBMS 将发出错误消息,并且不会添加该行。

    3. 添加选定的数据

    在前面的示例中,我们通过在查询中手动键入数据将数据插入到表中。然而,如果我们想从另一个表插入数据,INSERT INTO 运算符允许我们自动执行此过程。为此,SQL 中有这样的结构: INSERT INTO ... SELECT ... 。这种设计允许您同时从一个表中选择数据并将它们插入到另一个表中。假设我们有另一个表 Sellers_EU,其中包含我们产品在欧洲的卖家列表,我们需要将它们添加到通用表 Sellers 中。这些表的结构是相同的(相同的列数和相同的名称),但数据不同。为此,我们可以编写以下查询:

    INSERT INTO Sellers (ID, Address, City, Seller_name, Country) 
                 SELECT ID, Address, City, Seller_name, Country 
                 FROM Sellers_EU
    

    需要注意的是内部键的值不要重复(ID字段),否则会出错。 SELECT 语句还可以包含 WHERE 子句来过滤数据。还应该注意的是,DBMS 并不关心 SELECT 运算符中包含的列的名称,它只关心它们所在位置的顺序。因此,无论字段名称如何,通过 SELECT 选择的第一个指定列中的数据在任何情况下都将填充到 INSERT INTO 运算符之后指定的 Sellers 表的第一列中。

    4. 将数据从一个表复制到另一个表

    通常,在使用数据库时,需要创建任何表的副本以进行备份或修改。为了在 SQL 中创建表的完整副本,提供了单独的运算符 SELECT INTO。例如,我们需要创建表Sellers的副本,我们需要编写如下查询:

    SELECT * INTO Sellers_new 
    FROM Sellers
    

    与之前的构造 INSERT INTO ... SELECT ... 不同,当将数据添加到现有表时,构造 SELECT ... INTO ... FROM ... 将数据复制到新表。也可以说,第一个建筑导入数据,第二个建筑导出数据。

    当使用结构 SELECT ... INTO ... FROM ... 时,应考虑以下因素:

  • 您可以在 SELECT 语句中使用任何子句,例如 GROUP 、 BY 和 HAVING ;
  • 您可以使用联合来添加多个表中的数据;
  • 数据只能添加到一张表中,无论它是从多少张表中获取的。