SQL(结构化查询语言)广泛应用于数据库操作,是每个程序员都需要掌握的技能之一。这篇文章将带你从基础入门,了解SQL编程中的常量、变量及流程控制语句。我们将采用简单易懂的语言,结合实际示例,帮助你轻松理解SQL编程的核心概念。
1. 常量
在SQL编程中,常量是指在程序运行过程中其值保持不变的量。常量可以分为字符串常量、数值常量、日期时间常量和布尔常量。
1.1 字符串常量
字符串常量是指用单引号括起来的字符序列,如 'hello'
或 '你好'
。通常,一个ASCII字符占用1字节,每个汉字占用2字节。
提示: 字符串中可以使用转义字符来表示特殊字符。例如,字符串中的单引号可以写成两个单引号或在单引号前加上反斜杠,如 'It''s a box.'
或 'It\'s a box.'
。
1.2 数值常量
数值常量包括整数常量和浮点数常量。
- 整数常量:不带小数点的整数,如
886
、+327
、-98
。十六进制数以0x
开头,如0x2B
、0x31
。 - 浮点数常量:带小数点的数值,如
-2.8
、3.14
、1.2E5
、0.7E-3
。
1.3 日期时间常量
日期时间常量是用单引号括起来的表示日期或时间的字符串。
- 日期常量:格式为
年-月-日
,如'2021-09-10'
。 - 时间常量:格式为
小时:分:秒
,如'08:10:36'
。 - 日期时间常量:格式为
年-月-日 小时:分:秒
,如'2021-09-10 08:10:36'
。
1.4 布尔常量
布尔常量只有两个值:TRUE
和 FALSE
。在SQL中,TRUE
对应的数值为 1
,FALSE
对应的数值为 0
。
2. 变量
变量是指在程序运行过程中其值可以改变的量。根据用途的不同,SQL中变量分为系统变量、用户变量和局部变量。
2.1 系统变量
系统变量是MySQL预定义的,用于控制数据库行为和设置系统参数。系统变量可以分为全局变量和会话变量。
- 全局变量:影响整个数据库服务器的操作。
- 会话变量:仅影响当前连接的操作。
查看系统变量:
你可以使用 SHOW VARIABLES
命令查看系统变量。例如:
hljs
SHOW GLOBAL VARIABLES; -- 查看所有全局变量
SHOW SESSION VARIABLES; --查看所有会话变量
设置系统变量:
你可以使用 SET
命令为系统变量赋值。例如:
hljs
SET GLOBAL sort_buffer_size = 250000;
SET SESSION sort_buffer_size = 270000;
2.2 用户变量
用户变量是用户自定义的变量,通常用于存储查询结果或中间值。用户变量以一个 @
符号开头,如 @username
。
定义和使用用户变量:
你可以使用 SET
或 SELECT
语句为用户变量赋值。例如:
hljs
SET @username='刘珊';
SET @sex:='女';
SELECT @password:='123456';
SELECT @username,@sex,@password;
2.3 局部变量
局部变量通常用在SQL语句块中,其作用范围仅限于语句块(即 BEGIN...END
之间)。局部变量以 DECLARE
语句声明。
声明和使用局部变量:
你可以使用 DECLARE
声明局部变量,并使用 SET
或 SELECT INTO
为其赋值。例如:
hljs
DECLARE v_avgscore FLOAT;
SET v_avgscore = 75.5;
3. SQL流程控制语句
SQL提供了三种控制结构:顺序结构、分支结构和循环结构。这里我们重点介绍分支结构和循环结构。
3.1 分支结构
分支结构允许根据条件的不同执行不同的操作。SQL中常用的分支结构包括 IF
语句和 CASE
语句。
IF语句
IF
语句根据条件表达式的值来决定执行哪一段代码。其基本语法如下:
hljs
IF 条件表达式1 THEN 语句序列1;
[ELSEIF 条件表达式2 THEN 语句序列2;]...
...
[ELSE 语句序列n;]
END IF;
示例:
hljs
IF v_avgscore >= 80 THEN
SELECT '该生成绩较好';
ELSE
SELECT '该生成绩一般';
END IF;
CASE语句
CASE
语句是另一种分支结构,可以替代多层 IF
语句,使代码更加简洁。CASE
语句有两种形式:基本 CASE
语句和搜索结构 CASE
语句。
基本CASE语句示例:
hljs
BEGIN
DECLARE v_avgscore FLOAT;
DECLARE v_grade INT;
SELECT ROUND(AVG(score), 2) INTO v_avgscore FROM SC WHERE sno = 'S1';
SET v_grade = TRUNCATE(v_avgscore / 10, 0);
CASE v_grade
WHEN 10 THEN SELECT '该生成绩优秀';
WHEN 9 THEN SELECT '该生成绩优秀';
WHEN 8 THEN SELECT '该生成绩良好';
WHEN 7 THEN SELECT '该生成绩中等';
WHEN 6 THEN SELECT '该生成绩及格';
ELSE SELECT '该生成绩不及格';
END CASE;
END;
搜索结构CASE语句示例:
hljs
BEGIN
DECLARE v_avgscore FLOAT;
SELECT ROUND(AVG(score), 2) INTO v_avgscore FROM SC WHERE sno = 'S1';
CASE
WHEN v_avgscore BETWEEN 90 AND 100 THEN SELECT '该生成绩优秀';
WHEN v_avgscore BETWEEN 80 AND 89 THEN SELECT '该生成绩良好';
WHEN v_avgscore BETWEEN 70 AND 79 THEN SELECT '该生成绩中等';
WHEN v_avgscore BETWEEN 60 AND 69 THEN SELECT '该生成绩及格';
ELSE SELECT '该生成绩不及格';
END CASE;
END;
3.2 循环结构
循环结构用于重复执行某段代码。SQL中的循环结构包括 WHILE
循环、REPEAT
循环和 LOOP
循环。
WHILE循环
WHILE
循环在条件为真时反复执行代码块,直到条件为假或为NULL时退出循环。
示例:
hljs
BEGIN
DECLARE v_count INT DEFAULT 0;
DECLARE v_sum INT DEFAULT 0;
WHILE v_count < 100 DO
SET v_count = v_count + 1;
SET v_sum = v_sum + v_count;
END WHILE;
SELECT v_sum AS '1到100的和';
END;
REPEAT循环
REPEAT
循环先执行一次代码块,然后判断条件。如果条件为假,则继续循环;如果为真,则退出循环。
示例:
hljs
BEGIN
DECLARE v_count INT DEFAULT 0;
DECLARE v_sum INT DEFAULT 0;
REPEAT
SET v_count = v_count + 1;
SET v_sum = v_sum + v_count;
UNTIL v_count >= 100
END REPEAT;
SELECT v_sum AS '1到100的和';
END;
LOOP循环
LOOP
循环无条件地反复执行代码块,直到遇到 LEAVE
语句退出循环。
示例:
hljs
BEGIN
DECLARE v_count INT DEFAULT 0;
DECLARE v_sum INT DEFAULT 0;
label1: LOOP
SET v_count = v_count + 1;
SET v_sum = v_sum + v_count;
IF v_count = 100 THEN
LEAVE label1;
END IF;
END LOOP label1;
SELECT v_sum AS '1到100的和';
END;
4. SQL的异常处理
异常处理是确保程序在遇到错误时能够正常运行的关键部分。在MySQL中,可以使用 DECLARE HANDLER
语句处理异常。
语法格式:
hljs
DECLARE handler_action HANDLER FOR condition_value statement;
- handler_action:指定在异常发生时如何处理,如
CONTINUE
或EXIT
。 - condition_value:指定要处理的异常类型,如
NOT FOUND
、SQLWARNING
等。 - statement:指定当异常发生时要执行的处理语句。
示例:
hljs
DECLARE CONTINUE HANDLER FOR NOT FOUND
BEGIN
SELECT '未找到记录';
END;
总结
通过这篇文章,你应该已经掌握了SQL编程的基础知识,包括常量、变量、流程控制语句以及异常处理。SQL编程是每个开发者的必备技能,理解这些基础概念将帮助你在未来的项目中更加得心应手。
如果你还有其他疑问或想了解更多有关SQL编程的知识,欢迎在评论区留言讨论!