第八章mysql语言结构

在这里插入图片描述
MySQL语言包括四部分:
数据定义语言(DDL)、数据操纵语言(DML)、数据控制语言(DCL)(详见第三章)
以及MySQL增加的语言元素:

  • 不是SQL标准所包含的内容,是为了用户编程的方便增加的语言元素。
  • 各个DBMS都会对SQL标准进行扩充,使SQL语言功能更强大。
  • MySQL中增加的语言元素有常量、变量、运算符、函数、流程控制语句和注释等。

常量和变量

常量

常量是指在程序运行过程中值保持不变的量。在MySQL中,常量的类型由它表示的值的数据类型决定。

常量类型示例
字符串常量'hello''abc#%'"5hello! "
实数常量3.14-3.1415.3E50.3E-5
整数常量100-1000x1D(十六进制表示)
日期时间常量'2021-08-2 14:28:24:00''2021-08-2''14:28:24:00'
布尔值常量TRUE(数字值为“1”)、FALSE(数字值为“0”)
NULL值用来表示“无数据”,不同于空字符串和数字0

select 语句可以用来呈现变量和常量:

SELECT 'hello',"hello",500,true,'2023-5-4 10:18:40',null,'',0;

在这里插入图片描述

变量

变量是指在程序运行中值可以变的量,它是表达式中最基本的元素,可用于存储临时数据。
自定义变量的三个要素:变量名称、数据类型、取值
包括以下三类:

用户变量

  • 用户变量:带有前缀@,只能被定义它的用户使用,作用于当前整个连接
  • 当前连接断开后,所定义的用户变量会被全部释放。用户变量不用提前定义就可以直接使用。
  • 在使用前必须定义和初始化。如果变量没有初始化,变量的值为NULL。
set @user_variable1=expression1 [,@user_variable2= expression2 , ...];

例:

set @number=(select sno from s where sname='朱安琪');
select @number;
select * from sc where sno=@number;

局部变量

  • 局部变量:没有前缀,一般用于SQL语句块中,比如存储过程的BEGIN…END中。
  • 局部变量使用前需要先通过DECLARE声明。如没有声明,则初始值为NULL。
declare var_name [, var_name] ... type [default value];

系统变量

  • MySQL系统内部定义的变量,用于控制数据库的一些行为和方式的参数。
  • 系统变量以@@开头。
  • 系统变量包含全局变量和会话变量。
    • 全局变量由系统定义,会影响整个服务器,当MySQL服务器启动时,全局变量初始化为默认值,并且应用于每一个启动的会话。
    • 会话变量只影响个人客户端连接,在每一次建立一个新连接时,由MySQL服务器将当前所有全局变量复制一份给会话变量完成初始值。

查看全局变量的基本语法格式:

show global variables [like 'pattern'];select @@global.system_variable;

例如:

--查询包含version字样的全局变量的值。
show global variables like '%version%';

--查询指定全局变量的值。
select @@global.sort_buffer_size;

查看会话变量的基本语法格式:

show session|local variables [like 'pattern'];select @@session|local.system_variable;

例如:

--查看会话变量sql_warnings,将其值修改为相反的值后,再次查看该会话变量。
show session variables like 'sql_warnings';
set @@session.sql_warnings =1;
-- 等价于
set session sql_warnings =1;
select @@session.sql_warnings;

运算符与表达式

  • 运算符是用来连接表达式中各个操作数据的符号,用来指明对操作数据所进行的运算。
  • 运用运算符可以更加灵活地对表中的数据进行计算和查询。

运算符

算术运算符

运算符说明举例结果
+加法,返回相加后的值7 + 512
-减法,返回相减后的值7 - 52
*乘法,返回相乘后的值7 * 535
/除法,返回相除后的值7 / 51.4
div取整,返回相除后的商的整数部分7 div 51
%, mod求余,返回相除后的余数7 % 5 或 7 mod 52

比较运算符

  • 关系运算符,比较结果为真,则返回1,为假则返回0,结果不确定则返回NULL。
运算符说明举例结果
=等于7 = 50
<=>完全等于(相等或都等于空)null <=> null1
<> 或 !=不等于7 != 51
>大于7 > 51
>=大于或等于7 >= 51
<小于7 < 50
<=小于或等于7 <= 50
in在集合中5 in (5, 7)1
not in不在集合中5 not in (5, 7)0
is null为空5 is null0
is not null不为空5 is not null1
between在两者之间5 between 5 and 71
not between不在两者之间5 not between 5 and 70
like字符串匹配,包含通配符“%” 和“_”‘hello’ like ‘%e%’1
regexp 或 rlike正则表达式匹配‘a00’ regexp ‘.00’1
least返回最小值Least(5, 6, 7)5
greatest返回最大值Greatest(5, 6, 7)7

逻辑运算符

  • 逻辑运算也称为布尔运算,在MySQL中,所有逻辑表达式的结果均为true、false或null,分别显示为1、0、null。
运算符说明举例结果
not 或 !逻辑非(假变真,真变假)Not(7 = 5)1
and 或 &&逻辑与(所有为真则为真)(7 < 5) and (5 < 7)0
or 或 ||逻辑或(一真则为真)(7 < 5) or (5 < 7)1
xor逻辑异或(一真一假则为真)(7 < 5) xor (5 < 7)1

位运算符

  • 位运算在两个表达式之间执行二进制位操作,这两个表达式的类型可为整型或与整型兼容的数据类型。
运算符说明举例结果
&位and5 & 75
|位or5 | 77
^位xor5 ^ 72
~位取反~518446744073709551610
>>位右移64 >> 132
<<位左移64 << 1128

运算符的优先级

运算符优先级运算符优先级
!1|(位或)8
-(负)、~(位取反)2=、<=>、>=、>、<=、<、<>、!=、is、like、regexp、in9
^(位异或)3between10
*(乘)、/(除)、%(模)4not11
+(加)、-(减)5and12
<<、>>6or、xor、any、some13
&(位与)7=(赋值运算符)、:=14

表达式

  • 表达式就是常量、变量、列名、复杂计算、运算符和函数的组合。
  • 一个表达式通常可以得到一个值。与常量和变量一样,表达式的值具有某种数据类型,可能的数据类型有字符型、数值型、日期时间型。
  • 表达式一般用在select语句及select语句的where子句中。
--字符型表达式,例如: 
concat( 'hello','', 'tsguas')
--数值型表达式,例如: 
2+3
2*3
--日期型表达式,例如: 
'2021-01-01'+ interval 5 month

函数(暂略)

程序流程控制

  • 流程控制语句是指可以控制程序运行顺序的指令,程序运行顺序主要包括顺序执行、条件执行和循环执行。
  • MySQL支持的流程控制语句包括if语句、case语句、loop语句、leave语句(跳出整个循环)、iterate语句(跳出本次循环)、repeat语句和while语句等。
  • 流程控制语句主要用在存储过程体中。

IF语句:
IF实现条件判断,语句中可以包含多个判断条件,系统会根据条件的结果是否为TRUE执行相应的操作。

if 判断条件 then 执行语句
	[elseif 判断条件 then 执行语句]
	...
	[else 执行语句]
end if;

case语句:

--格式1
case 变量
    when1 then result1
    when2 then result2
   ...
    when 值n then resultn
    else result
end;
--格式2
CASE
    WHEN 条件1 THEN result1
    WHEN 条件2 THEN result2
    ...
    ELSE default_result
END

repeat语句:
repeat语句可以实现有条件控制的循环语句

repeat
	执行语句 
	until 停止条件
end repeat;

while语句:
while语句同样可以实现一个带条件判断的循环结构

while 循环条件(满足则循环) do
	执行语句组
end while;

Begin…end语句:
begin…end语句的用途是将多条mysql语句包含起来,形成语句集合,常用于存储过程中。

begin
      执行语句组
end;

Declare语句:
Declare语句用来声明存储过程中临时定义的局部变量、游标等。
Declare语句只能出现在begin…end语句的开头位置,且必须先于任何其它语句。

begin
  declare var_name[,var_name]type[ default value]    
  statement list
end;

Select…into语句:
Select…into语句是select语句的扩展,功能为将查询得到的结果保存在变量中。仅适用于查询结果为一行元组,查询结果为多行元组或0行元组都会出错。

select 列名1, 列名2, ...
into var_list
from 表名|视图名
where  条件表达式 ;
  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值