排序 & 过滤 & 用正则表达式索引 & 拼接字段
==============================QWQ=======================================
tips:子句的定义,由一个关键字和所提供的数据组成。例如:select 的 from
排序:
用order by检索一个或者多个语句。
可以对检索的内容进行,按升序排序数字,再升序排序字母。
为了进行降序,可以在之后添加DESC,
在排序多个列时,想降序,在列名之后加desc就行
tip:应用limit与order by 可以找到最大或者最小。
===========================qwq===========================================
过滤数据
数据库一般包含庞大的数据,一般检索只寻找自己需要的,这时候我们有where在寻找特定的想找的内容。
tips:在同时使用order by 和 where 时,让order by在where 之后。先检索再排序没问题吧。
where 子句操作符
= 等于
<> 不等于
!= 不等于
< 小于
> 大于
<= 小于等于
>= 大于等于
between 在指定的
两个值之间
如下是限制范围
如下是不匹配检查
简而言之,就是寻找除了1以外的数据 != 也可以实现类似操作。
如下是范围值检索
注意:between是检索从小的数字到大的数字范围,如果是从5到0,检索就是empty set。
其余操作自己试试吧!
where 的特殊子句 is null 空值检查。
tips:在进行匹配过滤或者不匹配过滤时,null都不会被返回,所以验证返回数据时,一定要验证被过滤掉的null
tips:在寻找字符型的时候记得加 ' '
-----------------------------------------------------------qwq----------------------------------------------------------------
数据过滤
操作符,用来联结或改变where子句中的子句的字。也称做逻辑操作符。
and 操作符
简单来说就是添加条件
用and联结的子句同时存在的情况下检索,以缩小范围,一般是对不同列进行限制,同一列限制注意范围内是否有数据。
每添加一个条件用一次and
or操作符
指匹配任意一个条件但是不同时匹配。写法同and 放在限制条件中间
tips:在没有()时先执行and操作再执行or的操作,所以在设定条件的时候注意()的使用。
养成习惯添加括号来限制顺序的习惯,可以避免默认排序的矛盾
in操作符
用()来指定应用范围,in取的合法值用 逗号分开。
此操作符与or完成相同的功能
但是,优点有
1,在使用长的合法选项清单的时候,in操作符的语法更清楚且更直观
2,在使用in时,计算的次序更容易管理(减少使用操作符)
3,in操作符一般执行比or快
4,in最大的优点是可以包含其他select语句,使得能够更动态的的建立where语句
not操作符
取反,对其之后的子句进行否定。可以对in between exists等取反
-----------------------------------------------------------qwq----------------------------------------------------------------
用通配符进行过滤
什么时通配符?
用来匹配值的一部分的特殊的字符 。
什么时搜索模式?
由字面值,通配符或者两结合构成的搜索条件
like操作符用来过滤
百分号%通配符
%表示任何字符出现任意次数
代码如下
SELECT prod_id, prod_name
FROM products
WHERE prof_name LIKE 'jet%'
表示检索以jet起头的词。
搜索是可以区分大小写的,没有限制区分大小写,就是默认不区分。
%jet%
表示搜索模式%jet%表示匹配任何位置包含文本jet的值,不论在之前还是之后出现什么字符。
tips:%不仅可以代表一个或者多个字符,%还可以表示0个字符。%代表搜索模式中给定位置的0个1个或者多个字符。
tips:%可以匹配任意东西除了无敌的null
下划线_通配符
下划线用法与%一样,但是_只能匹配单个字符。而且只能是单个字符,多个字符都不行。
显而易见,这种依次检索的功能很方便,但是相对的时间花费很大,因此要牢记以下通配符使用小技巧
1,不要过度使用通配符,其他的操作符能做到相似操作,尽量不用通配符
2,在确定使用通配符之后,除非特别有必要,不要用在搜索模式的开始处,这样搜索起来是最慢的
3,注意通配符的位置,位置不对可能找不到想要的数据
----------------------------------------------------------qwq-----------------------------------------------------------------
难点重点
正则表达式
正则表达式的作用在很多的地方都有着很棒的作用,深入的学习还需要另外的研究深入,此部分仅仅讲解基础常用的操作。
正则表达式作用是匹配文本,将一个模式(正则表达式)与一个文本串进行比较(这点与通配符匹配相似)。MySQL用where子句对正则表达式提供了初步的支持,允许指定正则表达式,过滤select检索出的数据。
基本字符匹配
由一个简单的例子入手
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000'
除关键字LIKE被REGEXP替换以外
这条语句与LIKE相似,REGEXP后跟的东西作为正则表达式。
注意:
1,符号 . 是正则表达式语言一个特殊的字符,他表示匹配任意一个字符
2,正则表达式匹配不区分大小写,但是可以用BINRY关键字限制区分大小写,
用法
SELECT prod_name
FROM products
WHERE prod_name REGEXP BINARY '1000'
进行or匹配
为搜索两个串之一(或者这个串,或者为另一个串),使用 |
如下演示
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000|2000'
匹配几个字符之一
匹配任何单一字符,如果只想匹配特定的名称,可以用一组 [和] 括起来的字符来完成来表示。
如下演示
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[123]Ton'
这里表达是匹配1或2或3,因此可能有 1 Ton , 2 Ton , 3 Ton这样的
[ 123 ] 其实是 [1|2|3] 的缩写,也可以使用后者。要用 [ ]定义or查找什么
如果是 1|2|3 Ton 这样就表达的是寻找 1 或者 2 或者 3 Ton 的串。
字符集合也可以被否定,在集合的开始处放个 ^ 符号就行了
匹配的范围
集合可以用来匹配一个或者多个字符,比如0至9可以这样写
[123456789]
为简化这种集合可以用 - 来定义范围
[1-9]
也可以用这种方式写字母范围
匹配特殊符号字符
之前我们提到了 . [] | -这些特殊字符。我们如果想匹配这些字符要在前面加 \\ 即可
\\ 也可以用来引用元字符
\\f 换行
\\n 换页
\\r 回车
\\t 制表
\\v 纵向制表
tips:如果想返回 \ 就 \\\ 套娃
匹配字符类
存在找出你自己经常使用的数字,所有字母字符或所有数字字母字符等的匹配。为方便工作,可以使用预定义的字符集,称之为字符类。
\\有字符类表,可以自行查询搜索\\
匹配多个实例
在此之前所说的匹配都是单次出现,若想多次出现就需要重复元字符,不多我就写在下面了
* 0个或者多个匹配
+ 1个或多个匹配(等同于{1,})
? 0个或1个匹配({0,1})
{n} 指定数目匹配
{n,}不少于指定数目的匹配
{n,m}匹配数目的范围(m'不超过255)
举两个实例用于解释
SELECT prod_name
FROM products
WHERE prod_name REGEXP '\\([0-9] sticks?\\)'
\\( 匹配( ,[0-9]匹配任一数字,sticks?之后的?使得s可选。也就是或sticks和stick都可行
结合之前说的匹配字符类
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[[:digit:]]{4}'
[:digit:]表示任意数字,{4}表示出现4次。
此时我们应该了解到,同一个匹配可以用不同的方式完成!!!
定位符
为了匹配特定位置的文本,需要使用到顶
^ 文本的开始
$ 文本的结尾
[[:<:]] 词的开始
[[:>:]] 词的结尾
实例,
我们想找到以 . 开头的所有产品,直接用 [ 0-9 \\. ]肯定不行,这是在文本内任意位置查找匹配。解决方式就是用 ^
写作 ^[0-9 \\.]
^匹配串的开始,意为只在 . 或任意数字开头作为一个字符时才匹配他们。
tips: ^ 的双重用法在集合中(用[]定义)来否定集合,否则,用来指串的开始处
tips:
REGEXP与LIKE 的区别在于,LIKE 匹配整个串PEGEXP匹配子串。通过使用 ^开始每个表达式,用$结束每个表达式,可以使其起同样的作用。
到此结束,去实机试试吧