【查询表】
Select `Level` from tablename Where `CompID`='001' and `State`=0;
注意:字段名用” ` “包起来。字符串用单引号包起来。
插入,更新,删除:
INSERT INTO b_comp (`CompID`, `CompName`, `Level`, `MaxUsers`) VALUES (@CompID, pCompName, @Level, pMaxUsers); update b_comp set `CompName` = pCompName, `MaxUsers` = pMaxUsers where `State` = 0 and `CompID` = pCompID; Delete from b_module where `MID` = pMID and `Flag` = 0;
【变量】
变量定义
-- 使用set或select直接赋值,变量名以 @ 开头. set @var=1; -- 以 DECLARE 关键字声明的变量,只能在存储过程中使用,称为存储过程变量 DECLARE var1 INT DEFAULT 0; -- 区别: /* 在调用存储过程时,以DECLARE声明的变量都会被初始化为 NULL。而会话变量(即@开头的变量)则不会被再初始化,在一个会话内,只须初始化一次,之后在会话内都是对上一次计算的结果,就相当于在是这个会话内的全局变量。 */ DECLARE c int DEFAULT 0; SET c=a+b; SELECT c AS C;
变量赋值
select into 语句句式:SELECT col_name[,...] INTO var_name[,...] table_expr [WHERE...]; DECLARE v_employee_name VARCHAR(100); DECLARE v_employee_salary DECIMAL(8,4); SELECT employee_name, employee_salary INTO v_employee_name, v_employee_salary FROM employees WHERE employee_id=1;
-- 将字段 Level 的值赋给变量 @Level , 使用 into 将不会产生结果集 Select `Level` into @Level from b_comp Where `CompID`='001' and `State`=0;
注意:mysql中变量可以不用定义,要用的时候直接用就行。变量不一定必须以”@"开头(SQLServer中必须)
-- 将字段 Level 的值赋给变量 @Level, 会产生一个结果集。 Select @Level := `Level` from b_comp Where `CompID`='001' and `State`=0;
【条件判断】
IF表达式
IF(expr1,expr2,expr3)
如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。
select *,if(sva=1,"男","女") as ssva from taname where sva != ""
在第一个方案的返回结果中, value=compare-value。而第二个方案的返回结果是第一种情况的真实结果。如果没有匹配的结果值,则返回结果为ELSE后的结果,如果没有ELSE 部分,则返回值为 NULL。
SELECT CASE 1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END as testCol
IFNULL(expr1,expr2)
假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。
SELECT IFNULL(1,0); -- 1 SELECT IFNULL(NULL,10); -- 10 SELECT IFNULL(1/0,'yes'); -- 'yes'
IF ELSE 做为流程控制语句使用
if实现条件判断,满足不同条件执行不同的操作,这个我们只要学编程的都知道if的作用了,下面我们来看看mysql 存储过程中的if是如何使用的吧。
IF search_condition THEN statement_list; [ELSEIF search_condition THEN] statement_list ... [ELSE statement_list] END IF;
示例:
create procedure dbname.proc_getGrade (stu_no varchar(20),cour_no varchar(10)) BEGIN declare stu_grade float; select grade into stu_grade from grade where student_no=stu_no and course_no=cour_no; if stu_grade>=90 then select stu_grade,'A'; elseif stu_grade<90 and stu_grade>=80 then select stu_grade,'B'; elseif stu_grade<80 and stu_grade>=70 then select stu_grade,'C'; elseif stu_grade70 and stu_grade>=60 then select stu_grade,'D'; else select stu_grade,'E'; end if; END
注意:IF作为一条语句,在END IF后需要加上分号“;”以表示语句结束,其他语句如CASE、LOOP等也是相同的。
【数据类型转换】
cast(value as type); convert(value,type);
说明 value 为要转换原数据类型的值,type目的类型.但可以转换的类型是有限制的。类型可以是以下任何一个:
- 二进制,同带binary前缀的效果 : BINARY
- 字符型,可带参数 : CHAR()
- 日期 : DATE
- 时间: TIME
- 日期时间型 : DATETIME
- 浮点数 : DECIMAL
- 整数 : SIGNED
- 无符号整数 : UNSIGNED
【字符串】
-- 把字符串转成大小写. select name,UPPER(name) from string_test where name='tank'; -- 把字符串转成小写 select sex,LCASE(job) from string_test where job='DUCK'; FIND_IN_SET(str,strlist); -- FIELD(str,str1,str2,str3,…) 返回str在str1, str2, str3, …清单的索引。如果str没找到,返回0。FIELD()是ELT()反运算。 SELECT id, name, FIELD( id, name, sex, job, hobby ) -- ELT(N,str1,str2,str3,…) 如果N= 1,返回str1,如果N= 2,返回str2,等等。如果N小于1或大于参数个数,返回NULL。ELT()是FIELD()反运算。 SELECT id, name, ELT(1, id, name, sex, job, hobby ) FROM string_test where id < 4; SELECT id, name, ELT(2, id, name, sex, job, hobby ) FROM string_test where id < 4; -- 替换字符串 REPLACE(str,from_str,to_str) SELECT id,REPLACE(hobby,"firend",'living') FROM string_test WHERE id = 2; -- REPEAT(str,count) 返回由重复countTimes次的字符串str组成的一个字符串。如果count <= 0,返回一个空字符串。如果str或count是NULL,返回NULL。 SELECT id,REPEAT(name,2) FROM string_test WHERE id > 1 and id < 4; -- REVERSE(str) 返回颠倒字符顺序的字符串str。 SELECT id,reverse(name) FROM string_test WHERE id > 1 and id < 4; -- INSERT(str,pos,len,newstr) 返回字符串str,在位置pos起始的子串且len个字符长得子串由字符串newstr代替。 select id,name,INSERT(hobby,10,6,'living') from string_test where id = 2; -- SUBSTRING(str FROM pos) 从字符串str的起始位置pos返回一个子串。下面的sub2没有值,因为mysql数据库的下标是从1开始的。 SELECT id, substring( hobby, 1, 6) AS sub1, substring( hobby from 0 for 8 ) AS sub2,substring( hobby,2) AS sub3, substring( hobby from 4 ) AS sub4 FROM s tring_test WHERE id =4; -- SUBSTRING_INDEX(str,delim,count) 返回从字符串str的第count个出现的分隔符delim之后的子串。如果count是正数,返回最后的分隔符到左边(从左边数) 的所有字符。如果count是负数,返回最后的分隔符到右边的所有字符(从右边数)。 SELECT id,SUBSTRING_INDEX(hobby,',',2) as test1,SUBSTRING_INDEX(hobby,',' ,-1) as test2 FROM string_test WHERE id = 3; -- LTRIM(str); 返回删除了其前置空格字符的字符串str。 -- RTRIM(str); 返回删除了其拖后空格字符的字符串str。 -- TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str) SELECT id,LTRIM(job) FROM string_test WHERE id = 4; -- MID(str,pos,len) 从字符串str返回一个len个字符的子串,从位置pos开始。使用FROM的变种形式是ANSI SQL92语法。 -- LPAD(str,len,padstr) 返回字符串str,左面用字符串padstr填补直到str是len个字符长。 -- RPAD(str,len,padstr) 返回字符串str,右面用字符串padstr填补直到str是len个字符长。 SELECT id,RPAD(name,11," ying") FROM string_test WHERE id = 2; -- LEFT(str,len) 返回字符串str的最左面len个字符。 SELECT id,left(job,4) FROM string_test WHERE id = 4; -- RIGHT(str,len) 返回字符串str的最右面len个字符。 SELECT id,right(job,4) FROM string_test WHERE id = 4; -- 位置控制函数 /* POSITION(substr IN str) 返回子串substr在字符串str第一个出现的位置,如果substr不是在str里面,返回0. LOCATE(substr,str,pos) 返回子串substr在字符串str第一个出现的位置,从位置pos开始。如果substr不是在str里面,返回0。 INSTR(str,substr) 返回子串substr在字符串str中的第一个出现的位置。这与有2个参数形式的LOCATE()相同,除了参数被颠倒。 */ -- 得到字符串长度的函数 LENGTH(str), OCTET_LENGTH(str), CHAR_LENGTH(str), CHARACTER_LENGTH(str) -- 合并多个字符串,或者表中的多个字段 CONCAT(str1,str2,…) -- 返回来自于参数连结的字符串。如果任何参数是NULL,返回NULL。可以有超过2个的参数。一个数字参数被变换为等价的字符串形式。 SELECT id,CONCAT(name,job,hobby) FROM string_test WHERE id = 4; -- CONCAT_WS 可以在待拼接的字符串之间加入指定的分割符 SELECT CONCAT_WS(', ', FNumber,FAge, FDepartment, FSalary) FROM T_Employee -- 进制转换 /* BIN(N) 返回二进制值N的一个字符串表示,在此N是一个长整数(BIGINT)数字,这等价于CONV(N,10,2)。如果N是NULL,返回NULL。 OCT(N) 返回八进制值N的一个字符串的表示,在此N是一个长整型数字,这等价于CONV(N,10,8)。如果N是NULL,返回NULL。 HEX(N) 返回十六进制值N一个字符串的表示,在此N是一个长整型(BIGINT)数字,这等价于CONV(N,10,16)。如果N是NULL,返回NULL。 ASCII(str) 返回字符串str的最左面字符的ASCII代码值。如果str是空字符串,返回0。如果str是NULL,返回NULL。 */
【取整数的函数】
CEIL(x) 函数和CEILING(x)函数的意义相同,都用于返回大于或等于x的最小整数值,返回值转化为一个BIGINT。
使用CEIL(x)函数和CEILING(x)函数返回最小整数。SQL语句如下:
SELECT CEIL(0),CEIL(3.45),CEIL(-3.45),CEILING(3.45),CEILING(-3.45);
等于0的整数仍然为0,因此CEIL(0)的返回值为0;大于3.45的最小整数为4,因此返回值为4;-3.45是负数,大于-3.45的最小整数为-3,因此返回值为-3;
FLOOR(x) 函数用于返回小于或等于x的最大整数值。
SELECT FLOOR(0),FLOOR(3.45),FLOOR(-3.45);
等于0的整数仍然为0,因此FLOOR(0)的返回值为0;小于3.45的最大整数为3,因此返回值为3;-3.45是负数,小于-3.45的最大整数为-4,因此返回值为-4。