sql数据库 insert into 表(列1,列2)select 列1,列2 from 表 ?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql数据库 insert into 表(列1,列2)select 列1,列2 from 表 ?相关的知识,希望对你有一定的参考价值。

sql数据库 insert into 表(列1,列2)select 列1,列2 from 表 ? 如何设置插入的列1是默认值

insert into 目标数据库名.dbo.目标表 (数据列1,数据列2) select 数据列1,数据列2 from
源数据库名.dbo.源表名

这样就可以了 数据列可以是多列 两边对应就可以 列名可以不一样 比如
目标表列名是a b 源表这边是 c d 只要类型一样就行
参考技术A SQL> create table tblaa(object_id number,object_name varchar2(20));

表已创建。

SQL> insert into tblaa select 10 as object_id,object_name from dba_objects where
rownum<=5;

已创建5行。

SQL> commit;

提交完成。

SQL> col object_name for a10
SQL> select * from tblaa;

OBJECT_ID OBJECT_NAM
---------- ----------
10 ICOL$
10 I_USER1
10 CON$
10 UNDO$
10 C_COBJ#本回答被提问者采纳

ORACLE 同表列转行

表test字段a1 a2 a3值 1 2 3 11 12 13我想查询结果把这六个值变成一列6条数据a123111213
由于实际表字段有30个union all 的话sql语句太长了,不知道有什么简便方法没

create table test (a1 number , a2 number , a3 number ) ;

insert into test values (1,2,3) ;
insert into test values (11,12,13) ;


dexter@REPO>select a from (
  2    SELECT *
  3      FROM test
  4           UNPIVOT(
  5           a
  6           for v
  7           IN(a1, a2, a3)
  8           ));

         A
----------
         1
         2
         3
        11
        12
        13

已选择6行。

用的是11g列转行函数,unpovit。 这些列的数据类型必须是一致的。试一下吧。

参考技术A 可以用oracle的分析函数listagg,但11g以后才有 参考技术B 列转行有如下方法。你试试这些
Sql代码
CREATE TABLE t_col_row(
ID INT,
c1 VARCHAR2(10),
c2 VARCHAR2(10),
c3 VARCHAR2(10));

INSERT INTO t_col_row VALUES (1, 'v11', 'v21', 'v31');
INSERT INTO t_col_row VALUES (2, 'v12', 'v22', NULL);
INSERT INTO t_col_row VALUES (3, 'v13', NULL, 'v33');
INSERT INTO t_col_row VALUES (4, NULL, 'v24', 'v34');
INSERT INTO t_col_row VALUES (5, 'v15', NULL, NULL);
INSERT INTO t_col_row VALUES (6, NULL, NULL, 'v35');
INSERT INTO t_col_row VALUES (7, NULL, NULL, NULL);
COMMIT;

SELECT * FROM t_col_row;
CREATE TABLE t_col_row(
ID INT,
c1 VARCHAR2(10),
c2 VARCHAR2(10),
c3 VARCHAR2(10));

INSERT INTO t_col_row VALUES(1, 'v11', 'v21', 'v31');
INSERT INTO t_col_row VALUES(2, 'v12', 'v22', NULL);
INSERT INTO t_col_row VALUES(3, 'v13', NULL, 'v33');
INSERT INTO t_col_row VALUES(4, NULL, 'v24', 'v34');
INSERT INTO t_col_row VALUES(5, 'v15', NULL, NULL);
INSERT INTO t_col_row VALUES(6, NULL, NULL, 'v35');
INSERT INTO t_col_row VALUES(7, NULL, NULL, NULL);
COMMIT;

SELECT * FROM t_col_row;
1)UNION ALL适用范围:8i,9i,10g及以后版本
Sql代码
SELECT id, 'c1' cn, c1 cv
FROM t_col_row
UNION ALL
SELECT id, 'c2' cn, c2 cv
FROM t_col_row
UNION ALL
SELECT id, 'c3' cn, c3 cv FROM t_col_row;
SELECT id, 'c1' cn, c1 cv
FROM t_col_row
UNION ALL
SELECT id, 'c2' cn, c2 cv
FROM t_col_row
UNION ALL
SELECT id, 'c3' cn, c3 cv FROMt_col_row;
若空行不需要转换,只需加一个where条件,
Sql代码
WHERE COLUMN IS NOT NULL
WHERE COLUMN IS NOT NULL
即可。2)MODEL适用范围:10g及以后
Sql代码
SELECT id, cn, cv FROM t_col_row
MODEL
RETURN UPDATED ROWS
PARTITION BY (ID)
DIMENSION BY (0 AS n)
MEASURES ('xx' AS cn,'yyy' AS cv,c1,c2,c3)
RULES UPSERT ALL
(
cn[1] = 'c1',
cn[2] = 'c2',
cn[3] = 'c3',
cv[1] = c1[0],
cv[2] = c2[0],
cv[3] = c3[0]
)
ORDER BY ID,cn;
SELECT id, cn, cv FROMt_col_row
MODEL
RETURN UPDATED ROWS
PARTITION BY (ID)
DIMENSION BY (0 AS n)
MEASURES ('xx' AS cn,'yyy' AScv,c1,c2,c3)
RULES UPSERT ALL
(
cn[1] = 'c1',
cn[2] = 'c2',
cn[3] = 'c3',
cv[1] = c1[0],
cv[2] = c2[0],
cv[3] = c3[0]
)
ORDER BY ID,cn;
3)collection适用范围:8i,9i,10g及以后版本要创建一个对象和一个集合:
Sql代码
CREATE TYPE cv_pair AS OBJECT(cn VARCHAR2(10),cv VARCHAR2(10));

CREATE TYPE cv_varr AS VARRAY(8) OF cv_pair;

SELECT id, t.cn AS cn, t.cv AS cv
FROM t_col_row,
TABLE(cv_varr(cv_pair('c1', t_col_row.c1),
cv_pair('c2', t_col_row.c2),
cv_pair('c3', t_col_row.c3))) t
ORDER BY 1, 2;
参考技术C 用循环试试

以上是关于sql数据库 insert into 表(列1,列2)select 列1,列2 from 表 ?的主要内容,如果未能解决你的问题,请参考以下文章

[22]SQL INSERT INTO SELECT 语句

sql数据库insert into values的数据格式是怎么规定的?

SQL语句基础知识

update和insert的区别

ORACLE 同表列转行

SELECT INTO 和 INSERT INTO SELECT