sql语言(note7)
第九周(Mysql语言)
5.1 MySQL语言简介
5.2 常量和变量
5.2.1 常量
-
Unicode字符串与ASII字符串相似,但前面有N标志符,N必须为大写,例:N'hello'
-
字符串中的特殊字符
- NUL字节与NULL值不同,NUL为一个零值字节,NULL代表没有值
-
字符串常量
mysql> select 'hello','"hello"','hel''lo','\'hello'; +-------+---------+--------+--------+ | hello | "hello" | hel'lo | 'hello | +-------+---------+--------+--------+ | hello | "hello" | hel'lo | 'hello | +-------+---------+--------+--------+
-
数值常量
- 数值常量可以分为整数常量和浮点数常量
- 整数常量例:1894,+12313155,-1435433
- 浮点数常量:5.26,-1.39,101.5E5,0.5E-2
- 数值常量可以分为整数常量和浮点数常量
-
十六进制常量
- 最前面有一个大写或者小写字母“x”,例:X‘41’表示大写字母A。x‘4D7953514C’表示字符串MySQL。
mysql> select 0x41,cast(0x41 as unsigned); +------+------------------------+ | 0x41 | cast(0x41 as unsigned) | +------+------------------------+ | A | 65 | +------+------------------------+
-
日期时间常量
- 日期/时间的组合数据类型为DATETIME或TIMESTAMP,如“2014-06-17 12:30:43”
-
位字段值
- 可以使用b'value'符号写位字段值,value是一个用0和1写成的二进制值,例:b'0'显示为空白,b'1'显示为一个笑脸图标,OCT函数可以将位字段值常量显示为数值型格式
SELECT BIN(b'111101'+0),OCT(b'111101'+0); +------------------+------------------+ | BIN(b'111101'+0) | OCT(b'111101'+0) | +------------------+------------------+ | 111101 | 75 | +------------------+------------------+
-
布尔值
mysql> SELECT TRUE,FALSE; +------+-------+ | TRUE | FALSE | +------+-------+ | 1 | 0 | +------+-------+
-
NULL值
- 通常表示没有值,无数据
5.2.2 变量
-
用户变量
-
语法:SET @用户变量=expr1 [,@用户变量2= expr2 , …]
-
用户变量名可以由当前字符集的文字数字字符、“.”、“_”和“$”组成。
SET @name='王林'; SET @user1=1,@user2=2,@user3=3; SET @user4=@user3+1; SELECT @name; /*其中: (1)创建用户变量name并赋值为“王林”。 (2)创建用户变量user1并赋值为1,user2赋值为2,user3赋值为3。 (3)创建用户变量user4,它的值为user3的值加1。 (4)查询用户变量name的值。执行结果如右图所示。*/ +-------+ | @name | +-------+ | 王林 | +-------+
# 使用查询给变量赋值。 USE xscj; SET @student=(SELECT 姓名 FROM xs WHERE 学号='081101'); #查询表xs中名字等于student值的学生信息。 SELECT 学号,姓名,专业名,出生日期 FROM xs WHERE 姓名=@student; +--------+------+----------+------------+ | 学号 | 姓名 | 专业名 | 出生日期 | +--------+------+----------+------------+ | 081101 | 王林 | 计算机 | 1990-02-10 | | 081202 | 王林 | 通信工程 | 1989-01-29 | +--------+------+----------+------------+ mysql> SELECT @t2:=(@t2:=2)+5 AS t2; +----+ | t2 | +----+ | 7 | +----+
-
-
系统变量
# 获取mysql的版本 mysql> SELECT @@VERSION; +-----------+ | @@VERSION | +-----------+ | 5.5.62 | +-----------+ #获取当前系统时间 select CURRENT_TIME; +--------------+ | CURRENT_TIME | +--------------+ | 13:04:40 | +--------------+
-
语法格式:SET 系统变量名 = expr
| [GLOBAL | SESSION] 系统变量名 = expr
| @@ [global.| session.] 系统变量名 = expr
-
全局系统变量
-
当MySQL启动的时候,全局系统变量就初始化了,并且应用于每个启动的会话。如果使用GLOBAL(要求SUPER权限)来设置系统变量,则该值被记住,并被用于新的连接,直到服务器重新启动为止。
#将全局系统变量sort_buffer_size的值改为25000 SET @@global.sort_buffer_size=25000;
-
-
会话系统变量
-
只适用于当前的会话
#将当前的会话的SQL_WARNINGS变量设置为TRUE SET @@SQL_WARNINGS=NO; #对于当前会话,把系统变量SQL_SELECT_LIMIT的值设置为10 #这个变量决定了SELECT语句的结果集中的最大行数 SET @@SESSION.SQL_SELECT_LIMIT=10; SELECT @@LOCAL.SQL_SELECT_LIMIT; +--------------------------+ | @@LOCAL.SQL_SELECT_LIMIT | +--------------------------+ | 10 | +--------------------------+ #把SQL_SELECT_LIMIT的值恢复为默认值 set @@LOCAL.SQL_SELECT_LIMIT=DEFAULT; #使用SHOW VARIABLES语句可以得到系统变量清单。 #使用SHOW GLOBAL VARIABLES返回所有全局系统变量。 #使用SHOW SESSION VARIABLES返回所有会话系统变量。
-
-
5.3 运算符与表达式
5.3.1 算术运算符
-
“+” select 1.2+3.09345, 0.00000000001+0.00000000001;
-
“-” select 200-201, 0.14-0.1, -2, -23.4;
- 加减对于时间
select '2014-01-20'+INTERVAL 22 DAY; ------------------------------+ | '2014-01-20'+INTERVAL 22 DAY | +------------------------------+ | 2014-02-11 | +------------------------------+
-
“ * ” select 512,50, -11.28.2, -19530415 -19540319;
-
“ / ” select 12/2, 1.6/-0.1, 23/7, 23.00/7.00000,1/0;
-
“ % ”求余 select 12%5, -32%7,3%0;
# 在运算过程中,用字符串表示的数字可以自动地转换成字符串。当转换时,如果第一个字符的第一位是数字,那么它被转换为这个数字的值,否则,他被转换为零 select '80AA'+'1','AA80'+1,'10x'*2*'qwe'; ------------+----------+---------------+ | '80AA'+'1' | 'AA80'+1 | '10x'*2*'qwe' | +------------+----------+---------------+ | 81 | 1 | 0 | +------------+----------+---------------+
5.3.2 比较运算符
-
比较运算符
-
“ = ” select 3.14=3.142,5.12=5.120, 'a'='A','A'='B','apple'='banana';
- select 'Apple'='apple' , BINARY 'Apple'='apple';
- 关键字BINARY 作用是 区分大小写
-
" <> " select 5<>5,5<>6,'a'<>'a','5a'<>'5b';
-
"<=",">=","<"和">" select 10>10, 10>9, 10<9, 3.14>3.142;
5.3.3 逻辑运算符
- NOT 取反,真变假,假变真
- select NOT 1, NOT 0, NOT(1=1),NOT(10>9);
- AND 全真为真,一假为假
- select (1=1) AND (9>10),('a'='a') AND ('c'<'d');
- OR 一真为真
- select (1=1) OR (9>10), ('a'='b') OR (1>2);
- XOR 一真 ,而另一个为假且不是NULL,则返回值为真,否则为假
- select (1=1) XOR (2=3), (1<2) XOR (9<10);
5.3.4 位运算符
-
位运算符
-
" | " 和" & " 运算符
select 13|28,3|4,13&28,3&4; +-------+-----+-------+-----+ | 13|28 | 3|4 | 13&28 | 3&4 | +-------+-----+-------+-----+ | 29 | 7 | 12 | 0 | +-------+-----+-------+-----+ #本例中13|28表示按13和28的二进制位按位进行与(OR)操作。
-
<< 和 >>运算符,分别用于向左移动和向右移动,
select 1<<7,64>>1; +------+-------+ | 1<<7 | 64>>1 | +------+-------+ | 128 | 32 | +------+-------+ # 转化为二进制数,向左或者向右移动一位
-
" ^ "运算符 执行位异或(XOR)操作
select 1^0,12^5,123^23; +-----+------+--------+ | 1^0 | 12^5 | 123^23 | +-----+------+--------+ | 1 | 9 | 108 | +-----+------+--------+
-
" ~ "运算符,执行位取反操作,并返回64位整型结果
select ~18446744073709551614,~1; +-----------------------+----------------------+ | ~18446744073709551614 | ~1 | +-----------------------+----------------------+ | 1 | 18446744073709551614 | +-----------------------+----------------------+
5.3.5 运算符优先级
5.3.6 表达式
- 表达式还可以根据值的复杂性来分类
- 当表达式的结果只是一个值,如一个数值、一个单词或一个日期,这种表达式叫做标量表达式
- 若是表达式的结果为0个、1个或多个行表达式的集合,那么这个表达式就叫作表表达式
- 表达式按照形式还可分为单一表达式和复合表达式。单一表达式就是一个单一的值,如一个常量或列名。复合表达式是由运算符将多个单一表达式连接而成的表达式
5.4 系统内置函数
5.4.1 数学函数
-
GREATEST() 和 LEAST()函数,功能是获取一组数值中的最大值和最小值