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.rhkb.cn/news/420408.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python-网页自动化(二)

获取元素属性 1. 获取属性 以百度首页的logo为例&#xff0c;获取logo相关属性 <img hidefocus"true" id"s_lg_img" class"index-logo-src" src"//www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png" width"270…

mfc140u.dll错误是什么情况?如何将mfc140u.dll丢失的解决方法详细分析

mfc140u.dll是 Microsoft Foundation Class (MFC) 库的一部分&#xff0c;通常与 Visual Studio 2015 及其后续版本相关联。如果系统中缺少 mfc140u.dll&#xff0c;可能会导致依赖该库的应用程序无法启动&#xff0c;并显示错误消息&#xff0c;如“程序无法启动&#xff0c;因…

云境天合防爆型气象站可以用在哪些场景?

型号&#xff1a;TH-FB01】防爆型气象环境监测站特别适用于那些存在易燃易爆物质或具有高安全风险的环境。以下是一些具体的应用场景&#xff1a; 石油化工行业&#xff1a; 石油化工厂区、油库、加油站等地方&#xff0c;由于存在大量的易燃易爆气体和液体&#xff0c;一旦发生…

Redis缓存常用的读写策略

缓存常用的读写策略 缓存与DB的数据不一致问题&#xff0c;大多数都是指DB的数据已经修改&#xff0c;而缓存中的数据还是旧数据的情况。 旁路缓存模式 对于读操作&#xff1a;基本上所有模式都是先尝试从缓存中读&#xff0c;没有的话再去DB读取&#xff0c;然后写到缓存中…

leetcode172. 阶乘后的零,遍历每个因数中5的个数

leetcode172. 阶乘后的零 给定一个整数 n &#xff0c;返回 n! 结果中尾随零的数量。 提示 n! n * (n - 1) * (n - 2) * … * 3 * 2 * 1 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;0 解释&#xff1a;3! 6 &#xff0c;不含尾随 0 示例 2&#xff1a; 输…

c++188深拷贝和浅拷贝

在全局区字符串 浅拷贝 拷贝指针变量的值而不是内存空间 obj2已经析构了 又进行了一次析构 深拷贝&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std;class Name { public:Name(const char* myp){//开辟一个内存把dhfka传入int le…

NVIDIA Triton Inference Server 部署 yolov5

文章目录 一、拉取 tensorrt 、yolov5、tritonserver 镜像二、下载 yolov5-6.2、tensorrtx/yolov5-6.2源码三、pt转wts四、wts转engine五、创建triton推理服务器六、创建客户端进行测试 一、拉取 tensorrt 、yolov5、tritonserver 镜像 docker pull hakuyyf/tensorrtx:trt8.2_…

TAbleau 可视化 干货分享 | 简单三步助你打造完美仪表板

只需单击几下&#xff0c;你将能轻松创建美观、信息丰富的可视化效果、节省时间并推动业务向前发展&#xff01; 借助精心设计的仪表板&#xff0c;分析师可以更好地理解复杂数据背后的信息&#xff0c;更有效地向他人分享你的见解&#xff0c;从而做出更明智的决策。 值得思考…

vivado 时间汇总报告

步骤7&#xff1a;时间汇总报告 定时路径在时钟元素处开始和结束。输入和输出端口不是顺序的 元素&#xff0c;默认情况下&#xff0c;Vivado时序分析不会对进出I/O端口的路径进行计时 设计&#xff0c;除非指定了输入/输出延迟约束。 在此步骤中&#xff0c;您将在Vivado中生成…

单片机-STM32 看门狗(八)

目录 一、看门狗概念 1、定义&#xff1a; 二、单片机中的看门狗 1、功能描述&#xff1a; 2、看门狗设置部分 预分频寄存器(IWDG_PR) 3、窗口看门狗 特性&#xff1a; 4、看门狗配置&#xff1a; 一、看门狗概念 看门狗--定时器&#xff08;不属于基本定时器、通用定…

客户端绑定本地端口与服务器建立连接的详细实现

客户端绑定本地端口与服务器建立连接的详细实现 一、网络编程基础1.1 TCP/IP协议1.2 套接字(Socket)1.3 客户端与服务器模型二、客户端程序的设计2.1 需求分析2.2 流程设计三、具体代码实现3.1 伪代码3.2 C代码实现四、代码详解4.1 初始化套接字库4.2 创建套接字4.3 绑定本地…

十大护眼大路灯品牌怎么选比较好?护眼灯品牌排行榜前十名

十大护眼大路灯品牌怎么选比较好&#xff1f;作为一名资深家电测评师&#xff0c;我虽然比较认可护眼大路灯&#xff0c;平常自己也在使用&#xff0c;但也提醒广大用户&#xff0c;市场中有些品牌产品本身在生产中做工较为粗糙、使用廉价材质&#xff0c;更因缺乏核心技术&…

2024网安周今日开幕,亚信安全亮相30城

2024年国家网络安全宣传周今天在广州拉开帷幕。今年网安周继续以“网络安全为人民&#xff0c;网络安全靠人民”为主题。2024年国家网络安全宣传周涵盖了1场开幕式、1场高峰论坛、5个重要活动、15场分论坛/座谈会/闭门会、6个主题日活动和网络安全“六进”活动。亚信安全出席20…

你真的懂吗系列——GPIO

你真的懂吗 文章目录 你真的懂吗前言一、GPIO介绍二、GPIO基本结构三、GPIO的八种模式浮空输入输入上拉输入下拉模拟输入开漏输出推挽输出什么是推挽结构和推挽电路&#xff1f;开漏输出和推挽输出的区别&#xff1f;开漏式复用推挽式复用 前言 最近在做STM32的时候发现有些寄…

怎么利用短信接口发送文字短信

在当今这个快节奏的数字时代&#xff0c;即时通讯已成为人们日常生活和工作中不可或缺的一部分。而短信接口&#xff08;SMS Interface&#xff09;&#xff0c;作为传统与现代通讯技术结合的典范&#xff0c;凭借其高效、稳定、广泛覆盖的特性&#xff0c;在众多领域发挥着不可…

2024年最新微短剧系统重构版,短剧小程序源码开源源码搭建部署

技术栈 前端&#xff1a;vueuniapp 后端&#xff1a;php 数据库&#xff1a;MySQL <?php class Drama {private $title;private $description;private $cast;private $genre;public function __construct($title, $description, $cast, $genre) {$this->title $tit…

【解决bug之路】npm install node-sass(^4.14.1)连环报错解决!!!(Windows)

有关node-sass的深入分析可参考&#xff1a;又报gyp ERR&#xff01;为什么有那么多人被node-sass 坑过&#xff1f; 主要有如下三方面错误&#xff0c;请自查&#xff1a; 1.node&#xff0c;npm版本需与node-sass版本匹配&#xff0c;像node-sass&#xff08;^4.14.1&#x…

高性能反向代理--HAProxy

文章目录 Web架构负载均衡介绍为什么使用负载均衡负载均衡类型 HAProxy简介应用场景HAProxy是什么HAProxy功能 脚本安装HAProxy基础配置global多进程和线程HAProxy日志配置项 Proxies配置-listen-frontend-backendserver配置 frontendbackend配置实例子配置文件 HAProxy调度算法…

大数据-121 - Flink Time Watermark 详解 附带示例详解

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

【实战篇】为什么表数据删掉一半,表文件大小不变?

背景 日常使用中&#xff0c;当数据库占用空间太大&#xff0c;把一个最大的表删掉了一半的数据&#xff0c;但是表文件的大小还是没变&#xff0c;这是为什么呢&#xff1f; 针对 InnoDB 引擎&#xff0c;一个 InnoDB 表包含两部分&#xff0c;即&#xff1a;表结构定义和数…