SQL-流程控制语句

合集下载

存储过程及流程控制语句

存储过程及流程控制语句

存储过程及流程控制语句存储过程是⼀个SQL语句集合,当主动去调⽤存储过程时,其中内部的SQL语句会按照逻辑执⾏。

1、创建存储过程对于存储过程,可以接收参数,其参数有三类:in 仅⽤于传⼊参数⽤out 仅⽤于返回值⽤inout 既可以传⼊⼜可以当作返回值有参数的存储过程-- 创建存储过程delimiter \\create procedure p1(in i1 int,in i2 int,inout i3 int,out r1 int)BEGINDECLARE temp1 int;DECLARE temp2 int default 0;set temp1 = 1;set r1 = i1 + i2 + temp1 + temp2;set i3 = i3 + 100;end\\delimiter ;-- 执⾏存储过程set @t1 =4;set @t2 = 0;CALL p1 (1, 2 ,@t1, @t2);SELECT @t1,@t2;1. 结果集delimiter //create procedure p1()beginselect * from v1;end //delimiter ;2. 结果集+out值delimiter //create procedure p2(in n1 int,inout n3 int,out n2 int,)begindeclare temp1 int ;declare temp2 int default 0;select * from v1;set n2 = n1 + 100;set n3 = n3 + n1 + 100;end //delimiter ;3. 事务delimiter \\create PROCEDURE p1(OUT p_return_code tinyint)BEGINDECLARE exit handler for sqlexceptionBEGIN-- ERRORset p_return_code = 1;rollback;END;DECLARE exit handler for sqlwarningBEGIN-- WARNINGset p_return_code = 2;rollback;END;START TRANSACTION;DELETE from tb1;insert into tb2(name)values('seven');COMMIT;-- SUCCESSset p_return_code = 0;END\\delimiter ;4. 游标delimiter //create procedure p3()begindeclare ssid int; -- ⾃定义变量1declare ssname varchar(50); -- ⾃定义变量2DECLARE done INT DEFAULT FALSE;DECLARE my_cursor CURSOR FOR select sid,sname from student;DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; open my_cursor;xxoo: LOOPfetch my_cursor into ssid,ssname;if done thenleave xxoo;END IF;insert into teacher(tname) values(ssname);end loop xxoo;close my_cursor;end //delimter ;5. 动态执⾏SQLdelimiter \\CREATE PROCEDURE p4 (in nid int)BEGINPREPARE prod FROM 'select * from student where sid > ?';EXECUTE prod USING @nid;DEALLOCATE prepare prod;END\\delimiter ;2、删除存储过程drop procedure proc_name;3、执⾏存储过程执⾏存储过程-- ⽆参数call proc_name()-- 有参数,全incall proc_name(1,2)-- 有参数,有in,out,inoutset @t1=0;set @t2=3;call proc_name(1,2,@t1,@t2)pymysql执⾏存储过程#!/usr/bin/env python# -*- coding:utf-8 -*-import pymysqlconn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1') cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)# 执⾏存储过程cursor.callproc('p1', args=(1, 22, 3, 4))# 获取执⾏完存储的参数cursor.execute("select @_p1_0,@_p1_1,@_p1_2,@_p1_3")result = cursor.fetchall()mit()cursor.close()conn.close()print(result)MariaDB [sqlexample]> delimiter $$; MariaDB [sqlexample]> select * from class; -> select * from course$$;+-----+--------------+| cid | caption |+-----+--------------+| 1 | 三年⼆班 || 2 | 三年三班 || 3 | ⼀年⼆班 || 4 | ⼆年九班 || 5 | 全栈⼆班 || 6 | 全栈⼆班 || 7 | uuu || 8 | 'nnn' || 9 | op || 10 | ooo || 11 | ooo || 12 | ooo1 || 13 | ooo2 |+-----+--------------+13 rows in set (0.00 sec)+-----+--------+------------+| cid | cname | teacher_id |+-----+--------+------------+| 1 | ⽣物 | 1 || 2 | 物理 | 2 || 3 | 体育 | 3 || 4 | 美术 | 2 |+-----+--------+------------+4 rows in set (0.00 sec)MariaDB [sqlexample]> delimiter ; MariaDB [sqlexample]> delimiter $$ MariaDB [sqlexample]> create procedure p1() -> BEGIN-> select * from class;-> END $$Query OK, 0 rows affected (0.00 sec) MariaDB [sqlexample]> delimiter ; MariaDB [sqlexample]> call p1();+-----+--------------+| cid | caption |+-----+--------------+| 1 | 三年⼆班 || 2 | 三年三班 || 3 | ⼀年⼆班 || 4 | ⼆年九班 || 5 | 全栈⼆班 || 6 | 全栈⼆班 || 7 | uuu || 8 | 'nnn' || 9 | op || 10 | ooo || 11 | ooo || 12 | ooo1 || 13 | ooo2 |+-----+--------------+13 rows in set (0.01 sec)Query OK, 0 rows affected (0.01 sec) MariaDB [sqlexample]> delimiter // MariaDB [sqlexample]> create procedure p2( -> in i1 int,-> in i2 int,-> inout i3 int,-> out r1 int-> )-> BEGIN-> DECLARE temp1 int;-> DECLARE temp2 int default 0;-> set temp1 = 1;-> set r1 = i1 + i2 + temp1 + temp2;-> set i3 = i3 + 100;-> select * from student;-> end //Query OK, 0 rows affected (0.00 sec) MariaDB [sqlexample]> delimiter ;stored_procedure.py#!/usr/bin/env python3.8# -*- coding: UTF-8 -*-# __author: smoke# file: stored_procedure# time: 2021/10/27import pymysqlconn = pymysql.connect(host='172.16.100.67', port=3306, user='root', passwd='smoke520', db='sqlexample', charset='utf8')cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)# 执⾏存储过程r1 = cursor.callproc('p2', args=(1, 22, 3, 4))print(r1)# 获取执⾏完存储的参数r2 = cursor.execute("select @_p1_0,@_p1_1,@_p1_2,@_p1_3")print(r2)cursor.close()conn.close()/home/smoke/⽂档/DocumentFile/PycharmProjects/pythonProject/venv/bin/python /home/smoke/⽂档/DocumentFile/PycharmProjects/pythonProject/use_mysqlDB/stored_procedure.py (1, 22, 3, 4)1Process finished with exit code 0#!/usr/bin/env python3.8# -*- coding: UTF-8 -*-# __author: smoke# file: stored_procedure# time: 2021/10/27import pymysqlconn = pymysql.connect(host='172.16.100.67', port=3306, user='root', passwd='smoke520', db='sqlexample', charset='utf8')cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)# 执⾏存储过程r1 = cursor.callproc('p2', args=(1, 22, 3, 4))print(r1)# 获取执⾏完存储的参数r2 = cursor.execute("select @_p1_0,@_p1_1,@_p1_2,@_p1_3")print(r2)result = cursor.fetchall()print(result)cursor.close()conn.close()/home/smoke/⽂档/DocumentFile/PycharmProjects/pythonProject/venv/bin/python /home/smoke/⽂档/DocumentFile/PycharmProjects/pythonProject/use_mysqlDB/stored_procedure.py (1, 22, 3, 4)1[{'@_p1_0': None, '@_p1_1': None, '@_p1_2': None, '@_p1_3': None}]Process finished with exit code 0#!/usr/bin/env python3.8# -*- coding: UTF-8 -*-# __author: smoke# file: stored_procedure# time: 2021/10/27import pymysqlconn = pymysql.connect(host='172.16.100.67', port=3306, user='root', passwd='smoke520', db='sqlexample', charset='utf8')cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)# 执⾏存储过程r1 = cursor.callproc('p2', args=(1, 22, 3, 4))print(r1)# 获取执⾏完存储的参数r2 = cursor.execute("select @_p2_0,@_p2_1,@_p2_2,@_p2_3")print(r2)result = cursor.fetchall()print(result)cursor.close()conn.close()/home/smoke/⽂档/DocumentFile/PycharmProjects/pythonProject/venv/bin/python /home/smoke/⽂档/DocumentFile/PycharmProjects/pythonProject/use_mysqlDB/stored_procedure.py (1, 22, 3, 4)1[{'@_p2_0': 1, '@_p2_1': 22, '@_p2_2': 103, '@_p2_3': 24}]Process finished with exit code 0#!/usr/bin/env python3.8# -*- coding: UTF-8 -*-# __author: smoke# file: stored_procedure# time: 2021/10/27import pymysqlconn = pymysql.connect(host='172.16.100.67', port=3306, user='root', passwd='smoke520', db='sqlexample', charset='utf8')cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)r1 = cursor.callproc('p2', args=(1, 22, 3, 4))print(r1)result1 = cursor.fetchall()print(result1)# 获取执⾏完存储的参数r2 = cursor.execute("select @_p2_0,@_p2_1,@_p2_2,@_p2_3")print(r2)result2 = cursor.fetchall()print(result2)cursor.close()conn.close()/home/smoke/⽂档/DocumentFile/PycharmProjects/pythonProject/venv/bin/python /home/smoke/⽂档/DocumentFile/PycharmProjects/pythonProject/use_mysqlDB/stored_procedure.py (1, 22, 3, 4)[{'sid': 1, 'gender': '男', 'class_id': 1, 'sname': '马⼤狗'}, {'sid': 2, 'gender': '⼥', 'class_id': 1, 'sname': '钢蛋'}, {'sid': 3, 'gender': '男', 'class_id': 1, 'sname': '张三'}, {'sid': 4, 'gender': '男','class_id': 1, 'sname': '张⼀'}, {'sid': 5, 'gender': '⼥', 'class_id': 1, 'sname': '张⼆'}, {'sid': 6, 'gender': '男', 'class_id': 1, 'sname': '张四'}, {'sid': 7, 'gender': '⼥', 'class_id': 2, 'sname': '铁锤'}, {'sid': 8, 'gender': '男', 'class_id': 2, 'sname': '李三'}, {'sid': 9, 'gender': '男', 'class_id': 2, 'sname': '李⼀'}, {'sid': 10, 'gender': '⼥', 'class_id': 2, 'sname': '李⼆'}, {'sid': 11, 'gender': '男', 'class_id': 2, 'sname': '李四'}, {'sid': 12, 'gender': '⼥', 'class_id': 3, 'sname': '如花'}, {'sid': 13, 'gender': '男', 'class_id': 3, 'sname': '刘三'}, {'sid': 14, 'gender': '男', 'class_id': 3,'sname': '刘⼀'}, {'sid': 15, 'gender': '⼥', 'class_id': 3, 'sname': '刘⼆'}, {'sid': 16, 'gender': '男', 'class_id': 3, 'sname': '刘四'}, {'sid': 17, 'gender': '⼥', 'class_id': 1, 'sname': '鸭蛋'}, {'sid': 18, 'gender': '⼥', 'class_id': 1, 'sname': '鸭蛋1'}, {'sid': 19, 'gender': '⼥', 'class_id': 1, 'sname': '鸭蛋2'}, {'sid': 20, 'gender': '⼥', 'class_id': 1, 'sname': '鸭蛋3'}]1[{'@_p2_0': 1, '@_p2_1': 22, '@_p2_2': 103, '@_p2_3': 24}]Process finished with exit code 0其他1、条件语句if条件语句delimiter \\CREATE PROCEDURE proc_if ()BEGINdeclare i int default 0;if i = 1 THENSELECT 1;ELSEIF i = 2 THENSELECT 2;ELSESELECT 7;END IF;END\\delimiter ;2、循环语句while循环delimiter \\CREATE PROCEDURE proc_while ()BEGINDECLARE num INT ;SET num = 0 ;WHILE num < 10 DOSELECTnum ;SET num = num + 1 ;END WHILE ;END\\delimiter ;repeat循环delimiter \\CREATE PROCEDURE proc_repeat ()BEGINDECLARE i INT ;SET i = 0 ;repeatselect i;set i = i + 1;until i >= 5end repeat;END\\delimiter ;loopBEGINdeclare i int default 0;set i=i+1;if i<8 theniterate loop_label;end if;if i>=10 thenleave loop_label;end if;select i;end loop loop_label;END3、动态执⾏SQL语句动态执⾏SQLdelimiter \\DROP PROCEDURE IF EXISTS proc_sql \\CREATE PROCEDURE proc_sql ()BEGINdeclare p1 int;set p1 = 11;set @p1 = p1;PREPARE prod FROM 'select * from tb2 where nid > ?'; EXECUTE prod USING @p1;DEALLOCATE prepare prod;END\\delimiter ;。

PostgreSQL存储过程(3)-流程控制语句

PostgreSQL存储过程(3)-流程控制语句

PostgreSQL存储过程(3)-流程控制语句流程控制讲解条件语句,循环语句。

本次环境会⽤到表emp;下⾯是emp执⾏语句。

drop table emp;create table EMP(EMPNO numeric(4) not null,ENAME varchar(10),JOB varchar(9),MGR numeric(4),HIREDATE date,SAL numeric(7 ),COMM numeric(7 ),DEPTNO numeric(2));insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7369, 'SMITH', 'CLERK', 7902, to_date('1980-12-17', 'YYYY-MM-DD'), 800, null, 20);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7499, 'ALLEN', 'SALESMAN', 7698, to_date('1981-02-20', 'YYYY-MM-DD'), 1600, 300, 30);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7521, 'WARD', 'SALESMAN', 7698, to_date('1981-02-22', 'YYYY-MM-DD'), 1250, 500, 30);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7566, 'JONES', 'MANAGER', 7839, to_date('1981-04-02', 'YYYY-MM-DD'), 2975, null, 20);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7654, 'MARTIN', 'SALESMAN', 7698, to_date('1981-09-28', 'YYYY-MM-DD'), 1250, 1400, 30);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7698, 'BLAKE', 'MANAGER', 7839, to_date('1981-05-01', 'YYYY-MM-DD'), 2850, null, 30);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7782, 'CLARK', 'MANAGER', 7839, to_date('1981-06-09', 'YYYY-MM-DD'), 2450, null, 10);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7788, 'SCOTT', 'ANALYST', 7566, to_date('1987-04-19', 'YYYY-MM-DD'), 3000, null, 20);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7839, 'KING', 'PRESIDENT', null, to_date('1981-11-17', 'YYYY-MM-DD'), 5000, null, 10);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7844, 'TURNER', 'SALESMAN', 7698, to_date('1981-09-08', 'YYYY-MM-DD'), 1500, 0, 30);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7876, 'ADAMS', 'CLERK', 7788, to_date('1987-05-23', 'YYYY-MM-DD'), 1100, null, 20);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7900, 'JAMES', 'CLERK', 7698, to_date('1981-12-03', 'YYYY-MM-DD'), 950, null, 30);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7902, 'FORD', 'ANALYST', 7566,to_date('1981-12-02', 'YYYY-MM-DD'), 3000, null, 20);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7934, 'MILLER', 'CLERK', 7782, to_date('1982-01-23', 'YYYY-MM-DD'), 1300, null, 10);View Code1. 条件语句 IF和CASE语句让你可以根据某种条件执⾏命令。

mysql sql if else用法

mysql sql if else用法

mysql sql if else用法在MySQL中,可以使用IF-ELSE语句来进行条件判断和控制流程。

IF-ELSE语句根据给定的条件执行不同的操作。

基本语法如下:```IF(condition, statement1, statement2)```其中,condition是要进行判断的条件,如果条件为真,则执行statement1,否则执行statement2。

除了基本语法之外,还可以使用IF语句的嵌套形式来实现更复杂的条件判断和控制流程。

拓展:1.可以使用多个IF-ELSE语句来实现更多的条件判断和操作组合。

2. IF-ELSEIF-ELSE语句可以用来处理多种条件选择的情况。

3.在IF语句中,可以使用各种比较操作符(如等于、不等于、大于、小于等)以及逻辑操作符(如AND、OR、NOT)来组合条件。

4.在IF语句中,statement1和statement2可以是单个SQL语句、SQL代码块(BEGIN...END)、存储过程、函数等。

5.可以使用IF语句对查询结果进行条件过滤,例如:SELECT * FROM table WHERE IF(condition, column1, column2) > value。

6.可以使用IF语句在INSERT、UPDATE和DELETE语句中根据条件来执行不同的操作。

7.可以在SELECT语句中使用IF函数来进行条件计算或处理返回结果。

8.可以使用CASE语句来替代复杂的嵌套IF-ELSE语句,提供更简洁和可读性强的代码。

总之,MySQL的IF-ELSE语句可以在查询、存储过程和函数等场景中灵活使用,用于逻辑流程控制和条件判断,提供了丰富的功能和灵活性。

sql server中的goto语法

sql server中的goto语法

SQL Server 中的 GOTO 语法详解GOTO 是一种控制流语言元素,可以用来改变执行流程,跳转到指定的标签处。

GOTO 语句和标签可以在过程、批处理或语句块中的任何位置使用。

GOTO 语句可以嵌套使用,但不能跳转到批处理以外的标签。

GOTO 语句的权限默认情况下授予任何有效用户。

本文将介绍 GOTO 语法的基本规则、使用场景、优缺点和注意事项,并给出一些实际的示例。

1. GOTO 语法的基本规则GOTO 语法的一般形式如下:-- 定义标签label:-- 改变执行流程GOTO label其中,label 是一个符合标识符规则的名称,用来表示跳转的目标位置。

如果 GOTO 语句指向该标签,则其为处理的起点。

无论是否使用 GOTO 语句,标签均可作为注释方法使用。

例如,下面的代码定义了一个名为 Branch_One 的标签,并在某个条件下使用 GOTO 语句跳转到该标签:DECLARE@Counter int;SET@Counter=1;WHILE@Counter<10BEGINSELECT@CounterSET@Counter=@Counter+1IF@Counter=4GOTO Branch_One -- 如果计数器等于4,跳转到 Branch_One 标签处ENDBranch_One: -- 定义 Branch_One 标签SELECT'Jumping To Branch One.'执行结果如下:(No column name)123Jumping To Branch One.可以看到,当计数器等于4时,循环被中断,执行流程跳转到 Branch_One 标签处,输出了相应的信息。

2. GOTO 的使用场景GOTO 是一种非常灵活和强大的控制流语言元素,可以用来实现各种复杂的逻辑和功能。

以下是一些常见的使用场景:错误处理:当发生错误或异常时,可以使用 GOTO 跳转到错误处理部分,执行相应的操作,如回滚事务、记录日志、发送通知等。

sql流程控制go的使用

sql流程控制go的使用

SQL流程控制——GO的使用1. 简介在SQL中,流程控制用于控制程序的执行顺序和逻辑,以实现灵活的数据操作和处理。

其中,GO语句是SQL Server中的一种常用流程控制语句,用于执行一系列的SQL语句或批量操作。

本文将介绍GO语句的使用方法和示例。

2. GO语句的基本用法GO语句是SQL Server的批处理命令,用于将多个SQL语句分割成一组独立的批次,然后按顺序逐一执行。

在执行GO语句之前,会将当前批次中的SQL语句编译并执行,然后将结果返回客户端,执行过程中不进行事务控制。

GO语句的格式如下:[statement;]GO其中,statement代表SQL语句,可以是任意一条合法的SQL语句。

GO语句之后的分号是可选的,用于分隔每个SQL语句。

GO语句的作用是将多条SQL语句分隔执行,常用于创建表、插入数据、修改结构等场景。

下面是GO语句的一些常用示例。

2.1 创建表CREATE TABLE Employee (id INT PRIMARY KEY,name VARCHAR(50),age INT,gender VARCHAR(10));GO以上示例中,使用GO语句将创建表的DDL语句分割成两个批次,首先执行CREATE TABLE语句,然后执行GO语句。

2.2 插入数据INSERT INTO Employee (id, name, age, gender) VALUES (1, 'John', 30, 'Male');INSERT INTO Employee (id, name, age, gender) VALUES (2, 'Alice', 28, 'F emale');INSERT INTO Employee (id, name, age, gender) VALUES (3, 'Bob', 35, 'Mal e');GO以上示例中,使用GO语句将插入数据的DML语句分割成两个批次,首先执行第一个INSERT语句,然后执行第二个INSERT语句。

第6章 Transact-SQL简介、存储过程和触发器

第6章 Transact-SQL简介、存储过程和触发器

4、保证系统的安全性。
6.2.1存储过程的创建
1.使用T-SQL语句创建存储过程
创建存储过程使用CREATE PROC [EDURE]语 句。 语法格式如下:
CREATE PROCEDURE 存储过程名 [{@参数名 数据类型}[=default][OUTPUT] ][,…n] AS SQL语句
1 BEGIN…END语句块 BEGIN和END用来定义语句块,必须成 对出现。它将多个SQL语句括起来,相 当于一个单一语句,其语法格式如下。
BEGIN 语句1或语句块1 语句2或语句块2 … END
2 IF...ELSE语句 IF…ELSE语句用来实现选择结构,其 语法格式如下。 IF 布尔表达式 {语句1或语句块1 } [ELSE {语句2或语句块2} ]
PRINT @x PRINT @y PRINT @z
执行结果为 40 30 10
例:计算1+2+3+…+100的和
DECLARE @i int,@sum int SET @i=1 SET @sum=0 WHILE @i<=100 BEGIN SET @sum= @sum+ @i SET @i= @i +1 END PRINT @sum
3 WHILE语句 WHILE语句用来实现循环结构,其语法 格式如下:
WHILE 逻辑表达式 语句块
当逻辑表达式为真时,执行循环体,直 到逻辑表达式为假。 BREAK语句退出WHILE循环, CONTINUE语句跳过语句块中的所有其 他语句,开始下一次循环。
例:若IF条件为真或为假时要执行的语句只有一条 (默认时,一条语句就是一个语句块),则可以 不使用BEGIN…END。 DECLARE @x int,@y int,@z int SET @x=40 SET @y=30 IF(@x > @y) SET @z= @x - @y ELSE 执行结果为 SET @z= @y - @x 0 SET @x=0 30 PRINT @x PRINT @y 10 PRINT @z

mysqlleave语句和iterate的用法 -回复

mysqlleave语句和iterate的用法 -回复

mysqlleave语句和iterate的用法-回复标题:深入理解MySQL中的LEAVE语句和ITERATE的用法在MySQL中,LEAVE语句和ITERATE是两种重要的控制流程语句,它们主要用于在存储过程和触发器中实现复杂的逻辑控制。

本文将详细解析这两种语句的用法和应用场景。

一、LEAVE语句LEAVE语句在MySQL中主要用于提前退出循环或者程序。

它的基本语法为:LEAVE label;其中,label是一个标识符,用于标记一个循环或程序块的开始。

当执行到LEAVE语句时,程序将立即跳出与该label关联的循环或程序块。

以下是一个使用LEAVE语句的例子:sqlCREATE PROCEDURE CheckOrders()BEGINDECLARE v_Total DECIMAL(10,2);DECLARE v_OrderID INT;my_loop: LOOPSELECT OrderID, Total INTO v_OrderID, v_Total FROM Orders WHERE Status = 'Pending';IF v_Total > 1000 THENUPDATE Orders SET Status = 'Processed' WHERE OrderID = v_OrderID;LEAVE my_loop; 如果订单总额超过1000,处理订单并退出循环END IF;END LOOP my_loop;END;在这个例子中,我们创建了一个名为CheckOrders的存储过程,它会检查所有待处理的订单。

如果某个订单的总额超过1000,就将其状态改为“Processed”,并使用LEAVE语句退出循环。

二、ITERATE语句ITERATE语句在MySQL中用于跳过当前循环的剩余部分,并立即开始下一轮循环。

它的基本语法为:ITERATE label;同样,label是一个标识符,用于标记一个循环的开始。

SQL server2000的使用 批处理和流程控制语句

SQL server2000的使用  批处理和流程控制语句

例如:按要求编写程序。先定义一个INT类型 例如:按要求编写程序。先定义一个INT类型 @num变量,CHAR类型@cnum变量,然 @num变量,CHAR类型@cnum变量,然 后分别赋值2004,最后使用PRINT语句将 后分别赋值2004,最后使用PRINT语句将 这两个变量的值输出。 DECLARE @num int,@cnum char(10) SET @NUM=2004 SET @CNUM=‘2004’ PRINT @NUM PRINT @CNUM
局部变量的声明 DECLARE <@变量名1><数据类型>[,<@变 <@变量名1><数据类型>[,<@变 量名2><数据类型>……] 量名2><数据类型>……] 例如:DECLARE 例如:DECLARE @x int,@y int 局部变量的显示 SELECT <@变量名表> <@变量名表> PRINT <@变量名> <@变量名> 例如:SELECT 例如:SELECT @X,@Y 在此,若使用SELECT显示,则返回结果在 在此,若使用SELECT显示,则返回结果在 “网格”中;若使用PRINT显示,则返回 “网格”中;若使用PRINT显示,则返回 结果在“消息”中。
批处理和流程控制语句
批处理
所谓批处理是指从客户机传递到服务器上的一组完 整的数据和SQL指令。在一个批处理中,可以只 整的数据和SQL指令。在一个批处理中,可以只 包含一条SQL指令,也可以包含多条指令。批处 包含一条SQL指令,也可以包含多条指令。批处 理的所有语句被当作一个整体 ,而被成批地分析、 编译和执行,若这一批处理中存在一个语法错误, 则所有的语句都无法通过编译。 所有的批处理指令以GO作为结束的标志,当编 所有的批处理指令以GO作为结束的标志,当编 译器读到GO时,它就会把GO前面的所有指令当 译器读到GO时,它就会把GO前面的所有指令当 作一个批处理,并包装成一个数据包发送给服务 器。

Sqlserver中常用的流程控制语句

Sqlserver中常用的流程控制语句

Sql server中常用的流程控制语句一、条件语句:(一) IF……ELSE语句语法If 条件为真语句段Else语句段例:If (select age from stu where stuid=10)>18Print ‘成年了’ElsePrint ‘未成年’(二)IF ……ELSE IF …..ELSE 语句形式例:If (select grade from score where stuid=97001)>95Print ‘成绩为优秀’Else if (select grade from score where stuid=97001)>80Print ‘成绩为良好’Else if (select grade from score where stuid=97001)>=60Print ‘成绩为及格’ElsePrint ‘成绩为不及格,需要努力’二、WHILE、BREAK和CONTINUE语句While 值为真语句块Break:跳出循环Continue:跳出本次循环例1:Breakdeclare@num intbeginset @num=1beginwhile @num<=10beginif @num=6beginbreakprint @numset @num=@num+1endendend例2:continuedeclare@num intbeginset @num=0beginwhile @num<=10beginset @num=@num+1if @num=6continueprint @numendendend三、Return语句Return语句用来无条件地退出一个select语句或者一个过程。

declare@num intbeginset @num=1beginwhile @num<=10beginset @num=@num+1print @numreturnendendend四、WAITFOR 语句WAITFOR DELAY 时间:DBMS执行SQL语句需要等待的时间例:beginwaitfor delay '00:00:05'select * from stuendWAITFOR TIME 时间:DBMS需要等到某个时刻再执行SQL语句例:beginwaitfor time '15:07:44.403'select * from stuend。

过程化SQL

过程化SQL

过程化SQL过程化sql的基本结构1. 基本结构是块(Block)1declare2 ...3/*定义部分*/4 ...5//执⾏部分6begin7 sql语句、过程化SQL的流程控制语句8 exception9异常处理部分10end;2. 增加了变量、常量等定义语句变量定义变量名数据类型:= 初值表达式a float := 0;b int not null;常量定义常量名数据类型 constant := 常量表达式errorMsg string constant := "nested sql error";3. 增加了变量赋值语句变量名称:= 表达式set 变量名称 = 表达式set sno = sno +1;4. 增加了流程控制语句条件控制语句IF condition THENSequence_of_statements;END IF;IF condition THENSequence_of_statements1;ELSE Sequence_of_statements2;END IF;循环控制语句1. 简单循环loopLOOPSequence_of_statements;END LOOP;2. while - loopWHILE condition LOOPSequence_of_statements;END LOOP;每次执⾏循环都要判断while条件,注意和if不⼀样3. for - loopFOR count IN [REVERSE] bound1 … bound2 LOOPSequence_of_statements;END LOOP;错误处理存储过程存储过程类似于函数块分为命名块和匿名块命名块可以被反复调⽤,保存在数据库中,所以过程和函数就是命名块。

存储过程的创建1. 创建存储过程create procedure过程名([参数1,参数2,...])AS<过程化sql块>;例⼦:从账户1转指定数额的款项到账户2中1create procedure2 transfer(inAccount int,outAccount int,amount float)3/*定义存储过程transfer,其参数为转⼊账户、转出账户、转账额度(数据类型有待商榷)*/ 4as declear /*定义变量*/5 totalDepositOut float;6 totalDepositln float;7 inAccountnum int;8begin/*当账户为outAccount时,检测转出账户的余额total*/9select total into totalDepositOut from account10where accountnum = outAccount;11if totalDepositOut is null then12/*如果转出账户不存在或账户中没有存款*/13rollback;/*回滚事务*/14return;15end if;16if totalDepositOut < amount then17 rolback;18return;19end if;2021select Accountnum into inAccountnum from account22where accountnum = inAccount;23if inAccountnum is null then/*如果转⼊账户不存在*/24rollback;25return;26end if;2728update account set total = total - amount29where accountnum = outAccount;/*修改转出账户余额,减去转出额*/3031update account set total = total +amount32where accountnum = inAccount;/*修改转⼊余额,增加转⼊额*/3334commit; /*提交转账事物*/3536end;在sqlserver上的代码:1create database ZYY_ACCOUNT;23create TABLE account (4 accountnum int primary key,5 total float6 );7insert into account8values(010********,10000),(010********,10000);9select*from account;1011drop proc transfer12go13create proc transfer(@accountin int,@accountout int, @money float)14as15begin16/*定义变量*/17declare@totalDepositOut float;18declare@totalDepositln float;19declare@inAccountnum int;20/*当账户为outAccount时,检测转出账户的余额total*/21set@totalDepositOut= (select total from account where accountnum =@accountout);22if@totalDepositOut is null23return;24if@totalDepositOut<@money25return;26/*检测转⼊账户是否存在*/27set@inAccountnum= (select accountnum from account where accountnum =@accountin) 28if@inAccountnum is null29return;3031update account set total = total -@money32where accountnum =@accountout;/*修改转出账户余额,减去转出额*/33update account set total = total +@money34where accountnum =@accountin;/*修改转⼊余额,增加转⼊额*/35end36go3738exec transfer 1003815868,1003813828,10000;3940select*from account;带有游标的存储过程!1/*1.统计离散数学的成绩分布情况,即按照各分段统计⼈数*/2--插⼊统计数据3insert into Student values4 ('202090001','tom_1','男',20,'IS'),5 ('202090002','tom_2','男',20,'IS'),6 ('202090003','tom_3','男',20,'IS'),7 ('202090004','tom_4','⼥',20,'IS'),8 ('202090005','tom_5','⼥',20,'IS'),9 ('202090006','tom_6','⼥',20,'IS');10insert into Course values(8,'离散数学',null,null);11insert into SC values12 ('202090001',8,40),13 ('202090002',8,50),14 ('202090003',8,60),15 ('202090004',8,70),16 ('202090005',8,80),17 ('202090006',8,90);18--创建⼀个表⽤来存放成绩分布情况19create table GradeTJ(scoreLow60 int,scoreBetween60And80 int,scoreUp80 int);20--创建⼀个存储过程21go22create proc TongJi(@courseNumber int)23as24declare@container int;25--因为返回值不唯⼀,需要⽤到游标26declare my_cursor cursor for select Grade from SC where Cno =@courseNumber;27declare@count1int;set@count1=0;28declare@count2int;set@count2=0;29declare@count3int;set@count3=0;30begin31open my_cursor;--打开游标32fetch my_cursor into@container;--获取my_cursor的下⼀条数据,赋值给@container33while(@@FETCH_STATUS=0)--@@fetch_status 指针:0 FETCH 语句成功;34--1 FETCH 语句失败或此⾏不在结果集中;2 被提取的⾏不存在。

sql编程中流程控制IF……THEN……ELSEIF……THEN………ENDIF

sql编程中流程控制IF……THEN……ELSEIF……THEN………ENDIF

sql编程中流程控制IF……THEN……ELSEIF……THEN………ENDIF写mysql存储过程应注意的⼏点:1、声明变量(declare)时要注意字符集,⽤变量存储表字段时,表字段与变量的字符编码要⼀致。

2、mysql的字符合并不能⽤‘+’号,必须⽤concat函数。

3、每个游标必须使⽤不同的declare continue handler for not found set done=1来控制游标的结束。

BEGINdeclare rt VARCHAR(100) CHARACTER SET gbk DEFAULT NULL;declare done tinyint(1) default 0;DECLARE ttname VARCHAR(60) CHARACTER SET gbk DEFAULT NULL;DECLARE tsqltxt VARCHAR(512) CHARACTER SET gbk DEFAULT NULL;DECLARE tremarks VARCHAR(60) CHARACTER SET gbk DEFAULT NULL;DECLARE tfield VARCHAR(60) CHARACTER SET gbk DEFAULT NULL;DECLARE curtable CURSOR FORSELECT distinct TABLE_nameFROM information_schema.TABLEs where TRIM(TABLE_COMMENT)<>'' and TRIM(TABLE_COMMENT)<>'VIEW' order by TABLE_name;declare continue handler for not found set done=1;set NAMES 'utf8';drop table if EXISTS GetTableSQL;CREATE TABLE `gettablesql` (`tbname` varchar(60) CHARACTER SET gbk DEFAULT NULL,`sqltxt` varchar(4096) CHARACTER SET gbk DEFAULT NULL,`tabletitle` varchar(51) CHARACTER SET gbk DEFAULT NULL) ENGINE=InnoDB;open curtable;tableloop:LOOPset tsqltxt='select';FETCH curtableINTO ttname;IF done = 1 THENLEAVE tableloop;END IF;-- select ttname;BEGINdeclare done1 tinyint(1) default 0;DECLARE curfield CURSOR FORSELECT COLUMN_NAME,COLUMN_COMMENTFROM information_schema.COLUMNS where upper(TABLE_name)=upper(ttname) and (COLUMN_COMMENT<>'') ; declare continue handler for not found set done1=1;OPEN curfield;fieldloop:LOOPFETCH curfieldINTO tfield,tremarks;IF done1 = 1 THENLEAVE fieldloop;END IF;if tsqltxt='select' THENset tsqltxt=CONCAT(tsqltxt,' ',tfield,' ','''',tremarks,'''');ELSEset tsqltxt=CONCAT(tsqltxt,',',tfield,' ','''',tremarks,'''');END IF;END LOOP fieldloop;close curfield;set tsqltxt=concat(tsqltxt,' from ',ttname);insert into GetTableSQL values(ttname,tsqltxt,'');END;END LOOP tableloop;close curtable;update GetTableSQL as G set tabletitle=(select TABLE_COMMENT from information_schema.TABLEs swhere (trim(s.TABLE_COMMENT)<>'') and g.tbname=s.table_name );select cast(count(*) as char) into rt from GetTableSQL;set rt=concat('成功更新',rt,'个表的表名注释和字段注释到字典库GetTableSQL中!');SELECT rt;END。

SQL编程之SQL语言基础

SQL编程之SQL语言基础

SQL编程之SQL语⾔基础⼀、SQL语⾔基础1.1 常量与变量常量也称为⽂字值或标量值,是指程序运⾏中始终不变的量。

在 SQL 程序设计过程中,定义常量的格式取决于它所表⽰的值的数据类型。

常量类型常量表⽰说明字符串常量包括在单引号或双引号中,由字母(a~z,A~Z)、数字(0~9)、特殊符号组成。

⼗进制整型常量使⽤不带⼩数点的⼗进制数据表⽰。

⽰例:1234、321、+123、-123⼗六进制整型常量使⽤前缀0x后跟⼗六进制数字串表⽰。

⽇期常量使⽤单引号将⽇期时间字符串括起来。

MySQL是按年-⽉-⽇的顺序表⽰⽇期的。

中间分隔符可以⽤-,也可以⽤/、\、@、%等特征符号。

实型常量有定点表⽰和浮点表⽰两种⽅式。

⽰例:123.4、-123.4、19E24、-83E2位字段值使⽤b'value'符号写位字段值。

value是⼀个⽤0和1写成的⼆进制值。

例如:b'0'显⽰空⽩,b'1'显⽰⼀个笑脸图标。

⽰例:select bin(b'111101'+0),oct(b'111101'+0)布尔常量布尔常量只包含两个可能的值:TRUE和FALSE。

FALSE的数字值为0,TRUE的数字值为1。

NULL值 NULL可适⽤于各种列类型,它通常表⽰'没有值'、'⽆数据'等意义,并且不同于数字类型的0或字符串类型的空字符床。

变量就是在程序执⾏的过程中,其值是可变的。

在MySQL中,存在三种类型的变量:系统变量⽤户变量局部变量系统变量可以分为全局(global)变量和会话(session)变量两种。

1.1.1 全局变量和会话变量全局变量由MySQL启动时由服务器⾃动将它们初始化为默认值,这些默认值可以通过更改 my.ini ⽂件来更改。

会话变量在每次建⽴⼀个新的链接的时候,由MySQL来初始化。

MySQL会将当前所有全局变量的值复制⼀份作为会话变量。

mysql 流程控制语句

mysql 流程控制语句

mysql 流程控制语句MySQL流程控制语句是一组语句,用于控制MySQL程序的执行逻辑。

这些语句可以帮助我们实现分支、循环和异常处理等功能。

下面列举了10个MySQL流程控制语句。

1. IF语句IF语句是MySQL中最基本的流程控制语句之一,它的基本语法如下:IF (condition) THENstatement1;ELSEstatement2;END IF;其中,condition是一个条件表达式,如果它为true,则执行statement1,否则执行statement2。

ENDIF用于结束IF语句的代码块。

2. CASE语句CASE语句是一种多分支语句,根据条件执行不同的语句块。

它的基本语法如下:CASE expressionWHEN value1 THEN statement1;WHEN value2 THEN statement2;...ELSE statementN;END CASE;其中,expression是要测试的表达式,value1、value2等是可能的值。

如果expression等于value1,则执行statement1,否则继续测试下一个值,直到找到匹配的值或者执行ELSE语句块。

3. WHILE语句WHILE语句是一种循环语句,它的基本语法如下:WHILE condition DOstatement;END WHILE;其中,condition是循环的条件表达式,如果它为true,则执行statement,再次测试condition,直到它为false为止。

4. REPEAT语句REPEAT语句也是一种循环语句,它的基本语法如下:REPEATstatement;UNTIL condition;END REPEAT;其中,statement是要执行的语句块,condition是循环的终止条件。

循环先执行一次statement,然后测试condition是否为true,如果为false,则继续执行statement,直到condition为true为止。

sql中if的用法

sql中if的用法

sql中if的用法(原创版)目录1.SQL 中 IF 的概述2.IF 语句的基本语法3.IF 语句的逻辑运算4.IF 语句的常见用途5.示例与实践正文【1.SQL 中 IF 的概述】在 SQL 中,IF 语句是一种控制流程的语句,它可以根据某个条件决定执行哪一段代码。

这对于在查询结果中根据特定条件进行筛选和计算非常有用。

【2.IF 语句的基本语法】IF 语句的基本语法如下:```IF condition THEN-- 语句块 1ELSE-- 语句块 2END IF;```其中,`condition`是用于判断的条件,`语句块 1`是在条件为真时执行的代码,而`语句块 2`则是在条件为假时执行的代码。

【3.IF 语句的逻辑运算】IF 语句支持常见的逻辑运算,如大于、小于、等于、不等于等。

在判断条件时,可以使用这些运算符进行比较。

【4.IF 语句的常见用途】IF 语句在 SQL 中有很多用途,例如:- 根据条件计算字段值- 根据条件筛选查询结果- 在查询结果中添加默认值等【5.示例与实践】假设我们有一个员工表,包含以下字段:id, name, salary。

现在,我们想要查询工资高于 5000 的员工,并计算他们的工资总额。

可以使用IF 语句如下:```sqlSELECT id, name, salary,IF (salary > 5000, salary, 0) AS adjusted_salaryFROM employee;```上述查询将返回一个新的`adjusted_salary`字段,表示工资高于5000 的员工的实际工资,以及工资低于或等于 5000 的员工的工资补足到 5000。

sql switch语句

sql switch语句

sql switch语句SQL中的Switch语句是什么,如何使用它?在SQL中,Switch语句通常被称为Case语句,它是一种流程控制语句,用于基于条件执行不同的代码块。

Case语句通常包含一个选择器表达式和一组Case子句,每个Case子句都关联一个特定的值并定义了要执行的代码。

下面是一个简单的Case语句示例:```SELECTCASEWHEN color = 'red' THEN 'Stop'WHEN color = 'yellow' THEN 'Caution'ELSE 'Go'END AS signalFROMtraffic_lights;```在上面的示例中,选择器表达式是color列,Case子句定义了每种颜色的信号,当color等于'red'时,输出'Stop',当color等于'yellow'时,输出'Caution',否则输出'Go'。

Case语句也可以与其他SQL命令一起使用,例如:```UPDATEordersSETstatus =CASEWHEN date_processed IS NULL THEN 'Pending'WHEN date_shipped IS NULL THEN 'Processed'ELSE 'Shipped'ENDWHEREcustomer_id = 1234;```在上面的示例中,Case语句用于根据订单处理和发货的日期来更新订单状态。

总之,Case语句是SQL中非常有用的工具,可以根据情况执行不同的操作。

在使用之前,请确保对语法和逻辑有充分的了解。

sql if条件表达式

sql if条件表达式

sql if条件表达式SQL中的IF条件表达式是用于控制流程的一种语句,它允许我们根据逻辑条件来执行不同的操作。

本文将一步一步回答关于SQL IF条件表达式的问题,涵盖了其语法、用法和实例等方面的内容。

第一步:概述SQL中的IF条件表达式是一种控制流程的语句,它允许我们根据逻辑条件来执行不同的操作。

该表达式使用IF关键字后跟一个逻辑条件,然后在满足条件时执行指定的操作。

第二步:语法SQL中的IF条件表达式的基本语法如下所示:IF condition THENstatement1;ELSEstatement2;END IF;其中,condition是一个逻辑条件,可以是任何返回布尔值的表达式。

如果条件为真,则执行statement1中的代码;如果条件为假,则执行statement2中的代码。

ENDIF表示结束条件语句的标志符。

第三步:用法IF条件表达式主要用于在查询或存储过程中根据特定条件执行不同的逻辑操作。

它可以帮助我们处理复杂的数据逻辑和控制流程,提高查询的灵活性和可读性。

第四步:示例为了更好地理解IF条件表达式的用法,我们来看一个简单的示例。

假设我们有一个员工表,其中包含员工的ID、姓名和工资。

我们希望根据每个员工的工资水平来判断他们的级别,并输出相应的结果。

IF salary >= 10000 THENSET level = '高级员工';ELSEIF salary >= 5000 AND salary < 10000 THENSET level = '中级员工';ELSESET level = '初级员工';END IF;以上的示例中,我们根据不同的工资水平设置员工的级别。

如果工资大于等于10000,则将级别设置为'高级员工';如果工资在5000到9999之间,则将级别设置为'中级员工';否则,将级别设置为'初级员工'。

SQL流程控制语句

SQL流程控制语句

SQL流程控制语句1.IF语句:根据给定的条件决定是否执行段代码。

语法格式如下:```sqlIF(condition, statement1, statement2);```如果条件为真,执行`statement1`,否则执行`statement2`。

2.CASE语句:根据给定的条件在多个选项中选择一个执行。

有两种形式:简单CASE表达式和CASE表达式。

-简单CASE表达式的语法格式如下:```sqlCASE expressionWHEN value1 THEN statement1WHEN value2 THEN statement2...ELSE statementNEND;```根据`expression`的值,选择相应的值进行处理。

-CASE表达式的语法格式如下:CASEWHEN condition1 THEN statement1WHEN condition2 THEN statement2...ELSE statementNEND;```根据`condition`的结果,选择满足条件的值进行处理。

3.WHILE语句:循环执行一段代码,直到给定的条件不成立为止。

语法格式如下:```sqlWHILE condition DOstatement;ENDWHILE;```只要`condition`为真,就重复执行`statement`。

4.LOOP语句:无限循环执行一段代码,只能通过`LEAVE`语句或`EXIT`语句退出循环。

语法格式如下:LOOPstatement1;statement2;...IF(condition) THENLEAVELOOP;ENDIF;...ENDLOOP;```循环中的代码会一直执行,直到使用`LEAVE`语句或`EXIT`语句退出循环。

以上是一些常见的SQL流程控制语句,可以根据具体的需求选择合适的语句进行流程控制。

需要注意的是,SQL是一种声明式语言,对流程控制的支持相对有限。

sql语句exit和not exit用法

sql语句exit和not exit用法

sql语句exit和not exit用法
在SQL中,e某it和not e某it语句用于控制流程和条件处理。

这些语句允许程序员检查条件并决定是否继续执行程序或跳出循环。

1. E某it语句
E某it语句用于跳出当前程序或过程。

当条件满足时,程序将停止执行并退出。

例如,以下代码将在找到ID=5的行时退出程序:
```
SETID=5;
SELECT 某 FROM employees WHERE ID = 5;
```
在上面的代码中,如果查询语句返回至少一行结果,则不会执行"EXIT"语句,否则程序将停止执行并退出。

2. Not E某it语句
Not E某it语句用于继续执行程序或跳出循环。

当条件不满足时,程序将停止执行并退出。

以下代码将在找到ID=5的行时继续执行程序:
```
SETID=5;
SELECT 某 FROM employees WHERE ID = 5;
--继续执行程序
```
在上面的代码中,如果查询语句返回至少一行结果,则程序将继续执行,否则程序将停止执行。

总结
E某it和not e某it语句用于控制流程和条件处理。

E某it语句用于跳出当前程序或过程,而not e某it语句用于继续执行程序或跳出循环。

在使用这些语句时,程序员应该仔细考虑条件和限制,以确保程序能够正确执行。

T-SQL编程基础

T-SQL编程基础

引入新课:要编写存储过程、触发器及事务,首先要掌握T-SQL语言的语法规范和语言基础。

一、批处理若干条一次性发送到服务器端的T-SQL语句集合(结束标志为GO语句),编译成一个可执行单元,称为执行计划。

举例说明:如果批处理中的一条语句发生编译错,执行计划就无法编译,从而整个批就无法执行。

有关批处理的限制,详见教材二、注释行注释:――注释文本块注释:/*注释文本*/三、常量与变量1、局部变量:用户定义的~,以@开始(1)声明:DECLARE @变量名数据类型[,…n] (注:刚声明的局部变量其值为NULL)举例:DECLARE @n INT (声明然后赋初值:DECLARE @n INT=0) (2)赋值:SET语句或SELECT语句(举例说明:如果查询返回多行,那么把最后一行的值赋给局部变量)(3)输出Print 局部变量或字符串表达式SELECT 局部变量AS 自定义列名(4)作用域:只能在声明的批处理、存储过程或触发器中使用(举例说明:局部变量的声明与使用必须在同一个批内)2、全局变量:系统提供的~,以@@开始,用户不能定义及修改全局变量,但能通过全局变量来测试系统的设定值或者T-SQL命令执行后的状态值。

也可用PRINT、SELECT命令输出举例:@@ERROR的值表示最后执行的T-SQL语句的错误号,如执行正确,则为0@@ROWCOUNT的值表示受上一个SQL语句影响的行数四、流程控制语句1、 BEGIN…END:语句块2、 IF…ELSE举例:声明一个局部变量,并给其赋值,然后判断其是偶数还是奇数并输出结果DECLARE@n intset@n=12IF@n%2=0beginprint@nprint'偶数!'endELSEprint'奇数!'go3、 CASE函数(1)简单~: CASE 表达式WHEN 值1 THEN 返回表达式1WHEN 值2 THEN 返回表达式2…[ELSE 返回表达式n+1]END(2)搜索~: CASEWHEN 条件表达式1 THEN 返回表达式1WHEN 条件表达式2 THEN 返回表达式2…[ELSE 返回表达式n+1]END举例:(1)根据成绩等级gradeLevel值(‘A’.’B’.’C’,’D’,’E’)输出(‘优秀’,良好,中等,及格,不及格)DECLARE@gradeLevel char(1),@result VARCHAR(10)SET@gradeLevel='a'SET@result=CASE upper(@gradeLevel)WHEN'A'THEN'优秀'WHEN'B'THEN'良好'WHEN'C'THEN'中等'WHEN'D'THEN'及格'WHEN'E'THEN'不及格'ELSE'超出范围!'ENDPRINT@result(2)根据成绩分数,输出成绩等级:优秀,良好,中等,及格,不及格DECLARE@grade_avg DECIMAL(3,1)DECLARE@result VARCHAR(10)SELECT@grade_avg=AVG(stuScore)FROM stuMarksWHERE stuNo='S001'SET@result=CASEWHEN@grade_avg>=90 and@grade_avg<=100 THEN'优秀'WHEN@grade_avg>=80 and@grade_avg<90 THEN'良好'WHEN@grade_avg>=70 and@grade_avg<80 THEN'中等'WHEN@grade_avg>=60 and@grade_avg<70 THEN'及格'WHEN@grade_avg>=0 and@grade_avg<60 THEN'不及格ELSE'超出范围!'ENDprint@grade_avgPRINT@result(3)把stuINfo表的stuSex改为用tinyint类型,分别用0,1表示性别’男’、’女’,然后查询学号,姓名及性别,要求输出结果时,性别转换成相应的男、女表示SELECT姓名=stuname,性别=case stuSexwhen 1 then'男'when 0 then'女'endFROM stuInfo4、 WHILE语句:WHILE 条件BEGIN[break|continue]END举例:计算1+2+。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.变量的定义、赋值、输出
a)定义三个变量name、num、birthday,分别赋值'Mike'、18、'2014-9-1'并输出2.If语句的用法
a)If语句的练习
b)If…else…语句的练习
c)Begin…end语句的练习
3.查询少数民族学生中是否有党员,如果有输出党员人数,如果没有就输出“少数民族学生没有党员!”
declare @num int
select @num=count(*) from
学生基本信息表
where 民族<> '民族' and 政治面貌='党员'
if @num>0
print '少数民族有'+convert(varchar(10),@num)+'人'
else
print 'error!'
4.查询是否有书的定价高于指定价格的书,如果有输出该书的信息,如果没有就输出“对不起,不存在高于***的书”
if exists(select * from
book1
where 定价>2200)
select * from
book1
where 定价>2200
else
print 'sorry,不存在高于2200的书'
5.Case的两种用法
a)例1:如果变量c的值为a,则country为America;如果变量c的值为b,则country
为Britain;如果变量c的值为c,则country为China;如果变量c的值为d,则country
为Demark;否则country的值为Japan
use book
declare @c char(10),@country char(10)
set @c='a'
set @country=
case
when @c='a' then'America'
when @c='b' then'Britain'
when @c='c' then'China'
when @c='d' then'Demark'
else 'Japan'
end
print @country
b)例2 :如果成绩高于100分,则输出“优秀”;如果成绩高于90分,则输出“良
好”;如果成绩高于80分,则输出“合格”,否则,输出“不合格”
use book
declare @score char(10),@grade char(10)
set @score=90
set @grade=
case
when @score=100 then'优秀'
when @score>90 then'良好'
when @score>80 then'合格'
else '不合格'
end
print @grade
6.输出宿舍楼号所住的是哪个系
use book
declare @xibu char(10),@louhao char(10)
set @louhao=2
set @xibu=
case
when @louhao=2 then'经济管理系'
when @louhao=3 then'食品工程系'
when @louhao=5 then'信息技术系'
when @louhao=7 then'英语系'
end
print @xibu
7.从book1表中,选取书名、出版社,如果出版社为“中国长安”则输出‘最有实力的出版社’,如果出版社为“海南”,则输出“影响力最强的出版社”
use book
select 书名,出版社=
case 出版社
when '中国长安' then '最有实力的出版社'
when '海南' then '影响力最强的出版社'
end
from book1
where 出版社in('中国长安','海南')
8.显示所有学生的学号,课程和成绩等级,等级标准为:优秀(85-100)、良好(75-84)、合格(60-74)、不合格(60分以下)
9。

根据学号和课程号,输出该学生在该门课程的成绩等级,等级标准为:优秀(85-100)、良好(75-84)、合格(60-74)、不合格(60分以下),如果没有该学号或课程号,则输出“学号或课程号不存在!”。

相关文档
最新文档