当前位置: 首页 > 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编程的知识,欢迎在评论区留言讨论!

相关文章:

SQL 编程基础

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

sql 中名字 不可以 包含 mysql中 具有 特定意义 的单词

这种sql执行不报错 这种sql执行报错 所以sql中名字不可以使用mysql中具有特定意义的单词 以此文章作为警告&#xff0c;我下次起名字不可以使用 mysql中具有特殊意义的字符 就因为这个导致我搞了一个多小时&#xff0c;急死我了&#xff0c;周五就要前后端联调了。下次千万不…...

分布式部署①

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 1. 需要部署的服务 Nacos 理论上,应…...

开源可视化大屏superset Docker环境部署

superset 开源可视化大屏Docker环境部署 前言 superset是俄罗斯开源的一款可视化大屏&#xff0c;用于数据可视化探索&#xff0c;含有丰富的图表组件&#xff0c;可以支持接入各种数据源。 接触superset就是想体验下可视化大屏功能&#xff0c;想最快速度安装成功&#xff…...

tomato靶场通关攻略

1.御剑2014找到IP地址 2.dirb扫描目录 3.再次详细扫描目录 4.访问找到的目录文件 进入antibots中 5.搜寻一会再info.php里面发现有东西 6.这个地方貌似可以进行利用 7.查看源代码发现包含include文件上传漏洞 8.网址后面跟?image../../../../../../../etc/passwd 9.既然可以查…...

【Spring Boot 3】【Web】处理跨域资源共享 CORS

【Spring Boot 3】【Web】处理跨域资源共享 CORS 背景介绍开发环境开发步骤及源码工程目录结构总结背景 软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术…...

HUAWEI华为MateBook B5-420 i5 集显(KLCZ-WXX9,KLCZ-WDH9)原装出厂Windows10系统文件下载

适用型号&#xff1a;KLCZ-WXX9、KLCZ-WDH9 链接&#xff1a;https://pan.baidu.com/s/12xnaLtcPjZoyfCcJUHynVQ?pwdelul 提取码&#xff1a;elul 华为原装系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、系统属性专属LOGO标志、华为浏览器、Office办公软件、华为…...

算法练习题10:leetcode76最小覆盖子串-滑动窗口

目录 题目 题目描述 约束条件 解决思路 代码 getOrDefault(c, 0) 方法 方法签名 参数 返回值 示例 getOrDefault 与 get 的主要区别 Integer 题目 题目描述 给定两个字符串 s 和 t&#xff0c;请你在字符串 s 中找到包含 t 中所有字符的最小子串。 要求&#xf…...

Svn常用操作技巧详细说明

TortoiseSVN是一个Windows操作系统下的Subversion客户端&#xff0c;它为用户提供了直观易用的界面&#xff0c;方便进行版本控制操作。下面是一些TortoiseSVN的常用操作技巧的详细说明&#xff1a; 检出代码&#xff1a; 在Windows资源管理器中&#xff0c;选择一个空文件夹&a…...

六、MySQL高级—架构介绍(1)

&#x1f33b;&#x1f33b; 目录 一、Mysql 简介1.1 概述1.2 Mysql 高手是怎样炼成的 二、Mysql Linux 版的安装2.1 mysql5.52.2 mysql5.7 三、Mysql 的用户与权限管理3.1 MySQL的用户管理3.2 权限管理3.3 通过工具远程访问 四、 Mysql的一些杂项配置(了解)五、 Mysql 逻辑架构…...

TensorRT-For-YOLO-Series项目:实现yolov10模型的python-tensorrt推理(对比int8与fp16推理差异)

项目地址&#xff1a;https://github.com/Linaom1214/TensorRT-For-YOLO-Series/tree/cuda-python 算法支持状态&#xff1a; 2024.6.16 Support YOLOv9, YOLOv10, changing the TensorRT version to 10.0 2023.8.15 Support cuda-python 2023.5.12 Update 2023.1.7 support YO…...

码上君量化互助社群介绍

写在前面 量化投资是一个漫长的过程&#xff0c;一个人单打独斗会走很多弯路&#xff0c;所以建立一个交流沟通互助群是有必要的。 无论是加入我的这个量化互助社群&#xff0c;还是加入其他的社群&#xff0c;首先要想想自己加入社群的目的是什么&#xff0c;自己想从中获得…...

Qt使用小技巧之按钮动态变化

前言 最近写小demo中无意发现的&#xff0c;是想实现当鼠标悬停到按钮上面的时候&#xff0c;按钮实现动态变化&#xff0c;让人知道鼠标经过了按钮&#xff0c;效果如下 hoverDynamicPushButton 正文 首先是将按钮的边框给去掉&#xff0c;然后设置下它的悬停伪状态就行了 格…...

MySQL——事务与存储过程(三)存储过程的使用(1)调用存储过程

使用存储过程可以使程序执行效率更高、安全性更好&#xff0c;增强程序的可重用性和维护性。接下来将针对存储过程的使用进行详细的讲解。 存储过程有多种调用方法。存储过程必须使用CALL语句调用&#xff0c;并且存储过程和数据库相关&#xff0c;如果要执行其他数据库…...

基于VUE2-dataV和echarts实现的可视化大屏,百分比适配PC端

可视化平台中&#xff0c;数据分别通过仪表盘、环状图、柱形图、曲线图、 滚动表格等多种形式展示数据变化。 可视化平台大致分为左、中、右三部分&#xff0c;左侧由能耗总览、耗能 占比、库存预警构成&#xff0c;中间由数据总览、销售计划完成率构成&#xff0c;右侧 由销售…...

FastAPI模块化:为复杂应用程序提供清晰的结构

开题描述&#xff1a; 在现代软件开发中&#xff0c;随着应用程序规模的扩大和功能的增加&#xff0c;传统的单体架构逐渐暴露出其局限性。FastAPI&#xff0c;作为一款高性能的现代Web框架&#xff0c;通过其模块化设计提供了一种解决方案。本文将探讨FastAPI模块化如何为构建…...

【Hot100】LeetCode—215. 数组中的第K个最大元素

目录 1- 思路快速选择 2- 实现⭐215. 数组中的第K个最大元素——题解思路 3- ACM实现 原题连接&#xff1a;215. 数组中的第K个最大元素 1- 思路 快速选择 第 k 大的元素的数组下标&#xff1a; int target nums.length - k 1- 根据 partition 分割的区间来判断当前处理方式…...

pycharm如何安装selenium

在pycharm中打开一个项目后,点击Setting(ALTCtrlS快捷键) 然后点击install package完成后点击关闭这个窗口,就可以在代码中使用selenium了 成功后出现如下界面 编写一段正常可以运行操作chorme浏览器的 from selenium import webdriver # 指定ChromeDriver的路径driver we…...

css三点闪烁(可用于加载样式、标题等)

代码案例 HTML <div class"flexAlign loading"><div class"loading_item"></div><div class"loading_item"></div><div class"loading_item"></div> </div> <div class"ot…...

支持向量机 (Support Vector Machines, SVM)

支持向量机 (Support Vector Machines, SVM) 通俗易懂算法 支持向量机&#xff08;SVM&#xff09;是一种用于分类和回归任务的机器学习算法。在最简单的情况下&#xff0c;SVM是一种线性分类器&#xff0c;适用于二分类问题。它的基本思想是找到一个超平面&#xff08;在二维…...

在多模型聚合场景下利用Taotoken实现API调用的自动降级与容灾

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在多模型聚合场景下利用Taotoken实现API调用的自动降级与容灾 对于依赖大模型API的生产系统而言&#xff0c;服务的连续性与稳定性…...

洛雪音乐桌面版:跨平台音乐聚合播放器的终极使用指南

洛雪音乐桌面版&#xff1a;跨平台音乐聚合播放器的终极使用指南 【免费下载链接】lx-music-desktop 一个基于 Electron 的音乐软件 项目地址: https://gitcode.com/GitHub_Trending/lx/lx-music-desktop 洛雪音乐桌面版是一款基于Electron和Vue 3技术栈开发的开源跨平台…...

如何快速上手SoundMind:10分钟完成音频逻辑推理模型训练

如何快速上手SoundMind&#xff1a;10分钟完成音频逻辑推理模型训练 【免费下载链接】SoundMind We introduce the Audio Logical Reasoning (ALR) dataset, consisting of 6,446 text-audio annotated samples specifically designed for complex reasoning tasks. Building o…...

代码跑偏白盒补漏:判定节点覆盖全路径测试

位于程序逻辑分叉处&#xff0c;起着关键开通作用的判定节点&#xff0c;意义无比重大。于程序运行进程里&#xff0c;每一条if语句、else语句以及switch语句背后&#xff0c;事实上都暗藏着一条独具特色且彼此独立的执行回路。而测试覆盖的核心使命&#xff0c;就是要把这些回…...

yEd画流程图保姆级避坑指南:从界面解析到高效导出PNG/JPG全流程

yEd流程图高效绘制全攻略&#xff1a;从界面优化到专业导出的进阶技巧第一次打开yEd时&#xff0c;那个布满各种面板和参数的界面确实容易让人望而生畏。但别担心&#xff0c;经过几个月的深度使用&#xff0c;我发现这款工具其实隐藏着许多能极大提升效率的设计细节。本文将带…...

别再死记硬背公式了!用UE5的Lerp节点玩转材质混合(附灰度图实战案例)

别再死记硬背公式了&#xff01;用UE5的Lerp节点玩转材质混合&#xff08;附灰度图实战案例&#xff09;在游戏开发中&#xff0c;材质混合是创造丰富视觉效果的关键技术。对于Unreal Engine 5的初学者来说&#xff0c;LinearInterpolate&#xff08;简称Lerp&#xff09;节点可…...

JMeter多线程压测:线程≠用户,避坑指南与真实行为建模

1. 为什么“多线程压测接口”不是简单点几下鼠标就能搞定的事 很多人第一次打开JMeter&#xff0c;新建一个线程组、填个URL、点“启动”&#xff0c;看到“聚合报告”里跳出几百个请求/秒&#xff0c;就以为自己已经掌握了接口压测。我当年也是这么想的——直到在一次电商大促…...

Deceive终极指南:如何在《英雄联盟》和《无畏契约》中完美隐身离线

Deceive终极指南&#xff1a;如何在《英雄联盟》和《无畏契约》中完美隐身离线 【免费下载链接】Deceive &#x1f3a9; Appear offline for League of Legends, VALORANT, and Legends of Runeterra. 项目地址: https://gitcode.com/gh_mirrors/de/Deceive Deceive是一…...

2026 收藏版|LangGraph 智能体三大核心工作流,程序员零基础上手大模型开发

本篇全面剖析 2026 主流 LangGraph 智能体三类经典工作流架构&#xff0c;依托任务拆分校验、智能任务分发、多任务并行处理三种思路&#xff0c;全方位提升大模型智能体运行精度与处理效率。每类模式均搭配可直接运行的实战代码案例&#xff0c;贴合新手学习场景&#xff0c;帮…...

别再死记硬背了!用UE5动画蓝图状态机做个“开关门”交互,5分钟搞懂运行流

用UE5动画蓝图状态机实现智能门交互&#xff1a;从理论到实战第一次接触虚幻引擎的动画系统时&#xff0c;那些抽象的概念总让人望而生畏。记得我刚开始学习UE4时&#xff0c;光是理解"状态机"这个概念就花了整整一周时间——直到我亲手实现了一个会自动开关的门。这…...