第3章
数据库编程
标准SQL是非过程化的查询语言,具有操作统一、面向集合、功能丰富、使用简单等多项优点。和程序设计语言相比,高度非过程化的优点同时也造成了SQL语言的一个弱点——缺少流程控制能力,难以实现应用业务中的逻辑控制。SQL编程技术可以有效克服SQL语言在实现复杂应用方面的不足,提高应用系统和RDBMS间的互操作性。
3.1MySQL编程基础
为了提高代码的重用性及可维护性,经常需要将频繁使用的业务逻辑封装成存储程序。和其他数据库管理系统一样,MySQL也提供了用于编写结构化程序的数据类型、常量、变量、运算符和表达式等,掌握这些内容是MySQL程序设计的基础。
3.1.1常量与变量
在程序运行过程中,程序本身不能改变其值的数据称为常量。相应地,在程序运行过程中可以改变其值的数据称为变量。
1. 常量
在SQL程序设计过程中,常量的格式取决于其数据类型,常用的常量包括字符串常量、数值常量、日期和时间常量、布尔值常量和NULL值。
1) 字符串常量
字符串常量指用单引号或双引号括起来的字符序列。在MySQL中**使用单引号。
【例31】查询表emp中ename值为SCOTT的雇员的信息。 SELECT * FROM emp WHERE ename='SCOTT';
请读者考虑,为什么下面的SQL命令没有查到结果记录? SELECT * FROM emp WHERE 'ename'='SCOTT';
2) 数值常量
数值常量可以分为整数常量和小数常量。
【例32】将表emp中SCOTT雇员的comm值改为1250(要求用科学记数法表示)。 UPDATE emp SET COMM=1.25E 3 WHERE ename='SCOTT'; SELECT * FROM emp WHERE ename='SCOTT';
3) 日期和时间常量
日期和时间常量使用特定格式的字符日期值表示,用单引号括起来。例如'2018/07/17'、'20180717 10:30:20'。
【例33】查询表emp中1981年以后雇员的ename和hiredate信息。 SELECT ename,hiredate FROM emp WHERE hiredate>'1981/12/31';
4) 布尔值常量
布尔值常量只有true和false两个值,SQL命令的运行结果用1代表true,用0代表false。
【例34】查询表emp中所有雇员的ename和sal是否大于或等于2000的判断结果。 SELECT ename,sal>2000 FROM emp;
5) NULL值
NULL值适用于各种字段类型,通常表示“不确定的值”。NULL值参与的运算,结果仍为NULL值。
【例35】将表emp中雇员SCOTT的comm列值改为NULL值,然后在NULL值的基础上加1250元,请考虑*终comm列值是什么? UPDATE emp SET comm=NULL WHERE ename='SCOTT'; UPDATE emp SET comm=comm 1250 WHERE ename='SCOTT'; SELECT * FROM emp WHERE ename='SCOTT';