
3.1 单行新增
单行新增一次只向表中插入一条记录。单行新增主要包括两种方式,一种通过关键字values完成,另一种通过关键字select完成。接下来,分别对values单行新增和select单行新增进行详细介绍。
3.1.1 values单行新增
values单行新增语法如以下代码所示。
insert into table_name [(column[, column...])] values(value[, value...]);
代码中各关键字的解释如下。
❑ insert into:关键字,标识当前命令属于SQL插入命令。
❑ table_name:代表要插入数据的表名。
❑ column:代表列名。
❑ values:关键字,后面跟列值。
❑ value:代表列值。
注:列值与列名要一一对应。
接下来,通过几个例子来帮助读者掌握values单行新增的用法。
例3-1:将员工工号为3030的员工插入员工表中,同时指定列名和列值。
SQL Server数据库的写法如图3-1所示。

图3-1
Oracle数据库的写法如图3-2所示。

图3-2
例3-2:将员工工号为3031的员工插入员工表中,省略列名,只指定列值。
table_name后面如果不带任何列名,表示要向所有列里面插入数据,values后面必须跟齐所有列对应的值。并且,列值的顺序与表结构中列属性的顺序要完全一致。
SQL Server数据库的写法如图3-3所示。

图3-3
Oracle数据库的写法如图3-4所示。

图3-4
例3-3:将员工工号为3032的员工插入员工表中,只指定非空列的列名及列值。
对于非空列,如果没有创建默认值约束,在插入的时候,values后面必须指定要插入的列值。在EMP表中,EMPNO、HIREDATE两列建有非空约束,HIREDATE建有默认值约束。所以,EMPNO列必须指定要插入的列值,而HIREDATE列可以指定列值也可以不指定列值,指定的时候插入指定的列值,不指定的时候,插入默认值;也可以指定DEFAULT插入默认值。
对于SQL Server数据库,缺省列指定固定值的写法如图3-5所示。

图3-5
对于Oracle数据库,缺省列指定固定值的写法如图3-6所示。

图3-6
例3-4:将员工工号为3033的员工插入员工表中,用关键字default指定包含默认值约束的列值。
SQL Server数据库与Oracle数据库中缺省列指定default的共同写法如图3-7所示。

图3-7
例3-5:将员工工号为3034的员工插入员工表中,只指定建有非空约束并且未建默认值约束的列名及列值。
SQL Server数据库与Oracle数据库中建有默认值约束的列、不指定列值的共同写法如图3-8所示。在这种情况下,数据库会将默认值插入HIREDATE列中。

图3-8
3.1.2 select单行新增
用select实现单行新增,除了default关键字不能使用外,其他情况跟values基本相同。在SQL Server数据库中,select后面一系列的常量值可以直接用逗号隔开,而不需要from关键字。但是,Oracle数据库必须跟上from关键字及表名。此处我们可以使用系统表DUAL,该表只有一行一列,这样可以只返回一行记录。select单行新增是一种特殊的查询结果新增方式,查询结果新增将在3.3节详细介绍。用select替换values后,values语法中的例子转换成如下情况。
SQL Server数据库中的写法如图3-9~图3-12所示。

图3-9

图3-10

图3-11

图3-12
Oracle数据库中的写法如图3-13~图3-16所示。

图3-13

图3-14

图3-15

图3-16