一. where 语句
- 查询出了数据,但查询的是全部的数据, 当表里面数据量非常大的时候,仅仅需要查询出符合条件的数据就行, 需要对数据进行相应的筛选, 如只查询 年龄>18岁的人, 如只查询性别为男的人,当然也可以查询出 年龄大于18岁且性别为男的。
- 筛选数据,需要用到 MySQL的运算符, 关于MySQL的运算符, 可以观看老蝴蝶以前写的文章: MySQL的运算符(九)
- 下面,重点讲解一下,where 语句的用法。
- 所用命令:
select *|字段列表 from 表名 where 筛选条件1 [ [or|and] 筛选条件2 ...]
- 不同的条件之间,用 and(并且),or(或者) 进行关联。
- 还是用上一章节的 user 表进行处理。
- 数据如下:
二. where 的单条件查询语句
- 常见的运算符,依旧是 第九章节的那些运算符。
- 凡是数字,都可以直接写出来, 但字符串,都必须要用 ‘’ 进行括起来。 即使是数字形式的字符串,也最好是用 ‘’ 括起来。
二.一 = 等号运算符
1 . 数字类型的等号, 查询 age 为24的用户数据。
select * from user u where u.age=24;
2 . 字符串类型的等号。 查询name 为 ‘岳泽霖’ 的用户数据。
select * from user u where u.name='岳泽霖';
3 . 日期类型的等号 如查询 birthday 为 ‘1995-10-01’ 的人。
select * from user u where u.birthday='1995-10-01';
注意,日期的格式。 如果日期的格式不匹配的话,可以用 date_format(d,f) 进行转换。
select * from user u where date_format(u.birthday,'%Y-%m-%d')='1995-10-01';
4 . mysql函数 重新构造列之后,用= 号。
如上面的日期格式转换,先用 date_format() 日期函数,对birthday 字段进行重新构造,再用 = 号。
也可以用 字符串函数
如 查询 姓名长度为 3的人。
select * from user u where char_length(u.name)=3;
其中, 其它 运算符, 如 !=, >,<,>=,<= 等基本与其一致
如查询 name 不为 ‘岳泽霖’ 的数据。
select * from user u where u.name !='岳泽霖';
name 为空的,不会查询出来。
其他的,就不举例了。
二.二 is null 和is not null 运算符
判断一个,is null是否为空,或者 is not null 不为空。
如:
1 .查询一下, name 为 空的数据
select * from user u where u.name is null;
将那两条 name 为空的数据查询出来了. 不能用=号来判断一下,是否为空。
2 . 查询一下, name 不为空的数据
select * from user u where u.name is not null;
3 . 可以用于任意的类型, 包括日期的类型。
select * from user u where u.birthday is not null;
二.三 in 和 not in 运算符
1 .数字类型in . 查询 age 为23,25,26 的员工。
select * from user u where u.age in (23,25,26);
2 . 字符串类型 in . 查询 name 为 ‘岳泽霖’,‘两个蝴蝶飞’,‘老蝴蝶’ 的.
select * from user u where u.name in ('岳泽霖','两个蝴蝶飞','老蝴蝶');
3 . not in 形式。 与in 正好相反。 如 查询age 不在 23,25,26 的员工。
select * from user u where u.age not in (23,25,26);
二.四 between … and … 和 not between … and … 运算符
常常用于两个数字之间,不建议用在两个字符串之间。
1 . 判断年龄在 18 到 24岁之间
select * from user u where u.age between 18 and 24;
包括 两边的, 是个闭区间。
2 . 判断年龄不在 18岁到24岁之间的
select * from user u where u.age not between 18 and 24;
二.五 like 和not like 运算符
有 % ,_ 两种形式。 % 匹配任意长度的任意字符,包括0长度的字符。 _ 下划线只匹配一个。
1 . like 匹配 % 号。 如 姓名中包含 ‘蝴蝶’ 的。
select * from user u where u.name like '%蝴蝶%';
2 . like 匹配 _ 号。 如 姓名为 ‘精什么妹’ 的,并且为三个字。
select * from user u where u.name like '精_妹';
3 .not like 形式的。 如 姓名中不包含 ‘岳’ 的。
select * from user u where u.name not like '%岳%';
二.六 regexp 和not regexp 运算符
- ^ 以什么开头, $ 以什么结尾, 主要用于正则验证。 但通常都是用 like 比较多。
- 1 . 姓名 以 ‘岳’ 开头的。
select * from user u where u.name regexp '^岳';
- 2 .姓名以 ‘蝴蝶’ 结尾的。
select * from user u where u.name regexp '蝴蝶$';
- 3 . 姓名中 包含 ‘蝴蝶’ 的
select * from user u where u.name regexp '蝴蝶';
- 4 . 姓名中不包含 ‘蝴蝶的’。 用 not regexp
select * from user u where u.name not regexp '蝴蝶';
二.七 用 1=1 来进行全部查询
- 条件用 1=1, 可以表示全部查询,不要筛选条件, 在程序中一般这么使用。
select * from user u where 1=1;
将数据全部查询出来了。
常用的筛选结果运算符,基本就这么多。
三. where 的多条件查询语句
- 多条件语句,其实就是 将多个 单条件,进行拼接起来, 用 and 或者 or 进行 关联。 and 表示且, 要同时满足, or 表示或, 只要有一个满足即可。
三.一 and 且 进行连接
- 如查询 性别是男,并且年龄为24 的人。
select * from user u where u.sex='男' and u.age=24;
这两个条件,要同时满足。
三.二 or 或 进行连接
如查询 性别为 男,或者 name 为null 的人。
select * from user u where u.sex='男' or name is null;
只要满足 sex为男, 或者是 名称为 null 就可以了。
三.三 and 和or 混合使用
如查询 年龄>=18,并且 名称为null 或者 id<3的人。
select * from user u where age>=18 and (name is null or id<3);