SQL 编程基础

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 开头,如 0x2B0x31
  • 浮点数常量:带小数点的数值,如 -2.83.141.2E50.7E-3

1.3 日期时间常量

日期时间常量是用单引号括起来的表示日期或时间的字符串。

  • 日期常量:格式为 年-月-日,如 '2021-09-10'
  • 时间常量:格式为 小时:分:秒,如 '08:10:36'
  • 日期时间常量:格式为 年-月-日 小时:分:秒,如 '2021-09-10 08:10:36'

1.4 布尔常量

布尔常量只有两个值:TRUEFALSE。在SQL中,TRUE 对应的数值为 1FALSE 对应的数值为 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

定义和使用用户变量:

你可以使用 SETSELECT 语句为用户变量赋值。例如:

hljs 复制代码
SET @username='刘珊';
SET @sex:='女';
SELECT @password:='123456';
SELECT @username,@sex,@password;

2.3 局部变量

局部变量通常用在SQL语句块中,其作用范围仅限于语句块(即 BEGIN...END 之间)。局部变量以 DECLARE 语句声明。

声明和使用局部变量:

你可以使用 DECLARE 声明局部变量,并使用 SETSELECT 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:指定在异常发生时如何处理,如 CONTINUEEXIT
  • condition_value:指定要处理的异常类型,如 NOT FOUNDSQLWARNING 等。
  • statement:指定当异常发生时要执行的处理语句。

示例:

hljs 复制代码
DECLARE CONTINUE HANDLER FOR NOT FOUND
BEGIN
    SELECT '未找到记录';
END;

总结

通过这篇文章,你应该已经掌握了SQL编程的基础知识,包括常量、变量、流程控制语句以及异常处理。SQL编程是每个开发者的必备技能,理解这些基础概念将帮助你在未来的项目中更加得心应手。

如果你还有其他疑问或想了解更多有关SQL编程的知识,欢迎在评论区留言讨论!

相关推荐
建投数据14 分钟前
建投数据与腾讯云数据库TDSQL完成产品兼容性互认证
数据库·腾讯云
Hacker_LaoYi1 小时前
【渗透技术总结】SQL手工注入总结
数据库·sql
岁月变迁呀1 小时前
Redis梳理
数据库·redis·缓存
独行soc1 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
你的微笑,乱了夏天2 小时前
linux centos 7 安装 mongodb7
数据库·mongodb
工业甲酰苯胺2 小时前
分布式系统架构:服务容错
数据库·架构
独行soc3 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘
White_Mountain3 小时前
在Ubuntu中配置mysql,并允许外部访问数据库
数据库·mysql·ubuntu
Code apprenticeship3 小时前
怎么利用Redis实现延时队列?
数据库·redis·缓存
百度智能云技术站3 小时前
广告投放系统成本降低 70%+,基于 Redis 容量型数据库 PegaDB 的方案设计和业务实践
数据库·redis·oracle