Begin SQL简介

170 阅读4分钟

Begin SQL

Begin SQL简介

Begin SQL是用于标记和指定事务或存储过程或函数的开始的关键字,或者仅仅是逻辑块内多个语句的集合,其主体从BEGIN关键字的指定开始,到使用END关键字结束。我们可以在SQL中的BEGIN和END关键字内写出我们希望执行的语句序列。在同一个方法或存储过程内可以写多个BEGIN END语句,等等。我们甚至可以在SQL中编写嵌套的BEGIN END语句,在BEGIN和END关键字之间定义的逻辑语句块可以根据使用情况和要求,在条件基础上或在循环和其他功能中执行。

在这篇文章中,我们将学习在SQL中使用BEGIN关键字和END关键字的语法,这有助于在语法和一些例子的帮助下创建一个SQL语句的逻辑块。

语法

以下是在SQL中使用BEGIN关键字的语法,它与END一起用于终止语句块。

BEGIN
// Statements to be executed in the batch
END

BEGIN的使用主要是在Transact-SQL中进行的,在Transact-SQL中,多个语句以事务方式完全执行,以保持数据库操作的一致性和数据库的ACID特性。我们可以在BEGIN和END关键字中提到我们想以事务性方式执行的语句,如上面的语法所示。BEGIN和END里面的语句也被称为一起执行的批次。我们可以在BEGIN和END关键字里面提到SQL的一组语句。

让我们考虑几个例子,让你清楚地了解SQL中BEGIN的实现。

开始SQL的例子

我们将考虑一个现有的名为students的表,它存在于我的SQL服务器上名为educba的数据库中。

SELECT * FROM students;

执行上述查询语句的输出结果如下

Begin SQL output 1

学生表中包含14条记录。现在,我们要在transact SQL中执行三条语句,包括在学生表中增加两条名为Karna和Yudhishthira的记录,并在增加后,检索学生表的记录。我们将把我们的SQL查询语句INSERT和SELECT查询放在BEGIN和END关键字里面,如下面的代码所示 -

BEGIN
INSERT INTO `students` (`student_id`, `class_id`, `name`, `roll`, `technology`, `percentage`) VALUES('15','3','Karna','Manager','Maven','96%');
INSERT INTO `students` (`student_id`, `class_id`, `name`, `roll`, `technology`, `percentage`) VALUES('16','2','Yudhistir','Administrator','MySQL','92%');
SELECT * FROM students;
END

执行上述查询语句和块的输出结果如下-

Begin SQL output 2

我们可以观察到,两条额外的记录已经被插入到学生表中,现在,学生表总共包含16条记录,这些记录是从我们在BEGIN和END关键字之间的逻辑块中提到的第三个SELECT查询中获取的。

现在让我们再考虑一个例子,我们想获得百分比大于92的学生姓名和ID的记录,如果没有检索到记录,那么应该给出 "没有发现百分比大于92的学生 "的输出。为此,我们将首先使用选择查询从学生表中选择百分比大于92的记录,然后如果检索到的查询的行数为0,那么我们将选择字符串字面值,当没有找到这样的记录时,将包含所需的句子。

BEGIN
SELECT
student_id,
NAME
FROM
educba.students
WHERE
percentage > 92;
IF @@ROWCOUNT = 0
SELECT 'No students found that have achieved percentage greater than 92';
END

执行上述查询语句和块的输出结果如下 -

Begin SQL output 3

嵌套的BEGIN和END关键字的用法

我们甚至可以在彼此之间使用嵌套的BEGIN END块,创建不同的逻辑块来执行语句。BEGIN和END在C、JAVA或其他语言中的作用与{和}相同。我们可以根据一些条件来执行这些逻辑块,也可以在SQL的各种循环语句中重复执行。

让我们考虑一个在SQL中嵌套BEGIN END块的简单例子,它将检索出按百分比降序排列的学生姓名,然后从检索学生姓名的查询中获得第一条记录的值,并将百分比最高的学生姓名存储在变量@name中。此外,我们要检查查询语句的结果集的行数是否不等于零,然后在字符串中打印名字的值 "得分最高的学生是学生的名字,否则执行另一个BEGIN END块,将得到字符串值 "没有找到学生"。我们将使用下面的代码来实现这一点-

BEGIN
DECLARE @name VARCHAR(100);
SELECT
@name = NAME
FROM
educba.students
ORDER BY
percentage DESC;
IF @@ROWCOUNT <> 0
BEGIN
SELECT 'The most highest scoring student is ' + @name;
END
ELSE
BEGIN
SELECT 'No student found';
END;
END

执行上述查询语句和块的输出结果是,检索出百分比最高的学生Karna的名字,即96%。

output 4

结论

我们可以使用SQL中的BEGIN关键字来标记我们需要指定的transact SQL语句逻辑块的起点,并使用END关键字来指定SQL中逻辑块的结束点。