当前位置: 首页 > news >正文

SQL 编程基础

SQL(结构化查询语言)广泛应用于数据库操作,是每个程序员都需要掌握的技能之一。这篇文章将带你从基础入门,了解SQL编程中的常量、变量及流程控制语句。我们将采用简单易懂的语言,结合实际示例,帮助你轻松理解SQL编程的核心概念。

1. 常量

在SQL编程中,常量是指在程序运行过程中其值保持不变的量。常量可以分为字符串常量、数值常量、日期时间常量和布尔常量。

1.1 字符串常量

字符串常量是指用单引号括起来的字符序列,如 'hello''你好'。通常,一个ASCII字符占用1字节,每个汉字占用2字节。

image

提示: 字符串中可以使用转义字符来表示特殊字符。例如,字符串中的单引号可以写成两个单引号或在单引号前加上反斜杠,如 '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 命令查看系统变量。例如:

SHOW GLOBAL VARIABLES;    -- 查看所有全局变量
SHOW SESSION VARIABLES;   --查看所有会话变量

设置系统变量:

你可以使用 SET 命令为系统变量赋值。例如:

SET GLOBAL sort_buffer_size = 250000;
SET SESSION sort_buffer_size = 270000;

image

2.2 用户变量

用户变量是用户自定义的变量,通常用于存储查询结果或中间值。用户变量以一个 @ 符号开头,如 @username

定义和使用用户变量:

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

SET @username='刘珊';
SET @sex:='女';
SELECT @password:='123456';
SELECT @username,@sex,@password;

image

2.3 局部变量

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

声明和使用局部变量:

你可以使用 DECLARE 声明局部变量,并使用 SETSELECT INTO 为其赋值。例如:

DECLARE v_avgscore FLOAT;
SET v_avgscore = 75.5;

3. SQL流程控制语句

SQL提供了三种控制结构:顺序结构、分支结构和循环结构。这里我们重点介绍分支结构和循环结构。

3.1 分支结构

分支结构允许根据条件的不同执行不同的操作。SQL中常用的分支结构包括 IF 语句和 CASE 语句。

IF语句

IF 语句根据条件表达式的值来决定执行哪一段代码。其基本语法如下:

IF 条件表达式1 THEN 语句序列1;[ELSEIF 条件表达式2 THEN 语句序列2;]......[ELSE 语句序列n;]
END IF;

示例:

IF v_avgscore >= 80 THENSELECT '该生成绩较好';
ELSESELECT '该生成绩一般';
END IF;
CASE语句

CASE 语句是另一种分支结构,可以替代多层 IF 语句,使代码更加简洁。CASE 语句有两种形式:基本 CASE 语句和搜索结构 CASE 语句。

基本CASE语句示例:

BEGINDECLARE 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_gradeWHEN 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语句示例:

BEGINDECLARE v_avgscore FLOAT;SELECT ROUND(AVG(score), 2) INTO v_avgscore FROM SC WHERE sno = 'S1';CASEWHEN 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时退出循环。

示例:

BEGINDECLARE v_count INT DEFAULT 0;DECLARE v_sum INT DEFAULT 0;WHILE v_count < 100 DOSET v_count = v_count + 1;SET v_sum = v_sum + v_count;END WHILE;SELECT v_sum AS '1到100的和';
END;
REPEAT循环

REPEAT 循环先执行一次代码块,然后判断条件。如果条件为假,则继续循环;如果为真,则退出循环。

示例:

BEGINDECLARE v_count INT DEFAULT 0;DECLARE v_sum INT DEFAULT 0;REPEATSET v_count = v_count + 1;SET v_sum = v_sum + v_count;UNTIL v_count >= 100END REPEAT;SELECT v_sum AS '1到100的和';
END;
LOOP循环

LOOP 循环无条件地反复执行代码块,直到遇到 LEAVE 语句退出循环。

示例:

BEGINDECLARE v_count INT DEFAULT 0;DECLARE v_sum INT DEFAULT 0;label1: LOOPSET v_count = v_count + 1;SET v_sum = v_sum + v_count;IF v_count = 100 THENLEAVE label1;END IF;END LOOP label1;SELECT v_sum AS '1到100的和';
END;

4. SQL的异常处理

异常处理是确保程序在遇到错误时能够正常运行的关键部分。在MySQL中,可以使用 DECLARE HANDLER 语句处理异常。

语法格式:

DECLARE handler_action HANDLER FOR condition_value statement;
  • handler_action:指定在异常发生时如何处理,如 CONTINUEEXIT
  • condition_value:指定要处理的异常类型,如 NOT FOUNDSQLWARNING 等。
  • statement:指定当异常发生时要执行的处理语句。

示例:

DECLARE CONTINUE HANDLER FOR NOT FOUND
BEGINSELECT '未找到记录';
END;

总结

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

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

http://www.lryc.cn/news/433133.html

相关文章:

  • sql 中名字 不可以 包含 mysql中 具有 特定意义 的单词
  • 分布式部署①
  • 开源可视化大屏superset Docker环境部署
  • tomato靶场通关攻略
  • 【Spring Boot 3】【Web】处理跨域资源共享 CORS
  • HUAWEI华为MateBook B5-420 i5 集显(KLCZ-WXX9,KLCZ-WDH9)原装出厂Windows10系统文件下载
  • 算法练习题10:leetcode76最小覆盖子串-滑动窗口
  • Svn常用操作技巧详细说明
  • 六、MySQL高级—架构介绍(1)
  • TensorRT-For-YOLO-Series项目:实现yolov10模型的python-tensorrt推理(对比int8与fp16推理差异)
  • 码上君量化互助社群介绍
  • Qt使用小技巧之按钮动态变化
  • MySQL——事务与存储过程(三)存储过程的使用(1)调用存储过程
  • 基于VUE2-dataV和echarts实现的可视化大屏,百分比适配PC端
  • FastAPI模块化:为复杂应用程序提供清晰的结构
  • 【Hot100】LeetCode—215. 数组中的第K个最大元素
  • pycharm如何安装selenium
  • css三点闪烁(可用于加载样式、标题等)
  • 支持向量机 (Support Vector Machines, SVM)
  • 上海市计算机学会竞赛平台2024年8月月赛丙组调和级数
  • 【重学 MySQL】二十、运算符的优先级
  • 十种优化MySQL数据库的最佳建议
  • springboot组件使用-mybatis组件使用
  • Ribbon 源码分析【Ribbon 负载均衡】
  • Python | Leetcode Python题解之第385题迷你语法分析器
  • 进程间通信-进程池
  • 【PYTHON 基础系列-request 模块介绍】
  • springboot 实现策略模式通过id进入不同的服务类service
  • AUC真的什么情形下都适合吗
  • Flutter基本组件Text使用