SQL Server 四种九九乘法表实现方法详解
在数据库开发与面试场景中,使用 SQL 脚本生成九九乘法表是考察开发者对流程控制(Loop)与逻辑判断(If/Else)理解程度的经典题目。本文将通过 SQL Server (T-SQL) 语法,演示如何通过 DECLARE 声明变量与 WHILE 循环的组合,分别实现左下、右下、右上、左上四种对齐方式的乘法表,并解析其背后的字符串拼接与空格填充逻辑。
准备环境:确定语法标准
以下示例均基于 SQL Server (MS SQL) 或兼容 T-SQL 语法的数据库环境编写。主要依赖三个核心要素:
DECLARE:用于定义整型(INT)和字符(VARCHAR)变量以控制循环次数和存储输出结果。WHILE:外层循环控制行(被乘数),内层循环控制列(乘数)。CAST:CAST(值 AS CHAR(长度)):将计算出的数字转换为字符串,以便进行拼接(如 “1*2=2”)。
第一步:实现左下角九九乘法表(基础阶梯型)
目的:实现最标准的“从左到右递增”的阶梯状排列,常用于展示基础循环逻辑。
核心逻辑:
- 外层循环
@I从 1 遍历至 9(代表行号)。 - 内层循环
@J同样从 1 开始,条件是@J <= @I。这意味着第一行打印1个,第二行打印2个,直到第九行打印9个,自然形成左对齐的三角形。 @S用于累加每一行的乘法算式字符串。
DECLARE @I INT, @J INT, @S VARCHAR(100)
SET @I = 1
WHILE @I <= 9
BEGIN
SET @J = 1
SET @S = ''
WHILE @J <= @I -- 关键:只要列号小于等于当前行号就继续
BEGIN
SET @S = @S + CAST(@J AS CHAR(1)) + '*' + CAST(@I AS CHAR(1)) + '=' + CAST((@I * @J) AS CHAR(3)) + ' '
SET @J = @J + 1
END
PRINT @S -- 打印当前行结果
SET @I = @I + 1
END
执行结果如下图所示:
第二步:实现右下角九九乘法表(对齐右侧)
目的:让九九乘法表的斜边出现在左侧,内容向右靠齐。视觉上更饱满,常用于报表美化。
核心逻辑:
- 外层循环
@I从 1 到 9。 - 内层循环
@J采用倒序方式(从 9 递减至 1)。 - IF 条件判断:当
@J > @I时(即前面的列数大于当前行号),不输出算式,而是输出占位空格(' ')以对齐位置。只有当@J <= @I时才输出实际的乘法算式。
DECLARE @I INT, @J INT, @S VARCHAR(100)
SET @I = 1
WHILE @I <= 9
BEGIN
SET @J = 9
SET @S = ''
WHILE @J >= 1 -- 倒序遍历
BEGIN
IF @J > @I
BEGIN
SET @S = @S + ' ' -- 添加多个空格进行占位对齐
END
ELSE
BEGIN
-- 注意:为了美观,这里建议 I * J 顺序调整以符合阅读习惯
SET @S = @S + CAST(@I AS CHAR(1)) + '*' + CAST(@J AS CHAR(1)) + '=' + CAST((@I * @J) AS CHAR(3)) + ' '
END
SET @J = @J - 1
END
PRINT @S
SET @I = @I + 1
END
执行结果如下图所示:
第三步:实现右上角九九乘法表(上半三角)
目的:展示整个 9x9 矩阵的前半部分,常用于测试全量数据的逻辑覆盖。
核心逻辑:
- 外层循环
@I依然是 1 到 9。 - 内层循环
@J固定为 1 到 9(全量范围)。 - IF 条件判断:当
@J < @I时(即当前列数小于行号),跳过打印,仅输出占位空格。反之则正常打印算式。这实现了保留矩阵对角线及以上区域的效果。
DECLARE @I INT, @J INT, @S VARCHAR(100)
SET @I = 1
WHILE @I <= 9
BEGIN
SET @J = 1
SET @S = ''
WHILE @J <= 9 -- 遍历所有列
BEGIN
IF @J < @I
BEGIN
SET @S = @S + ' ' -- 7个左右的空格以保持对齐
END
ELSE
BEGIN
SET @S = @S + CAST(@I AS CHAR(1)) + '*' + CAST(@J AS CHAR(1)) + '=' + CAST((@I * @J) AS CHAR(3)) + ' '
END
SET @J = @J + 1
END
PRINT @S
SET @I = @I + 1
END
执行结果如下图所示:
第四步:实现左上角九九乘法表(下半三角)
目的:这是另一种常见的切分方式,呈现矩阵对角线以下的形状。
核心逻辑:
- 外层循环
@I从 1 到 9。 - 差异点**:内层循环不再是从 1 开始,而是直接设置
SET @J = @I。 - 这意味着第一行只打印
1*1,第二行从2*2开始打印到2*9。它天然地省略了J < I的部分,形成了一个左上角的直角三角形。
DECLARE @I INT, @J INT, @S VARCHAR(100)
SET @I = 1
WHILE @I <= 9
BEGIN
SET @J = @I -- 直接从当前行号开始遍历,而非从1
SET @S = ''
WHILE @J <= 9 -- 遍历到第9列结束
BEGIN
SET @S = @S + CAST(@I AS CHAR(1)) + '*' + CAST(@J AS CHAR(1)) + '=' + CAST((@I * @J) AS CHAR(3)) + ' '
SET @J = @J + 1
END
PRINT @S
SET @I = @I + 1
END
执行结果如下图所示:
总结与维护建议
以上就是利用 SQL Server 编写四种常见布局九九乘法表的详细内容。在处理复杂的表格打印需求时,请根据实际业务场景选择合适的布局,并注意以下几点以保证代码健壮性:
- 空格的宽度控制:不同的终端模拟器对空格的显示宽度可能存在细微差异,上述示例中使用了 6-8 个空格作为占位符,若发现左右错位,可根据实际输出调整空格数量。
- 版本兼容性:本语法在 SQL Server 2008 R2 及更新版本中均经过验证,可直接应用于此类 T-SQL 环境中。
更多关于 SQL 基础与数据处理的技术文章,请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









