`
piperzero
  • 浏览: 3479590 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

11级_Java_曹建波6.07 MySQL语言结构

 
阅读更多

MySQL语言结构

MySQL数据库中,SQL语言由以下几部分组成。

1)数据定义语言(DDL)。用于执行数据库的任务,对数据库及数据库中的各种对象进行创建、删除、修改等操作。如前所述,数据库对象主要包括:表、默认约束、规则、视图、触发器、存储过程等。DDL包括的主要语句及功能如表6.1所示。

2)数据操纵语言(DML)。用于操纵数据库中各种对象,检索和修改数据。DML包括的主要语句及功能如表6.2所示。

3)数据控制语言(DCL)。用于安全管理,确定哪些用户可以查看或修改数据库中的数据,DCL包括的主要语句及功能如表6.3所示。

4MySQL增加的语言元素。这部分不是SQL标准所包含的内容,而是为了用户编程的方便增加的语言元素。这些语言元素包括常量、变量、运算符、函数、流程控制语句和注解等。本章将具体讨论使用MySQL这部分增加的语言元素。

每个SQL语句都以分号结束,并且SQL处理器忽略空格、制表符和回车符。

常量和变量

常量

1. 字符串常量

字符串是指用单引号或双引号括起来的字符序列,分为ASCII字符串常量和Unicode字符串常量。

ASCII字符串常量是用单引号括起来的,由ASCII字符构成的符号串。

举例:‘hello’ ‘How are you!’

Unicode 字符串常量与ASCII字符串常量相似,但它前面有一个N标志符(N代表 SQL-92标准中的国际语言(National Language))。N前缀必须为大写。只能用单引号括起字符串。

举例:N‘hello’ N‘How are you!’

Unicode 数据中的每个字符用两个字节存储,而每个ASCII字符用一个字节存储。

在字符串中不仅可以使用普通的字符,也可使用几个转义序列,它们用来表示特殊的字符,见表 6.4。每个转义序列以一个反斜杠(“\”)开始,指出后面的字符使用转义字符来解释,而不是普通字符。注意 NUL 字节与 NULL 值不同,NUL为一个零值字节,而 NULL 代表没有值。

执行如下语句:

SELECT 'This\nIs\nFour\nLines';

结果为:

其中,“\n”表示回车。

有以下几种方式可以在字符串中包括引号:

在字符串内用单引号“'”引用的单引号“'”可以写成“''”(两个单引号)。

在字符串内用双引号“"”引用的双引号“"”可以写成“""”(两个双引号)。

可以在引号前加转义字符(“\” )。

在字符串内用双引号“"”引用的单引号“'”不需要特殊处理,不需要用双字符或转义。同样,在字符串内用单引号“'”引用的双引号“"”也不需要特殊处理。

执行下面的语句:

SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello';

结果为:

注意:语句中第4“hello”中间是两个单引号而不是一个双引号。

2. 数值常量

数值常量可以分为整数常量和浮点数常量。

整数常量即不带小数点的十进制数,例如:18942+145345234–2147483648

浮点数常量是使用小数点的数值常量,例如:5.26,-1.39101.5E50.5E-2

3. 十六进制常量

MySQL支持十六进制值。一个十六进制值通常指定为一个字符串常量,每对十六进制数字被转换为一个字符,其最前面有一个大写字母“X”或小写字“x”。在引号中只可以使用数字“0”“9”及字母“a”“f”“A”“F”。例如:X'41'表示大写字母Ax'4D7953514C'表示字符串MySQL

十六进制数值不区分大小写,其前缀“X”“x”可以被“0x”取代而且不用引号。即X'41'可以替换为0x41,注意:“0x”x一定要小写。

十六进制值的默认类型是字符串。如果想要确保该值作为数字处理,可以使用CAST...AS UNSIGNED)。

执行如下语句:

SELECT 0x41, CAST(0x41 AS UNSIGNED);

如果要将一个字符串或数字转换为十六进制格式的字符串,可以用HEX()函数。

将字符串CAT转换为16进制。

SELECT HEX('CAT');

结果为:

验证

十六进制值通常用来存储图像(如JPG)和电影(如AVI)等格式的数据。

4. 日期时间常量

日期时间常量:用单引号将表示日期时间的字符串括起来构成。日期型常量包括年、月、日,数据类型为DATE,表示为“1999-06-17”这样的值。时间型常量包括小时数、分钟数、秒数及微秒数,数据类型为TIME,表示为“12:30:43.00013”这样的值。MySQL还支持日期/时间的组合,数据类型为DATETIMETIMESTAMP,如“1999-06-17 12:30:43”DATETIMETIMESTAMP的区别在于:DATETIME的年份在10009999之间,而TIMESTAMP的年份在19702037之间,还有就是TIMESTAMP在插入带微秒的日期时间时将微秒忽略。TIMESTAMP还支持时区,即在不同时区转换为相应时间。

需要要特别注意的是,MySQL是按年--日的顺序表示日期的。中间的间隔符“-”也可以使用如“\”“@”“%”等特殊符号。

如下是时间常量的例子:

'14:30:24'

如下是日期时间常量的例子:

'2008-05-12 14:28:24:00'

日期时间常量的值必须符合日期和时间的标准,如这样的日期是错误的:'1996-02-31'

5. 位字段值

可以使用b'value'符号写位字段值。value是一个用01写成的二进制值。直接显示b'value'的值可能是一系列特殊的符号。例如,b'0'显示为空白,b'1'显示为一个笑脸图标。

使用BIN函数可以将位字段常量显示为二进制格式。使用OCT函数可以将位字段常量显示为数值型格式。

执行下列语句:

SELECT BIN(b'111101'+0), OCT(b'111101'+0);

结果为:

6. 布尔值

布尔值只包含两个可能的值:TRUEFALSEFALSE的数字值为“0”TRUE的数字值为“1”

获取TRUEFALSE的值。

SELECT TRUE, FALSE;

结果:

7. NULL

NULL值可适用于各种列类型,它通常用来表示没有值无数据等意义,并且不同于数字类型的“0”或字符串类型的空字符串。

1. 用户变量

用户可以在表达式中使用自己定义的变量,这样的变量叫做用户变量。

用户可以先在用户变量中保存值,然后在以后引用它,这样可以将值从一个语句传递到另一个语句。在使用用户变量前必须定义和初始化。如果使用没有初始化的变量,它的值为NULL

用户变量与连接有关。也就是说,一个客户端定义的变量不能被其他客户端看到或使用。当客户端退出时,该客户端连接的所有变量将自动释放。

定义和初始化一个变量可以使用SET语句,语法格式为:

SET @user_variable1expression1 [,user_variable2= expression2 , …]

其中,user_variable1user_variable2为用户变量名,变量名可以由当前字符集的文字数字字符、“.”“_”“$”组成。当变量名中需要包含了一些特殊符号(如空格、#等)时,可以使用双引号或单引号将整个变量括起来。

expression1expression2为要给变量赋的值,可以是常量、变量或表达式。

创建用户变量name并赋值为王林

SET @name='王林';

注意:@符号必须放在一个用户变量的前面,以便将它和列名区分开。王林是给变量name指定的值。name的数据类型是根据后面的赋值表达式自动分配的。也就是说,name的数据类型跟 '王林' 的数据类型是一样的,字符集和校对规则也是一样的。如果给name变量重新赋不同类型的值,则name的数据类型也会跟着改变。

还可以同时定义多个变量,中间用逗号隔开。

创建用户变量user1并赋值为1user2赋值为2user3赋值为3

SET @user1=1, @user2=2, @user3=3;

定义用户变量时变量值可以是一个表达式。

创建用户变量user4,它的值为user3的值加1

SET @user4=@user3+1;

在一个用户变量被创建后,它可以以一种特殊形式的表达式用于其他SQL语句中。变量名前面也必须加上符号@

查询例6.7中创建的变量name的值。

SELECT @name;

结果为:

使用查询给变量赋值。

USE XSCJ

SET @student=(SELECT姓名 FROM XS WHERE 学号='081101');

查询表XS中名字等于例6.11student值的学生信息。

SELECT 学号,姓名, 专业名,出生日期

FROM XS

WHERE 姓名=@student;

查询结果为:

说明:在SELECT语句中,表达式发送到客户端后才进行计算。这说明在HAVINGGROUP BYORDER BY子句中,不能使用包含SELECT列表中所设的变量的表达式。

对于SET语句,可以使用“=”“:=”作为分配符。分配给每个变量的值可以为整数、实数、字符串或NULL值。

也可以用其他SQL语句代替SET语句来为用户变量分配一个值。在这种情况下,分配符必须为“:=”,而不能用“=”,因为在非SET语句中“=”被视为比较操作符。

执行如下语句:

SELECT @t2:=(@t2:=2)+5 AS t2;

结果t2的值为7

2. 系统变量

MySQL有一些特定的设置,当MySQL数据库服务器启动的时候,这些设置被读取来决定下一步骤。例如,有些设置定义了数据如何被存储,有些设置则影响到处理速度,还有些与日期有关,这些设置就是系统变量。和用户变量一样,系统变量也是一个值和一个数据类型,但不同的是,系统变量在MySQL服务器启动时就被引入并初始化为默认值。附录G中列出了绝大多数的系统变量。

获得现在使用的MySQL版本。

SELECT @@VERSION ;

结果为:

说明:在MySQL中,系统变量VERSION的值设置为版本号。在变量名前必须加两个@符号才能正确返回该变量的值。

大多数的系统变量应用于其他SQL语句中时,必须在名称前加两个@符号,而为了与其他SQL产品保持一致,某些特定的系统变量是要省略这两个@符号的。如CURRENT_DATE(系统日期)、CURRENT_TIME(系统时间)、CURRENT_TIMESTAMP(系统日期和时间)和CURRENT_USERSQL用户的名字)。

获得系统当前时间。

SELECT CURRENT_TIME;

结果为:

MySQL中,有些系统变量的值是不可以改变的,例如VERSION和系统日期。而有些系统变量是可以通过SET语句来修改的,例如SQL_WARNINGS

语法格式为:

SET system _var_name = expr

| [GLOBAL | SESSION] system_var_name = expr

| @@ [global.| session.] system_var_name = expr

说明:system_var_name为系统变量名,expr为系统变量设定的新值。名称的前面可以添加GLOBALSESSION等关键字。

指定了GLOBAL@@global.关键字的是全局系统变量(global system variable)。指定了SESSION@@session.关键字的则为会话系统变量(local system variable)SESSION@@session.还有一个同义词LOCAL@@local.。如果在使用系统变量时不指定关键字,则默认为会话系统变量。

1)全局系统变量

MySQL启动的时候,全局系统变量就初始化了,并且应用于每个启动的会话。如果使用GLOBAL(要求SUPER权限)来设置系统变量,则该值被记住,并被用于新的连接,直到服务器重新启动为止。

将全局系统变量sort_buffer_size的值改为25000

SET @@global.sort_buffer_size=25000;

注意:如果在使用SET GLOBAL时同时使用了一个只能与SET SESSION同时使用的变量,或者如果在设置一个全局变量时未指定GLOBAL(或@@),则MySQL会产生错误。

2)会话系统变量

会话系统变量(session system variable)只适用于当前的会话。大多数会话系统变量的名字和全局系统变量的名字相同。当启动会话的时候,每个会话系统变量都和同名的全局系统变量的值相同。一个会话系统变量的值是可以改变的,但是这个新的值仅适用于正在运行的会话,不适用于所有其他会话。

将当前会话的SQL_WARNINGS变量设置为TRUE

SET @@SQL_WARNINGS =ON;

说明:这个系统变量表示如果不正确的数据通过一条INSERT语句添加到一个表中,MySQL是否应该返回一条警告。默认情况下,这个变量是关闭的,设为ON表示返回警告。

对于当前会话,把系统变量SQL_SELECT_LIMIT的值设置为10。这个变量决定了SELECT语句的结果集中的最大行数。

SET @@SESSION.SQL_SELECT_LIMIT=10;

SELECT @@LOCAL .SQL_SELECT_LIMIT;

结果为:

说明:在这个例子中,关键字SESSION放在系统变量的名字前面(SESSIONLOCAL可以通用)。这明确地表示会话系统变量SQL_SELECT_LIMITSET语句指定的值保持一致。但是,名为SQL_SELECT_LIMIT的全局系统变量的值仍然不变。同样地,改变了全局系统变量的值,同名的会话系统变量的值保持不变。

MySQL对于大多数系统变量都有默认值。当数据库服务器启动的时候,就使用这些值。也可以在CMYSQL文件夹下的my.ini选项文件中修改这些值。当数据库服务器启动的时候,这个文件被自动读取。

如果要将一个系统变量值设置为MySQL默认值,可以使用DEFAULT关键字。

SQL_SELECT_LIMIT的值恢复为默认值。

SET @@LOCAL.SQL_SELECT_LIMIT=DEFAULT;

使用SHOW VARIABLES语句可以得到系统变量清单。SHOW GLOBAL VARIABLES返回所有全局系统变量,而SHOW SESSION VARIABLES返回所有会话系统变量。如果不加关键字就默认为SHOW SESSION VARIABLES

得到系统变量清单。

SHOW VARIABLES;

要获得与样式匹配的具体的变量名称或名称清单,需使用LIKE子句,语句如下:

SHOW VARIABLES LIKE 'max_join_size';

SHOW GLOBAL VARIABLES LIKE 'max_join_size';

要得到名称与样式匹配的变量的清单,需使用通配符“%”,例如:

SHOW VARIABLES LIKE 'character%';

6.2.1 算术运算符

算术运算符在两个表达式上执行数学运算,这两个表达式可以是任何数字数据类型。算术运算符有:+(加)、-(减)、*(乘)、/(除)和%(求模)5种运算。

1“+”运算符

“+”运算符用于获得一个或多个值的和:

SELECT 1.2+3.09345, 0.00000000001+0.00000000001;

2“–”运算符

“–”运算符用于从一个值中减去另一个值,并可以更改参数符号:

SELECT 200-201, 0.14-0.1,-2, -23.4;

注意:若该操作符与BIGINT同时使用,则返回值也是一个BIGINT。这意味着在可能产生–263的整数运算中应当避免使用减号“–”,否则会出现错误。

其中,+(加)和(减)运算符还可用于对日期时间值(如DATETIME)进行算术运算。例如:

SELECT '2008-01-20'+ INTERVAL 22 DAY;

结果为:

说明:INTERVAL关键字后面跟一个时间间隔,22 DAY表示在当前的日期基础上加上22天。当前日期为2008-01-20,加上22天后为2008-02-11

3“*”运算符

“*”运算符用来获得两个或多个值的乘积:

SELECT 5*12,5*0, -11.2*8.2, -19530415*-19540319;

4“/”运算符

“/”运算符用来获得一个值除以另一个值得到的商:

SELECT 12/2, 1.6/-0.1, 23/7, 23.00/7.00000,1/0;

显然,除以零的除法是不允许的,如果这样做,MySQL会返回NULL

5“%”运算符

“%”运算符用来获得一个或多个除法运算的余数:

SELECT 12%5, -32%7,3%0;

比较运算符

比较运算符(又称关系运算符),用于比较两个表达式的值,其运算结果为逻辑值,可以为三种之一:1(真)、0(假)及 NULL(不能确定)。表6.5列出了在MySQL中可以使用的各种比较运算符。

有关比较运算已经在第4SELECT语句的WHERE子句中介绍过,这里再做一些补充。

比较运算符可以用于比较数字和字符串。数字作为浮点值比较,而字符串以不区分大小写的方式进行比较(除非使用特殊的BINARY关键字)。前面已经介绍了在运算过程中MySQL能够自动地把数字转换为字符串,而在比较运算过程中,MySQL能够自动地把字符串转换为数字。

1“=”运算符

“=”运算符用于比较表达式的两边是否相等,也可以对字符串进行比较,示例如下:

SELECT 3.14=3.142,5.12=5.120, 'a'='A','A'='B','apple'='banana';

注意:因为在默认情况下MySQL以不区分大小写的方式比较字符串,所以表达式'a'='A'的结果为真。如果想执行区分大小写的比较,可以添加BINARY关键字,这意味着对字符串以二进制方式处理。当在字符串上执行比较运算时,MySQL将区分字符串的大小写。示范如下:

SELECT 'Apple'='apple' , BINARY 'Apple'='apple';

2“<>”运算符

“=”运算符相对立的是“<>”运算符,它用来检测表达式的两边是否不相等,如果不相等则返回真值,相等则返回假值。示例如下:

SELECT 5<>5 ,5<>6,’a’<>’a’,’5a’<>’5b’;

3“<=”“>=”“<”“>”运算符

<=>=<>运算符用来比较表达式的左边是小于或等于、大于或等于、小于还是大于它的右边,示例如下:

SELECT 10>10, 10>9, 10<9, 3.14>3.142;

逻辑运算符

逻辑运算符用于对某个条件进行测试,运算结果为TRUE1)或FALSE0)。MySQL提供的逻辑运算符如表6.6所示。

1NOT运算符

逻辑运算符中最简单的NOT运算符,它对跟在它后面的逻辑测试判断取反,把真变假,假变真。例如:

SELECT NOT 1, NOT 0, NOT(1=1),NOT(10>9);

2AND运算符

AND运算符用于测试两个或更多的值(或表达式求值)的有效性,如果它的所有成分为真,并且不是NULL,它返回真值,否则返回假值。例如:

SELECT (1=1) AND (9>10),('a'='a') AND ('c'<'d');

3OR运算符

如果包含的值或表达式有一个为真并且不是NULL(不需要所有成分为真),它返回1,若全为假则返回0。例如:

SELECT (1=1) OR (9>10), ('a'='b') OR (1>2);

4XOR运算符

如果包含的值或表达式一个为真而另一个为假并且不是NULL,那么它返回真值,否则返回假值。例如:

SELECT (1=1) XOR (2=3), (1<2) XOR (9<10);

位运算符

位运算符在两个表达式之间执行二进制位操作,这两个表达式的类型可为整型或与整型兼容的数据类型(如字符型,但不能为image类型),位运算符如表6.7所示。

1“|”运算符和“&”运算符

“|”运算符用于执行一个位的或操作,而“&”用于执行一个位的与操作。例如:

SELECT 13|28, 3|4,13&28, 3&4;

说明:本例中13|8表示按138的二进制位按位进行与(OR)操作。

2<<>>运算符

<<>>运算符分别用于向左和向右移动位,例如:

SELECT 1<<7, 64>>1;

说明:本例中1的二进制为向左移动7位,最后得到的十进制数为12864的二进制位向右移动1位,最后得到的十进制数为32

3“^”运算符

“^”运算符执行位异或(XOR)操作:

SELECT 1^0,12^5,123^23;

4“~”运算符

“~”运算符执行位取反操作,并返回64位整型结果:

SELECT ~18446744073709551614, ~1;

运算符优先级

除了以上的运算符,MySQL还提供了其他一些常用的运算符,如BETWEEN运算符、IN运算符、IS NULL IS NOT NULL运算符、LIKE运算符、REGEXP运算符等,这些在第4SELECT语句中的WHERE子句中已经有过介绍,这里就不再展开讨论。下面讨论一下运算符的优先顺序。

当一个复杂的表达式有多个运算符时,运算符优先级决定执行运算的先后次序。执行的顺序会影响所得到的运算结果。运算符优先级如表6.8所示。在一个表达式中按先高(优先级数字小)后低(优先级数字大)的顺序进行运算。

表达式

前面已经涉及表达式这个概念,这里简单讨论一下。

表达式就是常量、变量、列名、复杂计算、运算符和函数的组合。一个表达式通常可以得到一个值。与常量和变量一样,表达式的值也具有某种数据类型,可能的数据类型有字符类型、数值类型、日期时间类型。这样,根据表达式的值的类型,表达式可分为字符型表达式、数值型表达式和日期表达式。

表达式还可以根据值的复杂性来分类。

当表达式的结果只是一个值,如一个数值、一个单词或一个日期,这种表达式叫做标量表达式。例如:1+2'a'>'b'

当表达式的结果是由不同类型数据组成的一行值,这种表达式叫做行表达式。例如,(学号,'王林''计算机'50*10),当学号列的值为081101时,这个行表达式的值就为:('081101''王林''计算机'500)。

当表达式的结果为0个、1个或多个行表达式的集合,那么这个表达式就叫做表表达式。

表达式按照形式还可分为单一表达式和复合表达式。单一表达式就是一个单一的值,如一个常量或列名。复合表达式是由运算符将多个单一表达式连接而成的表达式,例如:1+2+3a=b+3'2008-01-20'+ INTERVAL 2 MONTH

表达式一般用在SELECTSELECT语句的WHERE子句中。

系统内置函数

数学函数

数学函数用于执行一些比较复杂的算术操作。MySQL支持很多的数学函数。附录F中列出了比较重要的一些。若发生错误,所有的数学函数都会返回NULL。下面对一些常用的数学函数进行举例。

1GREATEST()LEAST()函数

GREATEST()LEAST()是数学函数中经常使用的函数,它们的功能是获得一组数中的最大值和最小值。例如:

SELECT GREATEST(10,9,128,1),LEAST(1,2,3);

数学函数用于执行一些比较复杂的算术操作。MySQL支持很多的数学函数。附录F中列出了比较重要的一些。若发生错误,所有的数学函数都会返回NULL。下面对一些常用的数学函数进行举例。

1GREATEST()LEAST()函数

GREATEST()LEAST()是数学函数中经常使用的函数,它们的功能是获得一组数中的最大值和最小值。例如:

SELECT GREATEST(10,9,128,1),LEAST(1,2,3);

数学函数还可以嵌套使用,例如:

SELECT GREATEST(-2,LEAST(0,3)), LEAST(1,GREATEST(1,2));

注意:MySQL不允许函数名和括号之间有空格。

2FLOOR()CEILING()函数

FLOOR()用于获得小于一个数的最大整数值,CEILING()函数用于获得大于一个数的最小整数值,例如:

SELECT FLOOR(-1.2), CEILING(-1.2), FLOOR(9.9), CEILING(9.9);

3ROUND()TRUNCATE()函数

ROUND()函数用于获得一个数的四舍五入的整数值:

SELECT ROUND(5.1),ROUND(25.501),ROUND(9.8);

TRUNCATE()函数用于把一个数字截取为一个指定小数个数的数字,逗号后面的数字表示指定小数的个数:

SELECT TRUNCATE(1.54578, 2),TRUNCATE(-76.12, 5);

4ABS()函数

ABS()函数用来获得一个数的绝对值,例如:

SELECT ABS(-878),ABS(-8.345);

5SIGN()函数

SIGN()函数返回数字的符号,返回的结果是正数(1)、负数(-1)或者零(0)

SELECT SIGN(-2),SIGN(2),SIGN(0);

6SQRT()函数

SQRT()函数返回一个数的平方根:

SELECT SQRT(25),SQRT(15),SQRT(1);

7POW()函数

POW()函数以一个数作为另外一个数的指数,并返回结果:

SELECT POW(2,2),POW(10,-2),POW(0,3);

说明:第一个数表示是22次方,第二个表示10–2次方。

8SIN()COS()TAN()函数

SIN()COS()TAN()函数返回一个角度(弧度)的正弦、余弦和正切值:

SELECT SIN(1),COS(1),TAN(RADIANS(45));

9ASIN()ACOS()ATAN()函数

ASIN()ACOS()ATAN()函数返回一个角度(弧度)的反正弦、反余弦和反正切值:

SELECT ASIN(1),ACOS(1),ATAN(DEGREES(45));

如果使用的是角度而不是弧度,可以使用DEGREES()RADIANS()函数进行转换。

10BIN()OTC()HEX()函数

BIN()OTC()HEX()函数分别返回一个数的二进制、八进制和十六进制值,这个值作为字符串返回:

SELECT BIN(2),OCT(12),HEX(80);

聚合函数

MySQL有一组函数是特意为求和或者对表中的数据进行集中概括而设计的。这一组函数就叫做聚合函数。聚合函数常常用于对一组值进行计算,然后返回单个值。通过把聚合函数(如COUNTSUM)添加到带有一个GROUP BY子句的SELECT语句块中,数据就可以聚合。聚合意味着是求一个和、平均、频次及子和,而不是单个的值。

字符串函数

因为MySQL数据库不仅包含数字数据,还包含字符串,因此MySQL有一套为字符串操作而设计的函数。在字符串函数中,包含的字符串必须要用单引号括起。附录F中列出了很多的字符串函数,下面对其中重要的一些进行介绍。

1ASCII()函数

语法格式:

ASCII (char)

返回字符表达式最左端字符的ASCII值。参数char的类型为字符型的表达式,返回值为整型。

2CHAR()函数

语法格式:

CHAR (x1,x2,x3,…)

x1x2……ASCII码转换为字符,结果组合成一个字符串。参数x1x2x3……为介于0255之间的整数,返回值为字符型。

3LEFTRIGHT函数

语法格式:

LEFT | RIGHT ( str ,x )

分别返回从字符串str左边和右边开始指定x个字符。

4TRIMLTRIMRTRIM函数

语法格式:

TRIM | LTRIM | RTRIM(str)

使用LTRIMRTRIM分别删除字符串中前面的空格和尾部的空格,返回值为字符串。参数str为字符型表达式,返回值类型为varchar

TRIM删除字符串首部和尾部的所有空格。

5RPADLPAD函数

语法格式:

RPAD | LPAD( str, n, pad)

使用RPADLPAD分别用字符串pad对字符串str的右边和左边进行填补直至str中字符数目达到n个,最后返回填补后的字符串。若str中的字符个数大于n,则返回str的前n个字符。

6REPLACE函数

语法格式:

REPLACE (str1 , str2 , str3 )

REPLACE函数用于用字符串str3替换str1中所有出现的字符串str2。最后返回替换后的字符串。

7CONCAT函数

语法格式:

CONCAT(s1,s2,…sn)

CONCAT函数用于连接指定的几个字符串

8SUBSTRING函数

语法格式:

SUBSTRING (expression , Start, Length )

返回expression中指定的部分数据。参数expression可为字符串、二进制串、textimage字段或表达式。StartLength均为整型,前者指定子串的开始位置,后者指定子串的长度(要返回字节数)。如果 expression 是字符类型和二进制类型,则返回值类型与expression的类型相同。如果为text类型,返回的是varchar类型。

9STRCMP函数

语法格式:

STRCMP(s1,s2)

STRCMP函数用于比较两个字符串,相等返回0s1大于s2返回1s1小于s2返回-1

日期和时间函数

MySQL有很多日期和时间数据类型,所以有相当多的操作日期和时间的函数。附录F中列出了大多数的日期和时间函数。下面介绍几个比较重要的函数。

1NOW()

使用NOW()函数可以获得当前的日期和时间,它以YYYY-MM-DD HHMMSS的格式返回当前的日期和时间:

SELECT NOW();

2CURTIME()CURDATE()

CURTIME()CURDATE()函数比NOW更为具体化,它们分别返回的是当前的时间和日期,没有参数:

SELECT CURTIME(),CURDATE();

3YEAR()

YEAR()函数分析一个日期值并返回其中关于年的部分:

SELECT YEAR(20080512142800),YEAR('1982-11-02');

4MOTNTH()MONTHNAME()

MOTNTH()MONTHNAME()函数分别以数值和字符串的格式返回月的部分:

SELECT MONTH(20080512142800), MONTHNAME('1982-11-02');

5DAYOFYEAR()DAYOFWEEK()DAYOFMONTH()

DAYOFYEAR()DAYOFWEEK()DAYOFMONTH()函数分别返回这一天在一年、一星期及一个月中的序数:

SELECT DAYOFYEAR(20080512),DAYOFMONTH('2008-05-12');

6DAYNAME()

MONTHNAME()相似,DAYNAME()以字符串形式返回星期名:

SELECT DAYNAME('2008-06-01');

7WEEK()YEARWEEK()

WEEK()函数返回指定的日期是一年的第几个星期,而YEARWEEK()函数返回指定的日期是哪一年的哪一个星期:

SELECT WEEK('2008-05-01'),YEARWEEK(20080501);

8HOUR()MINUTE()SECOND()

HOUR()MINUTE()SECOND()函数分别返回时间值的小时、分钟和秒的部分:

SELECT HOUR(155300),MINUTE('15:53:00'),SECOND(143415);

9DATE_ADD()DATE_SUB()

DATE_ADD()DATE_SUB()函数可以对日期和时间进行算术操作,它们分别用来增加和减少日期值,其使用的关键字如表6.9所示。

DATE_ADD()DATE_SUB()函数的语法格式为:

DATE_ADD | DATE_SUB(date, INTERVAL int keyword)

date是需要的日期和时间,INTERVAL关键字表示一个时间间隔。int表示需要计算的时间值,keyword已经在表6.9中列出。DATE_ADD函数是计算date加上间隔时间后的值,DATE_SUB则是计算date减去时间间隔后的值。

加密函数

MySQL特意设计了一些函数对数据进行加密。这里简单介绍如下几个函数。

1AES_ENCRYPTAES_DECRYPT函数

语法格式为:

AES_ENCRYPT | AES_DECRYPT(str,key)

AES_ENCRYPT函数返回的是密钥key对字符串str利用高级加密标准(AES)算法加密后的结果,结果是一个二进制的字符串,以BLOB类型存储。而AES_DECRYPT函数用于对用高级加密方法加密的数据进行解密。若检测到无效数据或不正确的填充,函数会返回NULLAES_ENCRYPTAES_DECRYPT函数可以被看做MySQL中普遍使用的最安全的加密函数。

2ENCODEDECODE函数

语法格式为:

ENCODE | DECODE(str,key)

ENCODE函数用来对一个字符串str进行加密,返回的结果是一个二进制字符串,以BLOB类型存储。DECODE函数使用正确的密钥对加密后的值进行解密。与上面的AES_ENCRYPTAES_DECRYPT函数相比,这两个函数加密程度相对较弱。

3ENCRYPT函数

使用UNIX crypt()系统加密字符串,ENCRYPT(strsalt)函数接收要加密的字符串和用于加密过程的salt(一个可以确定唯一口令的字符串)。在Windows上不可用。

4PASSWORD函数

格式为:

PASSWORD(str)

返回字符串str加密后的密码字符串,适合于插入到MySQL的安全系统。该加密过程不可逆,和UNIX密码加密过程使用不同的算法。主要用于MySQL的认证系统。

控制流函数

MySQL有几个函数是用来进行条件操作的。这些函数可以实现SQL的条件逻辑,允许开发者将一些应用程序业务逻辑转换到数据库后台。

1IFNULLNULLIF函数

IFNULL函数的语法格式为:

IFNULL(expr1,expr2)

此函数的作用是:判断参数expr1是否为NULL,当参数expr1NULL时返回expr2,不为NULL时返回expr1IFNULL的返回值是数字或字符串。

NULLIF函数的语法格式为:

NULLIF(expr1,expr2)

NULLIF函数用于检验提供的两个参数是否相等,如果相等,则返回NULL,如果不相等就返回第一个参数。

2IF函数

和许多脚本语言提供的IF()函数一样,MySQLIF()函数也可以建立一个简单的条件测试。

语法格式如下:

IF(expr1,expr2,expr3)

这个函数有3个参数,第一个是要被判断的表达式,如果表达式为真,IF()将会返回第二个参数;如果为假,IF()将会返回第三个参数。

格式化函数

MySQL还有一些函数是特意为格式化数据设计的。

1FORMAT()函数

语法格式为:

FORMAT(x, y)

FORMAT()函数把数值格式化为以逗号间隔的数字序列。FORMAT()的第一个参数x是被格式化的数据,第二个参数y是结果的小数位数。

2DATE_FORMAT()TIME_FORMAT()函数

DATE_FORMAT()TIME_FORMAT()函数可以用来格式化日期和时间值。

语法格式如下:

DATE_FORMAT/ TIME_FORMAT(date | time, fmt)

其中,datetime是需要格式化的日期和时间值,fmt是日期和时间值格式化的形式,表6.10列出了MySQL中的日期/时间格式化代码。

3INET_NTOA()INET_ATON()函数

MySQL中的INET_NTOA()INET_ATON()函数可以分别把IP地址转换为数字或者进行相反的操作。

类型转换函数

MySQL提供CAST()函数进行数据类型转换,它可以把一个值转换为指定的数据类型。

语法格式:

CAST(expr, AS type)

exprCAST函数要转换的值,type是转换后的数据类型。

CAST函数中MySQL支持这几种数据类型:BINARYCHARDATETIMEDATETIMESIGNEDUNSIGNED

通常情况下,当使用数值操作时,字符串会自动地转换为数字。字符串可以指定为BINARY类型,这样它们的比较操作就成为大小写敏感的。使用CAST()函数指定一个字符串为BINARY和字符串前面使用BINARY关键词具有相同的作用。

系统信息函数

MySQL还具有一些特殊的函数用来获得系统本身的信息,表6.11列出了大部分信息函数。

1DATABASE()USER()VERSION()函数可以分别返回当前所选数据库、当前用户和MySQL版本信息:

SELECT DATABASE(),USER(), VERSION();

2BENCHMARK()函数用于重复执行n次表达式expr。它可以被用于计算MySQL处理表达式的速度。结果值通常为零。另一种用处来自 MySQL客户端内部,能够报告问询执行的次数,根据经过的时间值可以推断服务器的性能。例如:

SELECT BENCHMARK(10000000, ENCODE('hello','goodbye'));

3FOUND_ROWS()函数用于返回最后一个SELECT语句返回的记录行的数目。如最后执行的SELECT语句是:

SELECT * FROM XS;

之后执行如下语句:

SELECT FOUND_ROWS();

说明:SELECT语句可能包括一个LIMIT子句,用来限制服务器返回客户端的行数。在有些情况下,需要不用再次运行该语句而得知在没有LIMIT时到底该语句返回了多少行。为了知道这个行数,包括在SELECT 语句中选择SQL_CALC_FOUND_ROWS,随后调用FOUND_ROWS()

SELECT SQL_CALC_FOUND_ROWS * FROM XS WHERE性别=1 LIMIT 5;

之后可以使用FOUND_ROWS()函数,显示在没有LIMIT子句的情况下SELECT语句所返回的行数。

分享到:
评论

相关推荐

    【图像压缩】 GUI矩阵的奇异值分解SVD灰色图像压缩【含Matlab源码 4359期】.zip

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描视频QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    node-v0.9.2-x86.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    【尺寸检测】机器视觉图像目标尺寸测量【含Matlab源码 4087期】.zip

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描视频QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    【图像加密】双随机相位图像加密解密【含Matlab源码 4118期】.zip

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描视频QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    金融支付:浅析如何用定期资产设计活期产品.docx

    金融支付:浅析如何用定期资产设计活期产品.docx

    Excel模板个人简历文艺清新单页06.docx

    Excel模板个人简历文艺清新单页06.docx

    【图像重建】 POCS算法超分辨率图像重建(含PSNR)【含Matlab源码 4404期】.zip

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描视频QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    吹瓶转线清线(清场)记录表.xls

    吹瓶转线清线(清场)记录表.xls

    odis14.1安装包(专检5054B专用含驱动)

    支持win10,win11(21H2及以前版本)系统

    Modbus Slave version 9.3.2 Build 2156

    Modbus Slave version 9.3.2 Build 2156, modbus 协议从机,非常好用,包括32位与64位

    Excel模板个人简历稳重大气单页03.docx

    Excel模板个人简历稳重大气单页03.docx

    11记录控制程序.doc

    11记录控制程序.doc

    【图像边缘检测】自适应阈值的八方向和四方向sobel图像边缘检测【含Matlab源码 2058期】.zip

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描视频QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    第一步安装.zip

    第一步安装.zip

    node-v0.9.0-x64.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    【图像融合】红外与可见光图像融合与配准【含Matlab源码 4214期】.zip

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描视频QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    【图像去噪】 GUI中值+均值+维纳+小波滤波图像去噪(含PSNR)【含Matlab源码 753期】.zip

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描视频QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    C风险心理承受能力测试20210603.docx

    C风险心理承受能力测试20210603.docx

    HPLC实验报告.docx

    HPLC实验报告.docx

    Screenshot_20240517_181056.jpg

    Screenshot_20240517_181056.jpg

Global site tag (gtag.js) - Google Analytics