数据的插入(INSERT语句的使用方法)

我们之前在表的创建部分简单地介绍了一下INSERT语句的功能和使用方法,现在我们再详细讲一下它的用法。

INSERT语句的基本语法

其语法结构如下:

INSERT INTO <表名> (列名1,列名2,列名3...)
    -> VALUES (数据1,数据2,数据3...);

例:

hive interval 关键字 hive insert语句字段顺序_数据


将列名和值用逗号隔开,分别括在()内,这种形式称为清单。像上面这个例子就分为列清单值清单

列清单的省略

但我们对表进行全列INSERT时,可以省略表名后面的列清单,这时VALUES子句的值就会默认按照从左到右的顺序赋给每一列,但是,要注意此时VALUES子句的中的值要按照创建表时列的默认顺序来插入,否则将会出现错误。

例:值清单中的数据不按照列的默认顺序

hive interval 关键字 hive insert语句字段顺序_表名_02


例:正确的做法

hive interval 关键字 hive insert语句字段顺序_默认值_03

插入NULL

使用INSERT语句想要给某一列赋予NULL值时,可以直接在VALUES子句得值清单中写入NULL。

例:

hive interval 关键字 hive insert语句字段顺序_默认值_04


注意:想要插入NULL的列一定不能设置NOT NULL约束,否则,向设置了NOT NULL约束的列中插入NULL时,INSERT语句会出现错误。

插入默认值

我们还可以向表中插入默认值(初始值)。可以通过在创建表的CREATE TABLE语句中设置DEFAULT约束来设定默认值。

例:设置默认值

hive interval 关键字 hive insert语句字段顺序_hive interval 关键字_05


在上表中我们设置了学生编号的默认值为0,如下图我们可以看到student_id那一列的默认值为0。

hive interval 关键字 hive insert语句字段顺序_表名_06

默认值的使用方法通常有显式和隐式两种。

通过显式方法插入默认值

在VALUES子句中指定DEFAULT关键字。

例:通过显式方法设定默认值

hive interval 关键字 hive insert语句字段顺序_数据_07


hive interval 关键字 hive insert语句字段顺序_数据_08


因为student_id列的默认值是0,所以student_id列被赋予了0。

通过隐式方法插入默认值

插入默认值时也可以不使用DEFAULT关键字,只要在列清单和VALUES中省略设定了默认值的列就可以了,如下图:

hive interval 关键字 hive insert语句字段顺序_数据_09


hive interval 关键字 hive insert语句字段顺序_表名_10


注意:如果我们省略了没有设定默认值的列,该列的值就会被设定为NULL(仅限未设置NOT NULL约束的列)

从其他表中复制数据

要插入数据,除了使用VALUES子句指定具体的数据之外,还可以从其他表中复制数据,如下:

只复制表的结构,不复制表的数据

语法结构如下:

CREATE TABLE <新表名> SELECT * FROM <旧表名> WHERE 1=2;

CREATE TABLE <新表名> LIKE <旧表名>;

例:

hive interval 关键字 hive insert语句字段顺序_表名_11



hive interval 关键字 hive insert语句字段顺序_表名_12


查看新表中是否存在数据

hive interval 关键字 hive insert语句字段顺序_hive interval 关键字_13



hive interval 关键字 hive insert语句字段顺序_表名_14


我们可以看到新表中是空的,只有旧表的结构,并不存在任何数据。

复制表的结构和数据

方法一

语法结构如下:

CREATE TABLE <新表名> SELECT * FROM <旧表名>;

例:

hive interval 关键字 hive insert语句字段顺序_表名_15


hive interval 关键字 hive insert语句字段顺序_hive interval 关键字_16


hive interval 关键字 hive insert语句字段顺序_数据_17


我们可以看到,新表完全复制了旧表的结构和表中存在的数据。

方法二

使用INSERT INTO SELECT 语句从旧表复制数据,然后把数据插入到一个已存在的表(新表)中,新表中任何已存在的行都不会受影响。
语法结构如下:

INSERT INTO <新表> SELECT * FROM <旧表>;

例:

我们先创建一个新表

hive interval 关键字 hive insert语句字段顺序_默认值_18


我们可以先往新表中插入数据

hive interval 关键字 hive insert语句字段顺序_表名_19


进行复制操作

hive interval 关键字 hive insert语句字段顺序_表名_20


查看复制结果

hive interval 关键字 hive insert语句字段顺序_默认值_21


我们可以发现,新表中在进行复制之前存在的数据在复制过程中并没有受到影响。注意:如果两个表的结构不同,复制会出现错误,如下:

hive interval 关键字 hive insert语句字段顺序_数据_22