字符串
在SQL中,自然也存在字符串这种元素。一般来说,SQL使用单引号**’ ‘**来标识这是一个字符串,同时在SQL标准中,数据库对于字符串大小写应该是一个敏感的状态。但是,很多数据库系统中,包括但不限于MySQL和SQL Server中,对于这些个标准都是存在一些选择的。例如在MySQL中,其对于字符串的大小写就是不敏感的,当然,你可以在MySQL中去使用对于的标准设置语句去进行调整。不过种种这些,都是一些小玩意,在使用具体的数据库时去进行适当的调整即可,没必要去进行一个个的深入了解。
函数使用
SQL允许在字符串上使用多种函数。包括但不限于连接字符串(“||”),提取子串,计算字符串长度,大小写转换等函数。但是这些都只是一些实例的使用,具体的参考自己的数据库系统使用就行,不行就去问ai。
对于字符串函数,使用起来其实跟普通语言的函数之间很相似,都存在着一定的输入参数,并默认这些字符串函数都返回一个字符串提供后续的操作。例如上图中的SUBSTRING和UPPER函数。
可以注意到的是,这些函数在上图那个示例中都出现了不同的使用语句位置。不难想象,还可以存在多种使用位置。换句话说,字符串函数的使用位置与语句之间是弱耦合的,但是与它使用的数据类型是强耦合的,基本上必须存在着为字符的参数。所以理论上,所有可以出现字符串的地方,系列字符函数都能被使用。
模式匹配
在之前的几个文档中,我们其实不难看到有着like关键字的出现,这里对于这个关键字进行进一步的分析。
like关键字是用来实现模式匹配的,通过like关键字,我们能够实现对于所需要的字符串的一定程度上的一些限制。
正如上图中所说,’%’能够匹配任何子串(不限长度和内容,包括空串),’_’只能够匹配任意一个字符,通过对于这俩个字符的排列组合,我们能够实现很大程度上的对于匹配字符串的限制。
这里需要特别注意一下like关键字的使用环境。理论上说like可以出现在任意一个子句中,毕竟它并只是与字符串绑定,可以粗略理解为like就像其他字符串函数一样,输入一个字符串并返回一个字符串以供后续的系列操作。但是在实际中,like的使用位置一般是位于where子句中的,毕竟相对来说,这个位置上的like具有更强的逻辑抽象。
输出
重定向
在DBMS中,还存在着一系列的方法能够进行一些输出的重定向,就比如将输出重定向到一个新表中去生成一个新表。
上图中的demo其实就已经简单的列出了这个重定向的一些特性。
一个重定向需要使用一些输出作为输入,比如,这里的使用了select语句中的输出作为一个输入,并将这个作为输入去作为后续的INTO的输入。
一个重定向的输入存在几个特点。重定向的表必须没有被彻底的限定,必须允许能够被插入新的属性并能够被插入新的元组。在重定向后,这个输入将被插入重定向的表中。上图中其实就是将一个属性重定向到新表中的demo。接下来看一个插入新元组的方法。
额外需要注意的是,当我们重定向的输入是一系列元组时,我们这些输入元组必须与目标表的元组组成的一致,这个也能够理解。毕竟如果你的插入元组与目标元组组成不一致,那么这就违背了数据库对于数据组织的底层逻辑,这是我们所不想看到的。
输出排序
在实际应用中,很多时候我们需要将输出的数据按照一定的次序进行排列,这个排列的时机有很多,这里考虑的是DBMS输出表数据的时候。这时候我们可以通过一个新的order by子句来进行一定程度上的排序。
很多元素都可以使用order by进行升序和降序的排序。包括但不限于整形,浮点型和部分的字符型等(字典序排序)。
在缺省情况下,order by子句是使用升序排序的。要说明order by子句中的排列顺序,可以使用des表示降序,或者使用asc使用升序。同时,在上面那个demo中没有体现的是,一个order by子句中可以存在多个用于排序的元素。
1 | select * |
该demo中的查询语句的含义是:从instruct表中去输出所有的元组并对于这些元组按照salary降序排列,按照name升序排列。
在一些个order by子句中,我们可以看到一些数字,这些数字其实是一种别名,对应的则是在select子句中出现的第i个元素。
注意事项
- 对于order by的排序,如果此间存在着多个用来排序的元素,那么在这之中存在着一定的排列顺序,就比如上面那个demo,先按照salary属性进行降序排序,再按照name进行升序排列,也就是说,order by子句是按照该子句中属性出现的次序来进行排序的。
- 对于排序的结果,还是存在那个特殊值(NULL)可能导致的问题。在一般的DBMS中,NULL值一般都被视为一个最小值,但是这个不好说,具体参考各个DBMS的使用手册。
控制
数据库系统还支持对于输出的一些数量和位置上的一些控制,具体是通过order by子句来实现的。相对来说跟之前的子句使用很相似,简单过一遍即可。
对于这个输出控制关键字,主要存在着俩个功能,第一个是对于输出的数量上面的限制,这个通过在limit之后再加上对应的数字就能够实现对于输出元组数的控制了。
额外的,我们还可以在limit子句中去添加另外一个关键字offset来进行输出元组的偏移。通过在这个关键字之后添加上对应的数字,我们能够限定接下来的输出的其实元组位置。
demo
限制返回的记录数:
1
2SELECT * FROM employees
LIMIT 5;这个查询会返回
employees
表中的前 5 行数据。与
OFFSET
配合使用,进行分页:1
2SELECT * FROM employees
LIMIT 5 OFFSET 10;这个查询会跳过前 10 行,返回从第 11 行开始的 5 行记录。
OFFSET
表示跳过多少行数据。限制查询结果,并按特定顺序返回:
1
2
3SELECT * FROM employees
ORDER BY hire_date DESC
LIMIT 3;这个查询会返回
employees
表中按hire_date
降序排列的前 3 行记录。
需要注意的是,在一些数据库系统中,这个limit关键字被替换为了一些新的关键字,具体参照对应的使用手册即可。