数据库复习笔记
写文章的初衷只是为了复习与记录自己的成长,笔者目前水平还有待提高,文章中难免会出现许多问题与错误,文章内容仅供参考,有不足的地方还请大家多多包涵并指正,谢谢~
第八章 T-SQL程序结构
8.1 注释和变量
8.1.1 T-SQL程序的基本结构
1.批
批是一组SQL语句的集合,一个批以结束符GO而终结。批中的所有语句被一次提交给SQL Server,SQL Server将这些语句编译为一个执行单元在执行时全部执行。
注意:在执行批时:
(1)只要有其中任一个SQL语句存在语法错误,SQL Server将取消整个批内所有语句执行。
(2)如果没有语法问题可以运行,但发生逻辑错误(如算术溢出),则可能导致停止批中当前语句及后面语句执行,或仅停止当前语句执行,后面继续。这样可能发生严重错误,所以批应位于一个事务之内。
使用批的基本规则:
(1)所有CREATE语句应单独构成一个批,不能在批中和其它SQL语句组合使用。
(2)使用ALTER TABLE语句修改表结构后,不能在同一个批中使用新定义的列。
(3)EXCUTE语句为批中第一个语句时,可以省略EXCUTE关键字,否则,必须使用EXCUTE关键字。
(4)批命令GO和SQL语句不能在同一行上。但在GO命令中可以包含注释。
批命令GO并不是SQL的语句组成部分。它仅是作为批结束的标志。当编译器读到GO时,会把它前面的所有语句打成一个数据包一起发给服务器。
--正确批处理的例子:
USE 教学管理
GO
CREATE VIEW sub_学生表
AS SELECT 学号,姓名FROM 学生表
GO
SELECT * FROM sub_学生表
GO
--不正确批处理的例子1:
USE 教学管理
CREATE VIEW sub_学生表
AS SELECT 学号,姓名FROM 学生表
GO
SELECT * FROM sub_学生表
GO
错误的原因在于将选择数据库与创建视图放在了同一个批中,前面说过CREATE必须单独在一个批中。
--不正确批处理的例子2:
USE 教学管理
GO
CREATE TABLE mytab (name nvarchar(20),pric tinyint)
GO
INSERT INTO mytab (name,pric) VALUES (‘Binete’, 3)
INSERT INTO mytab (name,pric) VALUES (‘Binete’, 3000) --3000超过tinyint类型
GO--第2个插入语句插入时出错,只产生部分数据(容易成为垃圾数据)。为了避免这种情况发生需要用事务保证批中的命令要么全做,要么全不做。
2.程序结构
一个T-SQL程序包含若干个以BEGIN TRANSACTION开始、以COMMIT(提交)或ROLLBACK(回滚)结束的事务,一个事务又包含若干个以GO结束的批处理,一个批处理包含若干条T-SQL语句。因此T-SQL程序的基本结构为:
{
BEGIN TRANSACTION
{ T-SQL语句[ …n]
GO
}[ …n]
{ COMMIT | ROLLBACK }
}[ …n]
--例:下列T-SQL程序含两个事务,每个事务又含两个批处理。
USE 教学管理
GO
BEGIN TRANSACTIONDELETE FROM 选课表 WHERE 学号=’S060101’DELETE FROM 学生表 WHERE 学号=’S060101’GOSELECT * FROM 选课表 WHERE 学号=’S060101’SELECT * FROM 学生表 WHERE 学号=’S060101’GO
ROLLBACK
BEGIN TRANSACTIONINSERT INTO 学生表(学号,身份证号,姓名,专业,所在院系) VALUES
('S060199','****19880115***','张三','计算机','信息学院')INSERT INTO 选课表(学号,课程号) VALUES(’S060199’, ’010101’)GOSELECT * FROM 选课表 WHERE 学号=’S060199’SELECT * FROM 学生表 WHERE 学号=’S060199’GO
COMMIT
8.1.2 注释
注释是程序代码中不执行的文本,用于对代码进行说明或暂时禁用正在进行调试的部分T-SQL 语句和批处理。
SQL Server支持两种类型的注释:
1.双减号(--)
从双减号(--)开始到行尾均为注释,是单行注释。
2.斜杠-星号对(/*…*/)
从“/*”开始到“*/”结束的内容均视为注释,常用来给出多行注释。
注意: 斜杠-星号对注释不能跨越批。例如,以下程序是错误的。
USE 教学管理
GO
SELECT * FROM 课程表
/* The
GO in this comment causes it to be broken in half */
SELECT * FROM products
GO
--下面是一个有效注释的例子。
USE 教学管理
GO
-- First line of a multiple-line comment.
-- Second line of a multiple-line comment.
SELECT * FROM 课程表
GO
/* First line of a multiple-line comment.Second line of a multipl-line comment. */
SELECT * FROM 教师表
GO
SELECT 学号, /* 身份证号, */ 姓名
FROM 学生表
GO
8.1.3 变量
T-SQL使用两种变量,即全局变量和局部变量。
全局变量是SQL Server 系统内部使用的变量,其作用范围并不局限于某一程序,而是任何程序均可随时调用。
局部变量是用户自定义的变量,它仅在定义它的批处理内有效,常用来暂存从表中查询到的数据,或作为流程控制变量。SQL Server规定,局部变量必须以@开头,而且必须先用DECLARE命令定义后才可使用。
DECLARE命令的格式:
DECLARE {@变量名 变量类型}[, …n]
其中变量类型可以是SQL Server支持的所有数据类型,也可以是用户自定义的数据类型。
--以下例子定义了两个局部变量。
DECLARE @V1 INT, @V2 CHAR(100)
8.1.4 变量赋值
T-SQL使用SELECT或SET命令为变量赋值,其语法如下:
SELECT {@变量名=<表达式>}[, …n]
SET @变量名=<表达式>
注意:一条SET语句只能为一个变量赋值,而一条SELECT可以为多个变量赋值。
--例:用SET和SELECT语句为变量赋值。
DECLARE @V1 INT, @V2 CHAR(100), @V3 INT, @V4 CHAR(100)
SET @V1=100*100
SET @V2='ABC'+'DEF'
SELECT @V3=2*@V1, @V4=@V2+'HIJ'
PRINT @V1+@V3
PRINT @V2+@V4
GO
8.2 运算符和表达式
运算符是一种符号,用来指定要在一个或多个表达式中执行的操作。
T-SQL的运算符包括:
1)算术运算符;2)位运算符;3)连接运算符;4)比较运算符;5)逻辑运算符。
表达式是用运算符和括号将多个常量、局部变量、列、函数连接起来而得的符合T-SQL语法规则的式子。
T-SQL的表达式有:
1)数值型表达式;
2)字符串表达式;
3)条件表达式;
8.2.1 算术运算符
算术运算符用来对一个或两个数值型数据实施操作,进行其间的算术运算并返回数值型运算结果。
算术运算符包括:
+ (加) -(减、求负数) * (乘) /(除) %(求余)
8.2.2 位运算符
位运算符用来对一个或两个整型数据实施操作,进行其间的按位运算并返回整型运算结果。
位运算符包括:
&(按位与) |(按位或) ~(按位取反) ^(按位异或)
8.2.3 连接运算符
连接运算符用来将两个字符串操作数进行首尾相接,形成一个更长的字符串作为运算结果返回。
T-SQL的连接运算符是“+”
8.2.4 比较运算符
比较运算符用来对一个、两个或3个(同类)数据实施操作,进行其间的比较运算并返回逻辑值“真”或“假”。分为普通的和特殊的两类。
普通比较运算符用来对两个同类数据实施比较,包括:
>(大于) <(小于) =(等于) >=(大于等于) <=(小于等于) <>(不等于) !=(不等于) !>(不大于) !<(不小于)
特殊比较运算符实际上是普通比较运算符的推广或缩写形式,包括:
[NOT] BETWEEN AND (确定范围,三元运算)
[NOT] IN (确定集合,二元运算)
[NOT] LIKE (字符串匹配,二元运算)
IS [NOT] NULL (空值判断,一元运算)
<普通比较运算符>+{ALL|ANY} (二元运算)
EXISTS (一元运算)
特殊比较运算符的用法请参阅第5章的文章内容
8.2.5 逻辑运算符
逻辑运算符用来对一个或两个逻辑型数据实施操作,进行其间的逻辑运算并返回逻辑值“真”或“假”。
逻辑运算符包括:
AND(与) OR(或) NOT(非)
8.2.6 表达式
T-SQL的表达式可分为数值型表达式、字符串表达式和条件表达式。
数值型表达式是用算术运算符、位运算符和括号将多个数值型常量、数值型局部变量、数值型列、数值型函数连接起来而得的符合T-SQL语法规则的式子。数值型表达式的返回值是数值型数据。
字符串表达式是用连接运算符和括号将多个字符型常量、字符型局部变量、字符型列、字符型函数连接起来而得的符合T-SQL语法规则的式子。字符串表达式的返回值是字符串。
条件表达式是用比较运算符、逻辑运算符和括号将多个数值型表达式或字符串表达式连接起来而得的符合T-SQL语法规则的式子。条件表达式的返回值是逻辑值“真”或“假”。
函数、流程控制、程序应用实例分析三部分的内容后续会在本篇文章中更新添加
相关文章:
数据库复习笔记
写在最前, 写文章的初衷只是为了复习与记录自己的成长,笔者目前水平还有待提高,文章中难免会出现许多问题与错误,文章内容仅供参考,有不足的地方还请大家多多包涵并指正,谢谢~ 第八章 T-SQL程序结构 8.…...
学习STM32(6)-- STM32单片机ADCDAC的应用
1 引 言 深入了解并掌握STM32F103单片机在模拟数字转换(ADC)和数字模拟转换(DAC)应用方面的功能和操作。学习如何配置STM32F103的ADC模块,实现模拟信号到数字信号的精确转换;同时,探索DAC模块…...
学习记录第二十五天
wait函数 wait函数是一个系统调用,用于等待一个子进程结束并回收其资源。当父进程调用wait函数时,它会暂停执行,直到至少有一个子进程结束。wait函数的原型如下: #include <sys/types.h> #include <sys/wait.h>pid_…...
C语言:字符串函数strcmp
该函数用于比较两个字符串是否一样。 使用方法如下: #include<stdio.h> #include<string.h>int main() {//strcmp函数返回值有三种情况,小于零时返回-1,等于零,大于零时返回1printf("%d\n", strcmp("…...
【数据分析---偏企业】 Excel操作
各位大佬好 ,这里是阿川的博客,祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 Excel操作前 必看 Python 初阶 Python—语言基础与…...
Ajax-01.原生方式
<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Ajax-原生方式</title> </head> <!-…...
OpenAI GPT-2 model use with TensorFlow JS
题意:使用 TensorFlow JS 应用 OpenAI GPT-2 模型 问题背景: Is that possible to generate texts from OpenAI GPT-2 using TensorFlowJS? 是否可以使用 TensorFlowJS 生成 OpenAI GPT-2 的文本? If not what is the limitation, like mo…...
JVM-运行数据区(堆、栈、元空间)
文章声明:文章图片均来自互联网,因为本人画的图不够生动。 运行数据区是JVM最重要的一个区域。 运行数据区由栈、堆、元空间构成。 栈:程序计数器、JVM虚拟机栈,本地方法栈 本地方法栈:加载native修饰的方法&#…...
超详细!!! LVS(Linux virual server)负载均衡知识及其NAT模式、DR模式、火墙标记实验
目录 前言系统性能扩展方式集群Cluster分布式集群与分布式 四层转发与七层转发的区别 LVS(Linux virual server)一、LVS介绍LVS相关概念 二、LVS集群结构体系1. 负载均衡层(Load Balancer)2. 服务器群组层(Server Pool…...
信息学奥赛一本通1259:【例9.3】求最长不下降序列
题目: 1259:【例9.3】求最长不下降序列 时间限制: 1000 ms 内存限制: 65536 KB 提交数:51218 通过数: 20928 Special Judge 【题目描述】 设有由n(1≤n≤200)n(1≤n≤200)个不相同的整数组成的数列,记为:b(1)、b(2)、……、…...
星露谷模组开发教程#3 事件
首发于Enaium的个人博客 SMAPI提供了一些事件,比如游戏的内容、显示、输入等事件。这些事件可以让我们在游戏中添加自己的逻辑。这一节我们就来看看如何使用这些事件。 注册一个事件 在SMAPI中,我们可以通过IModHelper的Events属性来注册事件。比如我们…...
C语言程序设计(初识C语言后部分)
愿天下无Bug,秀发常驻。 3)函数的参数 1.实际参数(实参): 真实传给函数的参数,叫实参。 实参可以是:常量、变量、表达式、函数等。 无论实参是何类型的量,在进行函数调用时&#…...
驱动基础开发
1、字符设备传统开发模板 字符设备驱动框架,首先我们需要去用module_init这个宏去修饰整个驱动的入口函数,用module_exit去修饰整个驱动的出口函数,然后还需要用MODULE_LICENSE用于声明模块的许可证类型。 在入口函数里面我们需要注册字符设…...
从苹果AppStore看AI开发者生态
从苹果 App Store 看 AI 开发者生态 在人工智能迅速发展的今天,我们不禁要问:未来的 AI 开发者生态将会是什么样子?为了回答这个问题,我们不妨回顾一下移动互联网时代最成功的开发者生态之一——苹果的 App Store。 通过分析 App …...
【Python学习-UI界面】PyQt5 小部件1-Label
QLabel 对象可用作显示不可编辑的文本、图像或动态GIF影片的占位符。 它还可以用作其他小部件的助记键。 标签可以显示普通文本、超链接或富文本。 1、普通文本 直接双击输入即可 2、添加超链接 选中对应Label,右键选择多信息文本,添加链接,…...
【Linux详解】进度条实现 Linux下git 的远程上传
📃个人主页:island1314 🔥个人专栏:Linux—登神长阶 ⛺️ 欢迎关注:👍点赞 👂🏽留言 😍收藏 💞 💞 💞 🚀前言 &#x…...
Android进阶之路 - res、raw、assets 资源解析、区别对比
那天遇到一个资源目录层级的问题,索性重新整理记录一下,希望能帮到如吾往昔之少年的你们,哈哈哈哈哈哈… 一脸茫然,越写越多,时间成本属实有点大,就当一起来基础扫盲吧 resdrawablemipmapvaluescolor asset…...
从数字化到数智化:消费零售企业如何实现门店数智化管理?
随着信息技术的飞速发展,数字化已成为企业转型的必经之路。然而,数字化本身并不是目的,而是通往数智化的桥梁。数智化,即数据智能化,是指企业通过数字化手段收集和分析数据,进而利用这些数据驱动决策和创新…...
Linux中ES的安装
文章目录 一、ES是什么1.1、ES概念介绍1.2、技术架构1.2.1、Lucene介绍 1.3、ES的工作原理1.4、ES的适用场景 二、安装前的配置2.1、创建普通用户2.2、调整文件描述符数量和虚拟内存2.3、设置shell会话的资源限制(软限制和硬限制)2.4、增加虚拟内存的设置…...
Redis远程字典服务器(5) —— hash类型详解
目录 一,hash基本情况 二,hash常用命令详解 2.1 hset,hget,hexists,hdel 2.2 hexists,hdel 2.3 hkeys,hvals 2.4 hgetall,hmget 2.5 hlen,hsetnx 2.6 hincrby&am…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...
系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...
