MySQL数据库WHERE条件等相关操作
WHERE条件
1、表结构
CREATE TABLE `user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(10) DEFAULT 'xxx',
`sex` enum('w','m') DEFAULT 'w',
`age` tinyint(4) DEFAULT '18',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
2、比较运算符
-
>
查询年龄大于20岁的
select * from user where age>20;
将年龄大于20的性别改为w 年龄减少2
update user set sex='w', age=age-2 where age > 20;
-
<
查询年龄小于20岁的
select * from user where age<20;
将年龄小于20的性别改为w 年龄减少2
update user set sex='w', age=age-2 where age < 20;
-
>=
删除年龄大于等于30的数据
delete from user where age >= 30;
-
<=
删除id 小于等于 5 的数据
delete from user where id <= 5;
-
=
查找性别为w的数据
select * from user where sex='w';
-
!=/<>
查询性别不为w的所有数据
select * from user where sex != 'w';
select * from user where sex <> 'w';
3、逻辑运算符
-
and 逻辑与 两侧为真才为真
查询年龄为18 并且性别为w的数据
select * from user where sex='w' and age=18;
update user set username='zhangsan' where sex='w' and age=18;
-
or 逻辑或 满足一个条件就可以
修改性别为w或者m的数据 将年龄+2岁
update user set age=age+2 where sex='w' or sex='m';
-
between ... and ... 在...之间 包括本身
查询年龄在18 - 28之间的数据
select * from user where age>=18 and age <=28;
select * from user where age between 18 and 28;
-
not between and 不在...之间
查询年龄不在18 - 28之间的数据
select * from user where age < 18 or age >28;
select * from user where age not between 18 and 28;
-
in 在...里
查询年龄为 18 28 38 的数据
select * from user where age=18 or age=28 or age=38;
select * from user where age in(18,28,38);
-
not in 不在...里
查询年龄不为 18 28 38 的数据
select * from user where age!=18 and age!=28 and age!=38;
select * from user where age not in (18,28,38);
4、order by 排序
-
升序 asc
查询年龄从小到大
select * from user order by age;
select * from user order by age asc;
-
降序 desc
查询年龄从大到小
select * from user order by age desc;
select * from user where sex='w' order by age;
5、limit 取值
-
结构
limit x 取出x条数据
limit x,y 从x的位置取出y条数据
-
使用
取出3条数据
select * from user limit 3;
从第3条开始 取出3条
select * from user limit 3,3;
取出年龄最大的数据
select * from user order by age desc limit 1;
取出年龄最小的数据
select * from user order by age asc limit 1;
查询性别为w的 最大的年龄的数据
select * from user where sex='w' order by age desc limit 1;
-
分页
100 条数据
1页显示10条
1 页数据 limit 0,10
2 页数据 limit 10, 10
limit 规律
(nowpage -1)*everyPage
6、is is not 对于null值进行判断
-
is
查询为空的数据
select * from user where username is null;
-
is not
查询不为空的数据
select * from user where username is not null;
注意:
因为空值为特殊的值 所以不能使用= != 等进行判断
7、like模糊查询
-
'%字符' 查询以某个字符结尾的数据
查询用户名以y结尾的数据
select * from user where username like '%y';
-
'字符%'查询以某个字符作为开头的数据
查询用户名以l开头的数据
select * from user where username like 'l%';
-
'%字符%' 包含关系
查询包含y的用户名
select * from user where username like '%y%'
-
'_' 通配符匹配任意一位字符的数据
匹配俩位的用户名
select * from user where username like '__';
-
not like 查询匹配到的以外的数据
查询俩个字符以外的数据
select * from user where username not like '__';
8、MySQL正则表达式
mysql页同样支持正则表达式下面的符号用于正则regexp操作符中
模式 | 描述 |
---|---|
^ | 以某个字符作为开始 |
$ | 以某个字符作为结尾 |
. | 匹配任意一个字符 \n以外 |
[] | 字符集合 任意一个字符 [abc] |
[^...] | 取反 |
| | 或 |
* | 匹配零次到多次 |
+ | 匹配前面正则表达式的1次到多次 |
匹配前面表达式的n次 | |
匹配前面表达式的n~m次 |
查询username中以l作为开头的数据
select * from user where username regexp '^l';
查询username中以y作为结尾的数据
select * from user where username regexp 'y$';
查询username中包含y的数据
select * from user where username regexp 'y'
查询为俩个字符的数据
select * from user where username regexp '[1]{2}$';
查询字母以外的用户名
select * from user where username regexp '[^a-z]';
a-z ↩︎
本文来自博客园,作者:寻月隐君,转载请注明原文链接:https://www.cnblogs.com/QiaoPengjun/p/16011970.html