有没有一个SQL语句可以随机从一个oracle表里面抽取大约10万条数据出来组成一个新表
时间: 2023-05-18 15:06:14 浏览: 104
是的,可以使用以下SQL语句来随机抽取大约10万条数据并创建一个新表:
CREATE TABLE new_table AS
SELECT * FROM (
SELECT * FROM old_table
ORDER BY dbms_random.value
)
WHERE rownum <= 100000;
相关问题
oracle 一个数据表有多列,如果使用sql语句找出空白列
您可以使用以下 SQL 语句来找出一个表中的空白列:
```
SELECT
*
FROM
your_table_name
WHERE
COALESCE(column1, column2, column3, ..., columnN) IS NULL;
```
其中,`your_table_name` 是您要查询的表名,`column1`, `column2`, `column3`, ..., `columnN` 是表中的列名。这条 SQL 语句会返回所有列中内容为空的行。
需要注意的是,这条 SQL 语句中使用了 `COALESCE()` 函数来判断所有列的值是否为空。`COALESCE()` 函数会返回参数列表中第一个非空值,如果所有参数都为空,则返回 NULL。因此,如果一个行中所有列的值都为空,那么 `COALESCE()` 函数的返回值就是 NULL,可以使用 `IS NULL` 来判断该行是否为空白行。
从一个表里查出数据 分批insert into 另一个表里的sql语句
假设有两个表,一个是源表(source_table),一个是目标表(target_table),并且源表中有10万条数据需要分批插入到目标表中。
可以使用以下SQL语句:
```
DECLARE @batch_size INT = 1000; -- 每批次插入的数据量
DECLARE @start_row INT = 1; -- 起始行数
DECLARE @end_row INT = @start_row + @batch_size - 1; -- 结束行数
WHILE @start_row <= 100000 -- 源表的总记录数
BEGIN
INSERT INTO target_table (column1, column2, column3)
SELECT column1, column2, column3
FROM (
SELECT column1, column2, column3, ROW_NUMBER() OVER (ORDER BY column1) AS row_num
FROM source_table
) AS sub_query
WHERE row_num BETWEEN @start_row AND @end_row;
SET @start_row = @end_row + 1;
SET @end_row = @start_row + @batch_size - 1;
END;
```
在这个SQL语句中,首先定义了每批次插入的数据量和起始行数,然后通过一个循环语句不断插入数据,直到插入完所有的数据为止。
每次插入数据时,使用了一个子查询来获取指定范围内的数据,并将其插入到目标表中。同时,需要更新起始行数和结束行数,以便下一次插入数据时使用。