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

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

一、正则表达式

  • MySQL 正则表达式通常是在检索数据库记录的时候,根据指定的匹配模式匹配记录中符合要求的特殊字符串
  • MySQL 的正则表达式使用 REGEXP 这个关键字来指定正则表达 式的匹配模式,REGEXP 操作符所支持的匹配模式如表所示
    regexp
匹配描述
^匹配文本的开始字符
$匹配文本的结束字符
.匹配任何单个字符
/*匹配零个或多个在它前面的字符
+匹配前面的字符1次或多次
字符串匹配包含指定的字符串
p1 |p2匹配p1或p2
[…]匹配字符集合中的任意一个字符
[^…]匹配不在括号中的任何字符
{n}匹配前面的字符串n次
{n,m}匹配前面的字符串至少n次,最多m次
  1. #查询以h开头的学生信息
  2. mysql> select id,name from xjj where name regexp '^h';
  3. +----+-----------+
  4. | id | name |
  5. +----+-----------+
  6. | 6 | hanmeimei |
  7. +----+-----------+
  8. 1 row in set (0.00 sec)
  9. #查询以i结尾的学生信息
  10. mysql> select id,name from xjj where name regexp 'i$';
  11. +----+-----------+
  12. | id | name |
  13. +----+-----------+
  14. | 1 | liuyi |
  15. | 3 | lisi |
  16. | 4 | tianqi |
  17. | 6 | hanmeimei |
  18. | 7 | lilei |
  19. | 8 | caicai |
  20. +----+-----------+
  21. 6 rows in set (0.00 sec)
  22. #查询名字中包含ng的学生信息
  23. mysql> select id,name from xjj where name regexp 'ng';
  24. +----+--------+
  25. | id | name |
  26. +----+--------+
  27. | 2 | wangwu |
  28. +----+--------+
  29. 1 row in set (0.00 sec)
  30. #查询名字是tian开头,i结尾,中间不知道是一个什么字符的学生信息
  31. mysql> select id,name from xjj where name regexp 'tian.i';
  32. +----+--------+
  33. | id | name |
  34. +----+--------+
  35. | 4 | tianqi |
  36. +----+--------+
  37. 1 row in set (0.00 sec)
  38. #查询名字中包含ha或者wu的学生信息
  39. mysql> select id,name from xjj where name regexp 'ha|wu';
  40. +----+-----------+
  41. | id | name |
  42. +----+-----------+
  43. | 2 | wangwu |
  44. | 6 | hanmeimei |
  45. +----+-----------+
  46. 2 rows in set (0.00 sec)
  47. #查询名字中有an,g可有可无的学生信息
  48. 必须要有的部分是'an' 'g'可有可无
  49. mysql> select id,name from xjj where name regexp 'ang*';
  50. +----+-----------+
  51. | id | name |
  52. +----+-----------+
  53. | 2 | wangwu |
  54. | 4 | tianqi |
  55. | 6 | hanmeimei |
  56. +----+-----------+
  57. 3 rows in set (0.00 sec)
  58. #查询名字中含有an,g至少出现一次的学生信息
  59. mysql> select id,name from xjj where name regexp 'ang+';
  60. +----+--------+
  61. | id | name |
  62. +----+--------+
  63. | 2 | wangwu |
  64. +----+--------+
  65. 1 row in set (0.00 sec)
  66. #查询名字以d-x开头的学生信息
  67. mysql> select id,name from xjj where name regexp '^[d-x]';
  68. +----+-----------+
  69. | id | name |
  70. +----+-----------+
  71. | 1 | liuyi |
  72. | 2 | wangwu |
  73. | 3 | lisi |
  74. | 4 | tianqi |
  75. | 5 | jiaoshou |
  76. | 6 | hanmeimei |
  77. | 7 | lilei |
  78. +----+-----------+
  79. 7 rows in set (0.00 sec)
  80. #查询名字不是lilei的学生信息
  81. mysql> select id,name from xjj where name regexp '[^lilei]';
  82. +----+-----------+
  83. | id | name |
  84. +----+-----------+
  85. | 1 | liuyi |
  86. | 2 | wangwu |
  87. | 3 | lisi |
  88. | 4 | tianqi |
  89. | 5 | jiaoshou |
  90. | 6 | hanmeimei |
  91. | 8 | caicai |
  92. +----+-----------+
  93. 7 rows in set (0.00 sec)
  94. #查询学生名字不以lhgw各字母开头的学生信息
  95. mysql> select id,name from xjj where name regexp '^[^lhgw]';
  96. +----+----------+
  97. | id | name |
  98. +----+----------+
  99. | 4 | tianqi |
  100. | 5 | jiaoshou |
  101. | 8 | caicai |
  102. +----+----------+
  103. 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逻辑异或
  1. mysql> select 3<2;
  2. +-----+
  3. | 3<2 |
  4. +-----+
  5. | 0 |
  6. +-----+
  7. 1 row in set (0.00 sec)
  8. mysql> select 3!=4;
  9. +------+
  10. | 3!=4 |
  11. +------+
  12. | 1 |
  13. +------+
  14. 1 row in set (0.00 sec)
  15. mysql> select 5 between 2 and 6,'c' between 'a' and 'b';
  16. +-------------------+-------------------------+
  17. | 5 between 2 and 6 | 'c' between 'a' and 'b' |
  18. +-------------------+-------------------------+
  19. | 1 | 0 |
  20. +-------------------+-------------------------+
  21. 1 row in set (0.00 sec)
  22. mysql> select 5 in (1,2,3);
  23. +--------------+
  24. | 5 in (1,2,3) |
  25. +--------------+
  26. | 0 |
  27. +--------------+
  28. 1 row in set (0.00 sec)
  29. mysql> select least(3,5,8),greatest(3,4,5);
  30. +--------------+-----------------+
  31. | least(3,5,8) | greatest(3,4,5) |
  32. +--------------+-----------------+
  33. | 3 | 5 |
  34. +--------------+-----------------+
  35. 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:=
  1. mysql> select 3 and 4,0 && null;null and null;
  2. +---------+-----------+
  3. | 3 and 4 | 0 && null |
  4. +---------+-----------+
  5. | 1 | 0 |
  6. +---------+-----------+
  7. 1 row in set (0.00 sec)
  8. mysql> select 2 and 3,4 && 0,4 && null,0 and null,null and null;
  9. +---------+--------+-----------+------------+---------------+
  10. | 2 and 3 | 4 && 0 | 4 && null | 0 and null | null and null |
  11. +---------+--------+-----------+------------+---------------+
  12. | 1 | 0 | NULL | 0 | NULL |
  13. +---------+--------+-----------+------------+---------------+
  14. mysql> select 2 or 3,2 or 0,null or null,0 or 0,0 or null;
  15. +--------+--------+--------------+--------+-----------+
  16. | 2 or 3 | 2 or 0 | null or null | 0 or 0 | 0 or null |
  17. +--------+--------+--------------+--------+-----------+
  18. | 1 | 1 | NULL | 0 | NULL |
  19. +--------+--------+--------------+--------+-----------+
  20. 1 row in set (0.00 sec)
  21. mysql> select 0 or null or 2;
  22. +----------------+
  23. | 0 or null or 2 |
  24. +----------------+
  25. | 1 |
  26. +----------------+
  27. 1 row in set (0.00 sec)
  28. mysql> select 2 xor 3,1 xor 0,null xor null,0 xor null;
  29. +---------+---------+---------------+------------+
  30. | 2 xor 3 | 1 xor 0 | null xor null | 0 xor null |
  31. +---------+---------+---------------+------------+
  32. | 0 | 1 | NULL | NULL |
  33. +---------+---------+---------------+------------+
  34. 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

相关文章

最新文章

更多