【MySQL】基础知识

【查询表】

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。

 

转载于:https://www.cnblogs.com/yangyxd/articles/8335829.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值