MySql运算符

MySQL 运算符
MySQL 运算符主要包括 3 大类:比较运算符、算术运算符、逻辑运算符
算术运算符
+ 、减 - 、乘 * 、除 / 、求余 %
特殊操作
mysql> select 1 + 2 ;
+-----+
| 1 + 2 |
+-----+
| 3 |
+-----+
1 row in set ( 0.00 sec)
mysql> select 1 /2;
+--------+
| 1 /2 |
+--------+
| 0.5000 |
+--------+
1 row in set ( 0.00 sec)
mysql> select 5 % 2 ;
+------+
| 5 % 2 |
+------+
| 1 |
+------+
1 row in set ( 0.00 sec)
mysql> select '5a' + 2 ;
+--------+
| '5a' + 2 |
+--------+
| 7 |
+--------+
1 row in set , 1 warning ( 0.00 sec)
mysql> select 'a5' + 2 ;
+--------+
| 'a5' + 2 |
+--------+
| 2 |
+--------+
1 row in set , 1 warning ( 0.00 sec)
mysql> select 123.45 % 2.52 ;
+-------------+
| 123.45 % 2.52 |
运算符
语法
说明
=
a=b
如果参与计算的两个操作数相等则为 true ,否则 false
!= 或者 <>
a!=b 或者 a<>b
如果两个操作数不相等则 true[1] ,否则 false[0]
<
a<b
如果 a 小于 b 则返回 true ,否则 false
>
a>b
如果 a 大于 b true
<=
a<=b
小于等于
>=
a>=b
大于等于
比较运算符
in 或者 not in
in 用于判断某个列的取值是否为指定的值,使用 in 运算符时指定的值是离散的数据,不是连续值
select * from tb_student where age in(18,28,15) 含义是 age=18 or age=28 or age=15
select * from tb_student where age not in(18,28,15) 含义是 age!=18 and age!=28 and
age!=15
查询孙权、黄盖、张三以及李四同学的成绩值
-- 查询张三以及李四同学的成绩
select score from tb_student where name=' 张三 ' or name=' 李四 '
select score from tb_stuent where name in(' 张三 ',' 李四 ') -- in 中的数据个数没有限制
between/and
用于判断数据是否在指定的范围内,连续值
查询成绩及格并且不属于优秀的所有学生信息
+-------------+
| 2.49 |
+-------------+
1 row in set ( 0.00 sec)
mysql> select - 123.45 % 2.52 ;
+--------------+
| - 123.45 % 2.52 |
+--------------+
| - 2.49 |
+--------------+
1 row in set ( 0.00 sec)
-- 写法 1 :使用条件拼接
select * from tb_student where score>= 60 and score<= 85 ;
-- 写法 2
select * from tb_student where score between 60 and 85 ;
-- 如果需要的是不在指定范围内部
select * from tb_student where score not between 50 and 85 ;
语法
说明
&& 或者
and
a and b 或者
a&&b
逻辑与,如果参与计算的两个操作数为 true ,否则 false
|| 或者 or
a or b 或者 a||b
逻辑或,如果参与计算的双反,只要一方为 false ,则返回
false
not 或者 !
not a 或者 !a
逻辑非,如果操作数为 false 则结果为 true
like/not like
主要针对字符串类型数据进行模糊查询,通配符 _ %
查询不姓张的同学
regexp 是在 mysql 中针对字符串类型进行正则式进行判断, not regexp
<=> 如果两数相同为 true ,即使是 null
is null/is not null
判断是否为空,为空则返回 true
逻辑运算符
练习题
样例数据表
查询全体学员的姓名及其出生年份
查询李姓学员的姓名及其出生年份
查询年龄在 18-23 岁之间的学生姓名、系别和年龄
select * from tb_student where name not like ' %'
1
create table if not exists tb_student(
id bigint not null auto_increment,
name varchar ( 32 ) not null ,
age int default 16 ,
sex boolean default 1 ,
dept varchar ( 32 ),
primary key(id)
) engine=innodb default charset utf8;
-- 插入测试数据
insert into tb_student values ( null , ' 小胖 ' , 18 , 1 , ' 软工 ' ),( null , ' 东方 ' , 16 , 0 , '
' ),( null , ' 仗义 ' , 19 , 1 , ' 大数据 ' );
select name, 2022 -age as birth_year from tb_student;
select name, 2022 -age as birth_year from tb_student where name like ' %' ;
1 查询年龄不在 18-23 岁之间的学生姓名、系别和年龄
查询软工、机壳和大数据系的所有学生姓名和性别
查询既不是软工、机壳,也不是大数据系的所有学生姓名和性别
查询张 xx 学生的姓名和年龄
查询名字中有方的学生信息
查询 age 确定的学生信息
注意 =null 或者 !=null 都是错误的,应该使用 is null 或者 is not null
查询性别不确定的学生信息
查询学生所在的系别信息
distinct 自动去除重复值, all 显示所有数据
查询系别和学生年龄信息
select name,dept,age from tb_student where age>= 18 and age<= 23 -- 注意两头相等
select name,dept,age from tb_student where age between 18 and 23 -- 小值在前
select name,dept,age from tb_student where age in ( 18 , 23 , 22 , 20 , 21 , 19 )
select name,dept,age from tb_student where age< 18 or age> 23 ;
select name,sex from tb_student where dept in ( ' 软工 ' , ' 机壳 ' , ' 大数据 ' );
select name,sex from tb_student where dept= ' 软工 ' or dept= ' 机壳 ' or dept= ' 大数
' ;
select name,sex from tb_student where dept not in ( ' 软工 ' , ' 机壳 ' , ' 大数据 ' );
select name,sex from tb_student where dept!= ' 软工 ' and dept!= ' 机壳 ' and
dept!= ' 大数据 ' ;
select name,age from tb_student where name like ' __' ;
select name,age from tb_student where name like ' %' and length(name)= 3 ; --
length 针对中文的处理为获取其中所占字节数,不是字符数
select * from tb_student where name like '% %' ;
select * from tb_student where age is not null ;
select * from tb_student where sex is null ;
select all dept from tb_student; -- all 不会去除重复值,默认 all
select distinct dept from tb_student;
mysql> select * from tb_student;
+----+--------+------+------+--------+
问题:如果 auto_increment 到达上限时 MySQL 是如何处理的
auto_increment 默认从 1 开始,上限取决于列的数据类型。如果表中 id 列已经有指定的值,则 max(id)+1
如果删除数据后,数据库系统仍旧会记录已经生成过的数据,不会从新开始,而是在以前的基础上继续
1
| id | name | age | sex | dept |
+----+--------+------+------+--------+
| 1 | 小胖 | 18 | 1 | 软工 |
| 2 | 东方 | 16 | 0 | 机壳 |
| 3 | 仗义 | 19 | 1 | 大数据 |
| 4 | 张骞 | 16 | 1 | 软工 |
| 5 | 张小骞 | 16 | 1 | 软工 |
+----+--------+------+------+--------+
  rows in set ( 0.00 sec)
试图取消软工 16 这条数据的重复
-- 语法错误
mysql> select distinct dept, distinct age from tb_student;
ERROR 1064 ( 42000 ): You have an error in your SQL syntax; check the manual
that corresponds to your MySQL server version for the right syntax to use
near 'distinct age from tb_student' at line 1
-- 正确的写法
select distinct dept,age from tb_student;
create table t1(
id int primary key auto_increment,
name varchar ( 20 )
);
insert into t1 values ( 2147483646 , 'zhangsan' );
insert into t1(name) values ( 'lisi' );
mysql> select * from t1;
+------------+----------+
| id | name |
+------------+----------+
| 2147483646 | zhangsan |
| 2147483647 | lisi |
+------------+----------+
2 rows in set ( 0.00 sec)
insert into t1(name) values ( 'wangwu' );
ERROR 1062 ( 23000 ): Duplicate entry '2147483647' for key 'PRIMARY' -- 意思是
再次生成了最大的 int 2147483647 作为主键,此时主键冲突
如果需要重新开始生成连续整数,只能将表中所有数据删除
建议:因为 auto_increment 生成数据是从 1 开始,不会出现负整数,所以一般建议使用 bigint unsigned
5 类聚集函数
聚集函数用于对于一个集合中的数据进行处理,不是一行一行的数据
count 统计行数、 sum 求和、 max 最大值、 min 最小值、 avg 平均值
计数
语法 count([all/distinct] 列名称 /*)
获取总学生数
需要统计选修 1 号课程的学生人数
mysql> delete from t1 where name= 'lisi' ; -- 2147483647
Query OK, 1 row affected ( 0.01 sec)
mysql> select * from t1;
+------------+----------+
| id | name |
+------------+----------+
| 2147483646 | zhangsan |
+------------+----------+
1 row in set ( 0.00 sec)
mysql> insert into t1(name) values ( 'wangwu' ); -- 2147483647
Query OK, 1 row affected ( 0.00 sec)
truncate table t1; -- 删除整表数据,不能使用 delete from
1
select count (*) from tb_student;
select count ( 1 ) from tb_student;
select count ( distinct dept) from tb_student; -- 获取系的个数
mysql> select * from tb_student;
+----+--------+------+------+--------+
| id | name | age | sex | dept |
+----+--------+------+------+--------+
| 1 | 小胖 | 18 | 1 | 软工 |
| 2 | 东方 | 16 | 0 | 机壳 |
| 3 | 仗义 | 19 | 1 | 大数据 |
| 4 | 张骞 | 16 | 1 | 软工 |
| 5 | 张小骞 | 16 | 1 | 软工 |
| 6 | 从来 | 16 | 1 | NULL |
+----+--------+------+------+--------+
6 rows in set ( 0.00 sec)
select count (dept) from tb_student; -- 进行计数统计时, null 不参与统计
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值