如何让多个不同的SQL语句一起执行?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何让多个不同的SQL语句一起执行?相关的知识,希望对你有一定的参考价值。

我要做统计,
男多少人,女多少人,1岁的多少人,2岁的多少人,等等查询多个条件,这么多条SQL,每个都写个方法,去调的话,会很慢,有没有一种办法,执行一个方法,就把这些SQL都执行了呀???

用union
使用 UNION 运算符组合多个结果
UNION 运算符使您得以将两个或多个 SELECT 语句的结果组合成一个结果集。使用 UNION 组合的结果集都必须具有相同的结构。而且它们的列数必须相同,并且相应的结果集列的数据类型必须兼容。有关更多信息,请参见 UNION 运算符使用指南。

UNION 的指定方式如下:

select_statement UNION [ALL] select_statement

例如,Table1 和 Table2 具有相同的两列结构。

Table1 Table2
ColumnA ColumnB ColumnC ColumnD
char(4) int char(4) int
------- --- ------- ---
abc 1 ghi 3
def 2 jkl 4
ghi 3 mno 5

下面的查询在这两个表之间创建 UNION 运算:

SELECT * FROM Table1
UNION
SELECT * FROM Table2

下面是结果集:

ColumnA ColumnB
------- --------
abc 1
def 2
ghi 3
jkl 4
mno 5
参考技术A union和union all 的区别
Union和Union all 的区别 在数据库中,union和union all关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。 union在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。如:select * from test_union1 unionselect * from test_union2 这个SQL在运行时先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。 而union all只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。 从效率上说,union all要比union快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用union all
参考技术B 用union all啊
select ‘男',count(1) from person where sex='男'
union all
select ‘女',count(1) from person where sex='女'
union all
select ‘1岁',count(1) from person where age=1
.....
参考技术C 用存储过程啊!写一个通用的,哪个参数不为空,传入相应的参数进去。直接用Sql 语句也行啊!

仅使用在 TOAD 中执行来运行多个 sql 语句

【中文标题】仅使用在 TOAD 中执行来运行多个 sql 语句【英文标题】:Run multiple sql statements using only execute in TOAD 【发布时间】:2016-02-29 11:53:28 【问题描述】:

我正在尝试使用执行命令在 TOAD 中运行多个选择 SQL 语句,而不是像脚本那样执行,每个语句都以分号结尾,但不幸的是 TOAD 不允许我这样做。

尝试使用 begin 和 end 作为单个块运行,但该尝试也失败了。

有什么办法可以达到这个..

【问题讨论】:

如果有多个语句要一起运行,为什么不想作为脚本执行?这就是它的用途。以及如何/为什么在一个块中运行它们失败 - 你是在做 DDL 还是只是 DML?你只提到选择;这些结果应该去哪里?也许您正试图在单个数据网格中获取所有结果? 【参考方案1】:

您可以在 Toad 中将其作为脚本运行:

exec dbms_output.put_line('aaa');
exec dbms_output.put_line('bbb');

或使用以下匿名 PL/SQL 块并将其作为语句执行:

begin
    dbms_output.put_line('aaa');
    dbms_output.put_line('bbb');
end;
/

【讨论】:

这个答案的第一部分和亚历克斯的评论是要走的路。作为脚本运行,F5。如果这些语句是 SELECT 的,那么您将通过这种方式为每种方式获得一个网格,但不要将它们包含在一个块中,只需让它们作为独立语句存在即可。请注意,如果您的结果集很大,您可能会耗尽内存。如果第二个语句不依赖于第一个语句,您还可以使用 F9 在其自己的编辑器选项卡中运行每个语句。

以上是关于如何让多个不同的SQL语句一起执行?的主要内容,如果未能解决你的问题,请参考以下文章

如何将几条sql语句一起执行

如何在Oracle中一次执行多条sql语句

SQL根据条件执行不同的语句

如何撤销一个已经执行的更新SQL语句

仅使用在 TOAD 中执行来运行多个 sql 语句

EF Core 执行sql语句