INSERT语句的新写法

今天一个偶然的机会中知道 SQL 中的 INSERT 语句还可以这样写: 

[pre]INSERT INTO tbl_name (col1, col2) VALUES (value1_1, value1_2),(value2_1, value2_2),(value3_1, value3_2)...[/pre]
这样的写法实际上类似于: 

[pre]INSERT INTO tbl_name (col1, col2) VALUES (value1_1, value1_2)INSERT INTO tbl_name (col1, col2) VALUES (value2_1, value2_2)INSERT INTO tbl_name (col1, col2) VALUES (value3_1, value3_2)...[/pre]
如果在执行过程中碰到一个值错误,则这个值以后的数据都不会被插入。 

Hive 中 `INSERT INTO SELECT` 语句主要用于将查询结果插入到目标表中,有以下几种常见的完整写法: #### 1. 基本的 `INSERT INTO SELECT` 写法写法将一个表的查询结果追加到另一个表中。 ```sql INSERT INTO TABLE target_table SELECT column1, column2, ... FROM source_table WHERE condition; ``` 例如,将 `stu` 表中的所有数据追加到 `student` 表中: ```sql INSERT INTO TABLE student SELECT * FROM stu; ``` 这种情况下,`table` 关键字可以省略,即: ```sql INSERT INTO student SELECT * FROM stu; ``` #### 2. `INSERT INTO` 与 `WITH AS` 连用的写法 `WITH AS` 用于创建临时的命名查询块,方便后续引用。 ```sql WITH temp_result AS ( SELECT column1, column2, ... FROM source_table WHERE condition ) INSERT INTO TABLE target_table SELECT * FROM temp_result; ``` 例如: ```sql WITH a AS ( SELECT * FROM few_ints WHERE x = 2 ) INSERT INTO few_ints SELECT * FROM a; ``` #### 3. `INSERT OVERWRITE SELECT` 写法 `INSERT OVERWRITE` 会覆盖目标表之前的数据。 ```sql INSERT OVERWRITE TABLE target_table SELECT column1, column2, ... FROM source_table WHERE condition; ``` 例如,将 `stu` 表的查询结果覆盖 `student` 表之前的数据: ```sql INSERT OVERWRITE TABLE student SELECT * FROM stu; ``` 注意,这里的 `table` 关键字不可以省略。 也可以将查询到的数据到本地文件夹下: ```sql INSERT OVERWRITE LOCAL DIRECTORY '/opt/module/datas/overwrite' SELECT * FROM stu; ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值