MySQL高阶语句2

正则表达式

MySQL 的正则表达式使用 REGEXP 这个关键字来指定正则表达 式的匹配模式,REGEXP 操作符所支持的匹配模式如表所示

在这里插入图片描述
在 info 表中查询以 字母‘l’开头的 name 字段并打印对应的 id、name 和 score 记录。

mysql> select id ,name,score from info where name regexp '^l';
+----+------+-------+
| id | name | score |
+----+------+-------+
|  2 | lisi | 80.00 |
+----+------+-------+
1 row in set (0.00 sec)

查询以an结尾的name字段,并打印出相应的id和score

mysql> select id ,score from info where name regexp 'an$';
+----+-------+
| id | score |
+----+-------+
|  1 | 80.00 |
+----+-------+
1 row in set (0.00 sec)

查询name字段中带an的,并显示id、name、score对应的信息

mysql> select id,name,score from info where name regexp 'an';
+----+----------+-------+
| id | name     | score |
+----+----------+-------+
|  1 | zhangsan | 80.00 |
|  3 | wangwu   | 70.00 |
|  5 | tianqi   | 80.00 |
+----+----------+-------+
3 rows in set (0.00 sec)

查看name字段中以z开头,n结尾的

mysql> select * from info where name regexp '^z.+n$';
+----+----------+-------+---------+
| id | name     | score | address |
+----+----------+-------+---------+
|  1 | zhangsan | 80.00 | beijing |
+----+----------+-------+---------+
1 row in set (0.00 sec)

查找name字段带有zh或ba的数据,并显示出其id,name,score字段信息

mysql> select id,name,score from info where name regexp 'zh|ba';
+----+----------+-------+
| id | name     | score |
+----+----------+-------+
|  1 | zhangsan | 80.00 |
|  4 | zhaoliu  | 60.00 |
|  6 | heiba    | 70.00 |
+----+----------+-------+
3 rows in set (0.00 sec)

验证*在正则中的作用

查看name字段含有ti的,i可以出现或者不出现
mysql> select id,name,score from info where name regexp 'ti*';
+----+--------+-------+
| id | name   | score |
+----+--------+-------+
|  5 | tianqi | 80.00 |
+----+--------+-------+
1 row in set (0.00 sec)
查看带有t的记录,t可有可无
mysql> select id,name,score from info where name regexp 't*';
+----+----------+-------+
| id | name     | score |
+----+----------+-------+
|  1 | zhangsan | 80.00 |
|  2 | lisi     | 80.00 |
|  3 | wangwu   | 70.00 |
|  4 | zhaoliu  | 60.00 |
|  5 | tianqi   | 80.00 |
|  6 | heiba    | 70.00 |
+----+----------+-------+
6 rows in set (0.00 sec)

查看name字段以h-l开头的数据

mysql> select id,name,score from info where name regexp '^[h-l]';
+----+-------+-------+
| id | name  | score |
+----+-------+-------+
|  2 | lisi  | 80.00 |
|  6 | heiba | 70.00 |
+----+-------+-------+
2 rows in set (0.00 sec)

^在括号里面表示取反

mysql> select id,name,score from info where name regexp '[^zhangsan]';
+----+---------+-------+
| id | name    | score |
+----+---------+-------+
|  2 | lisi    | 80.00 |
|  3 | wangwu  | 70.00 |
|  4 | zhaoliu | 60.00 |
|  5 | tianqi  | 80.00 |
|  6 | heiba   | 70.00 |
+----+---------+-------+
5 rows in set (0.00 sec)

二、运算符

MySQL 的运算符用于对记录中的字段值进行运算。MySQL 的运算符共有四种,分别是:算术运算符、比较运算符、逻辑运算符和位运算符。

2.1 算术运算符

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 如果两者都是整数,则按照整数值进行比较。
  2. 如果一个整数一个字符串,则会自动将字符串转换为数字,再进行比较。(在程序中,一般是不会吧这两者进行相比较的)
  3. 如果两者都是字符串,则按照字符串进行比较。
  4. 如果两者中至少有一个值是 NULL,则比较的结果是 NULL。
  5. 与linux返回值表达相反,linux 中运行正常返回值是0,运行异常返回值是非0

不等于(<>,!=)
不等于号有两种写法,分别为<>或者!=,

用于针对数字、字符串和表达式不相等的比较

在这里插入图片描述
BETWEEN AND
BETWEEN AND 比较运算通常用于判断一个值是否落在某两个值之间
在这里插入图片描述
least 和greates
LEAST:当有两个或者多个参数时,返回其中的最小值。如果其中一个值为 NULL,则 返回结果就为 NULL

GREATEST:当有两个或者多个参数时,返回其中的最大值。如果其中一个值为NULL, 则返回结果就为 NULL
在这里插入图片描述
IN 和 NOT IN
在这里插入图片描述
LIKE 和 NOT LIKE
LIKE:用来匹配字符串,如果匹配成功则返回1,否则返回0
LIKE支持两种通配符:‘%’用于匹配任意数目的字符(*匹配的是前面一个字符),‘_'只能匹配一个字符
NOT LIKE:跟LIKE相反,如果匹配任意数目成功则返回1,否则返回0
在这里插入图片描述

2.3 逻辑运算符

逻辑运算符又被称为布尔运算符,通常用来判断表达式的真假,如果为真返回 1,否则 返回 0,真和假也可以用 TRUE 和 FALSE 表示。MySQL 中支持使用的逻辑运算符有四种, 具体如表所示
在这里插入图片描述

1. 逻辑非

逻辑运算符中最简单的运算符就是逻辑非,逻辑非使用 NOT 或!表示。逻辑非将跟在 它后面的逻辑测试取反,把真变为假,把假变为真。如果 NOT 后面的操作数为 0 时,所得值为 1;如果操作数为非 0 时,所得值为 0;如果操作数为 NULL 时,所得值为 NULL。
在这里插入图片描述

2.逻辑与

当所有的操作数都为非0值且不为null时,返回值为1,否则为0(null与0比较特殊)
null and 0 返回值为0
逻辑与使用 AND 或者&&表示
在这里插入图片描述

3.逻辑或

逻辑或通常使用 OR
逻辑或表示包含的操作数,任意一个非零值并且不是NULL值时,返回1,否则返回0
当有一个操作数为NULL时,如果另一个操作数为非0值,则返回值为1,否则为NULL
如两个操作数均为NULL,则返回值为NULL
在这里插入图片描述

4.逻辑异或(XOR)

两个非NULL值为操作数,如果两者都是0 或者都是非0,则返回0
如果一个为0,另一个为非0,则返回结果为1
当任意一个值为NULL时,返回值为NULL
在这里插入图片描述

5.位运算符

位运算符实际上是对二进制数进行计算的运算符。MySQL 内位运算会先将操作数变成二进制格式(1010 1111),然后进行位运算,最后在将计算结果
从二进制变回到十进制格式,方便用户查 看。MySQL 支持 6 种位运算符,具体如表所示
在这里插入图片描述
在这里插入图片描述
以上不管哪种运算符,在使用过程中都有优先级问题。运算符的优先级决定了不同的运 算符在计算过程中的先后顺序。级别高的运算符会先进行计算,如果运算符的级别相同, MySQL 会按照顺序从左到右依次进行计算

在这里插入图片描述

三连接查询

MySQL 的连接查询,通常都是将来自两个或多个表的记录行结合起来,基于这些表之间的 共同字段,进行数据的拼接。
首先,要确定一个主表作为结果集,然后将其他表的行有选择 性的连接到选定的主表结果集上
使用较多的连接查询包括:内连接、左连接和右连接

3.1## 内连接
内连查询:通过inner join的方式将两张指定的相同字段的记录行输出
在这里插入图片描述

3.2左连接

  1. 左连接也可以被称为左外连接,在 FROM 子句中使用 LEFT JOIN 或者 LEFT OUTER JOIN 关键字来表示
  2. 左连接以左侧表为基础表,接收左表的所有行,并用这些行与右侧参 考表中的记录进行匹配,也就是说匹配左表中的所有行以及右表中符合条件的行
  3. 左连接中左表的记录将会全部表示出来,而右表只会显示符合搜索条件的记录,右表记录不足的地方均为 NULL
    在这里插入图片描述

3.3 右连接

右连接也被称为右外连接,在 FROM 子句中使用 RIGHT JOIN 或者 RIGHT OUTER JOIN 关键字来表示。
右连接跟左连接正好相反,它是以右表为基础表,用于接收右表中的所有行,并用这些记录与左表中的行进行匹配
在右连接的查询结果集中,除了符合匹配规则的行外,还包括右表中有但是左表中不匹 配的行,这些记录在左表中以 NULL 补足
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值