MySQL 数据库——高阶语句(中)

x33g5p2x  于2021-10-28 转载在 Mysql  
字(5.3k)|赞(0)|评价(0)|浏览(312)

一、正则表达式

  • MySQL 正则表达式通常是在检索数据库记录的时候,根据指定的匹配模式匹配记录中符合要求的特殊字符串
  • MySQL 的正则表达式使用 REGEXP 这个关键字来指定正则表达 式的匹配模式,REGEXP 操作符所支持的匹配模式如表所示
    regexp
匹配描述
^匹配文本的开始字符
$匹配文本的结束字符
.匹配任何单个字符
/*匹配零个或多个在它前面的字符
+匹配前面的字符1次或多次
字符串匹配包含指定的字符串
p1 |p2匹配p1或p2
[…]匹配字符集合中的任意一个字符
[^…]匹配不在括号中的任何字符
{n}匹配前面的字符串n次
{n,m}匹配前面的字符串至少n次,最多m次
#查询以h开头的学生信息
mysql> select id,name from xjj where name regexp '^h';
+----+-----------+
| id | name      |
+----+-----------+
|  6 | hanmeimei |
+----+-----------+
1 row in set (0.00 sec)

#查询以i结尾的学生信息
mysql> select id,name from xjj where name regexp 'i$';
+----+-----------+
| id | name      |
+----+-----------+
|  1 | liuyi     |
|  3 | lisi      |
|  4 | tianqi    |
|  6 | hanmeimei |
|  7 | lilei     |
|  8 | caicai    |
+----+-----------+
6 rows in set (0.00 sec)

#查询名字中包含ng的学生信息
mysql> select id,name from xjj where name regexp 'ng';
+----+--------+
| id | name   |
+----+--------+
|  2 | wangwu |
+----+--------+
1 row in set (0.00 sec)

#查询名字是tian开头,i结尾,中间不知道是一个什么字符的学生信息
mysql> select id,name from xjj where name regexp 'tian.i';
+----+--------+
| id | name   |
+----+--------+
|  4 | tianqi |
+----+--------+
1 row in set (0.00 sec)

#查询名字中包含ha或者wu的学生信息
mysql> select id,name from xjj where name regexp 'ha|wu';
+----+-----------+
| id | name      |
+----+-----------+
|  2 | wangwu    |
|  6 | hanmeimei |
+----+-----------+
2 rows in set (0.00 sec)

#查询名字中有an,g可有可无的学生信息
必须要有的部分是'an' 而'g'可有可无
mysql> select id,name from xjj where name regexp 'ang*';
+----+-----------+
| id | name      |
+----+-----------+
|  2 | wangwu    |
|  4 | tianqi    |
|  6 | hanmeimei |
+----+-----------+
3 rows in set (0.00 sec)

#查询名字中含有an,g至少出现一次的学生信息
mysql> select id,name from xjj where name regexp 'ang+';
+----+--------+
| id | name   |
+----+--------+
|  2 | wangwu |
+----+--------+
1 row in set (0.00 sec)

#查询名字以d-x开头的学生信息
mysql> select id,name from xjj where name regexp '^[d-x]';
+----+-----------+
| id | name      |
+----+-----------+
|  1 | liuyi     |
|  2 | wangwu    |
|  3 | lisi      |
|  4 | tianqi    |
|  5 | jiaoshou  |
|  6 | hanmeimei |
|  7 | lilei     |
+----+-----------+
7 rows in set (0.00 sec)

#查询名字不是lilei的学生信息
mysql> select id,name from xjj where name regexp '[^lilei]';
+----+-----------+
| id | name      |
+----+-----------+
|  1 | liuyi     |
|  2 | wangwu    |
|  3 | lisi      |
|  4 | tianqi    |
|  5 | jiaoshou  |
|  6 | hanmeimei |
|  8 | caicai    |
+----+-----------+
7 rows in set (0.00 sec)

#查询学生名字不以lhgw各字母开头的学生信息
mysql> select id,name from xjj where name regexp '^[^lhgw]';
+----+----------+
| id | name     |
+----+----------+
|  4 | tianqi   |
|  5 | jiaoshou |
|  8 | caicai   |
+----+----------+
3 rows in set (0.00 sec)

二、运算符

MySQL 的运算符用于对记录中的字段值进行运算

MySQL 的运算符共有四种,分别是:算术运算符、比较运算符、逻辑运算符和位运算符

1.算术运算符

+加法
减法
/*乘法
/除法
%取余

2.比较运算符

比较运算符是查询数据记录时经常使用的一类运算符

通过使用比较运算符可以判断出 表中有哪些记录是符合条件的,如果比较的结果(以布尔值的方式进行返回判断)为真则返回 1,如果为假则返回 0,比较的结果如果不确定则返回NULL

其中字符串在进行比较的时候默认是不区分大小写的,如果要区分大小写可以通过binary关键字来实现

=等于
>大于
<小于
>=大于等于
<=小于等于
!=或<>不等于
is null判断一个值是否为 NULL
is not null判断一个值是否不为 NULL
between and两者之间
in在集合中
like通配符匹配
greatest两个或多个参数时返回最大值
least两个或多个参数时返回最小值
regexp正则表达式
  • 与linux返回值表达相反,linux 中运行正常返回值是0,运行异常返回值是非0
    条件成立就为1,不成立就为0

3.逻辑运算

①逻辑非(not):有0返回1,没0返回0,有null返回null

②逻辑与(and):有0返回0,没0返回1,有null返回null

③逻辑或(or): 前后都是0返回0,否则为1,前后有一个null为1,前后都是null(和0 or null)返回null

④逻辑异或(xor):前后相同为0,前后不同为1,有null返回null

not 或 !逻辑非
and 或 &&逻辑与
or逻辑或
xor逻辑异或
mysql> select 3<2;
+-----+
| 3<2 |
+-----+
|   0 |
+-----+
1 row in set (0.00 sec)

mysql> select 3!=4;
+------+
| 3!=4 |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

mysql> select 5 between 2 and 6,'c' between 'a' and 'b';
+-------------------+-------------------------+
| 5 between 2 and 6 | 'c' between 'a' and 'b' |
+-------------------+-------------------------+
|                 1 |                       0 |
+-------------------+-------------------------+
1 row in set (0.00 sec)

mysql> select 5 in (1,2,3);
+--------------+
| 5 in (1,2,3) |
+--------------+
|            0 |
+--------------+
1 row in set (0.00 sec)

mysql> select least(3,5,8),greatest(3,4,5);
+--------------+-----------------+
| least(3,5,8) | greatest(3,4,5) |
+--------------+-----------------+
|            3 |               5 |
+--------------+-----------------+
1 row in set (0.00 sec)

4.位运算符

①按位与( & ):1 1 得 1,否则为0

②按位或( | ):有1 得1,否则为0

③按位异或( ^ ): 不同得1,否则为0

④按位取反( ~ ):取反计算,1 1得1,否则为0

&按位与
|按位或
~按位取反
^按位异或
<<按位左移
>>按位右移
  • 先转换为二进制,再运算
  • 在使用过程中都有优先级问题。运算符的优先级决定了不同的运 算符在计算过程中的先后顺序。级别高的运算符会先进行计算,如果运算符的级别相同, MySQL 会按照顺序从左到右依次进行计算,优先级如下表所示:
1
2~
3^
4*、、%
5+,-
6>>,<<
7&
8|
9=,<=>,>=,>,<=,<,<>,!=,IS,LIKE,REGEXP,IN
10BETWEEN,CASE,WHEN,THEN,ELSE
11NOT
12&&,AND
13,OR,XOR
14:=
mysql> select 3 and 4,0 && null;null and null;
+---------+-----------+
| 3 and 4 | 0 && null |
+---------+-----------+
|       1 |         0 |
+---------+-----------+
1 row in set (0.00 sec)

mysql> select 2 and 3,4 && 0,4 && null,0 and null,null and null;
+---------+--------+-----------+------------+---------------+
| 2 and 3 | 4 && 0 | 4 && null | 0 and null | null and null |
+---------+--------+-----------+------------+---------------+
|       1 |      0 |      NULL |          0 |          NULL |
+---------+--------+-----------+------------+---------------+

mysql> select 2 or 3,2 or 0,null or null,0 or 0,0 or null;
+--------+--------+--------------+--------+-----------+
| 2 or 3 | 2 or 0 | null or null | 0 or 0 | 0 or null |
+--------+--------+--------------+--------+-----------+
|      1 |      1 |         NULL |      0 |      NULL |
+--------+--------+--------------+--------+-----------+
1 row in set (0.00 sec)

mysql> select 0 or null or 2;
+----------------+
| 0 or null or 2 |
+----------------+
|              1 |
+----------------+
1 row in set (0.00 sec)

mysql> select 2 xor 3,1 xor 0,null xor null,0 xor null;
+---------+---------+---------------+------------+
| 2 xor 3 | 1 xor 0 | null xor null | 0 xor null |
+---------+---------+---------------+------------+
|       0 |       1 |          NULL |       NULL |
+---------+---------+---------------+------------+
1 row in set (0.00 sec)

总结

1.逻辑运算

①逻辑非(not):有0返回1,没0返回0,有null返回null

②逻辑与(and):有0返回0,没0返回1,有null返回null

③逻辑或(or): 前后都是0返回0,否则为1,前后有一个null为1,前后都是null(和0 or null)返回null

④逻辑异或(xor):前后相同为0,前后不同为1,有null返回null

2.位运算符

①按位与( & ):1 1 得 1,否则为0

②按位或( | ):有1 得1,否则为0

③按位异或( ^ ): 不同得1,否则为0

④按位取反( ~ ):取反计算,1 1得1,否则为0

3.比较运算符

条件成立就为1,不成立就为0

相关文章

微信公众号

最新文章

更多