当创建新表时新表不包含任何数据要将新的行输入表中使用 INSERT 语句此语句有两种一般格式
一种格式使用 VALUES 子句来指定一行或多行的列值下面三个示例使用此一般格式将数据插入表中
另一种格式指定全查询而非指定 VALUES 来标识来自包含在其他表和/或视图中的行的列
全查询是 INSERT 或 CREATE VIEW 语句中所使用的选择语句或者是跟在谓词后面的选择语句括在括号中的全查询一般称为子查询
根据创建表时已选择的缺省选项对于每个插入的行为每一列提供一个值或者接受一个缺省值各种数据类型的缺省值在 SQL Reference 中讨论
下列语句使用 VALUES 子句将一行数据插入 PERS 表中
INSERT INTO PERS
VALUES ( Harris Sales )
下列语句使用 VALUES 子句将三行插入其中只有 ID名称以及工作是已知的 PERS 表中如果列定义为 NOT NULL 且没有缺省值则必须为该列指定一个值 CREATE TABLE 语句中的列定义上的 NOT NULL 子句可以用单词 WITH DEFAULT 扩充如果某一列定义为 NOT NULL WITH DEFAULT 或常数缺省值(如 WITH DEFAULT )并且您未在列列表中指定该列则缺省值插入至已插入行的该列中例如在 CREATE TABLE 语句中仅为 DEPT 列指定了缺省值并将该值定义为 因此DEPT 设置为 而所有其他列都为空
INSERT INTO PERS (NAME JOB ID)
VALUES (Swagerman Prgmr )
(Limoges Prgmr )
(Li Prgmr )
下列语句返回插入的结果
SELECT *
FROM PERS
注意在此情况下并未给每个列指定值空值显示为 为此列名列表的次序和数据类型都必须与 VALUES 子句中提供的值对应如果省略列名列表(如第一个示例中那样)则 VALUES 之后的数据值列表的次序必须与它们所插入至的表中的列次序相同值的数目必须等于表中列的数目
每个值必须与它所插入至的列的数据类型相容如果某列定义为可空且未指定该列的值则将空值赋给插入行中的该列
下列示例将空值插入 YEARSCOMM 和 BIRTH_DATE 中因为未给行中的那些列指定值
INSERT INTO PERS (ID NAME JOB DEPT SALARY)
VALUES ( Perna Sales )
INSERT 语句的第二种格式对于用来自另一表中行的值填充表非常方便如所述的那样指定全查询而非指定 VALUES 以标识来自包含在其他表和/或视图中的行中的列
下列示例从员工 STAFF 表中选择部门 的成员的数据并将它插入 PERS 表中
INSERT INTO PERS (ID NAME DEPT JOB YEARS SALARY)
SELECT ID NAME DEPT JOB YEARS SALARY
FROM STAFF
WHERE DEPT =
在此插入之后下列 SELECT 语句与 INSERT 语句中全查询产生的结果相同
SELECT ID NAME DEPT JOB YEARS SALARY
FROM PERS
WHERE DEPT =
结果为