1.条件
使用 where 子句对表中的数据筛选,结果为true的行会出现在结果集中,语法如下:
select * from 表名 where 条件;
例:select * from students where id = 1;
where 后面支持多种条件运算符,进行条件的处理:
比较运算符;
逻辑运算符;
模糊查询;
范围查询;
空判断;
1.1.比较运算符
等于: =
大于: >
大于等于: >=
小于: <
小于等于: <=
不等于: != 或 <>
1.2.逻辑运算符
and or not
1.3.模糊查询 like
% 表示任意多个任意字符
select * from students where name like "贝%";
_ 表示一个任意字符
select * from students where name like "贝_塔";
rlike "str" 表示字段中存在"str"字符
select * from students where name rlike "吉";
1.4.范围查询
in() 范围
= any|some() 任意一个,等价 in
= all() 等于所有的
<> all() 不等于其中任何一项
2.排序
将查询的结果进行排序 order by 字段名 asc(升序)|desc(降序) ,如果不写默认升序
例:将未被删除的学生按照id降序排序
select * from students where isdelete=0 order by id desc;
3.聚合函数
count() 统计数量 , max() 求最大值, min() 求最小值, sum() 求和, avg() 求平均值
例1:求所有学生数量
select count(*) from students;
例2:求学生中的最大年龄
select max(age) from students;
例3:求学生中的最小年龄
select min(age) from students;
例4:求所有学生的年龄总和
select sum(age) from students;
例5:求学生的平均年龄
select avg(age) from students;
4.分组
按照字段分组,表示此字段相同的数据会被放到一个组中分组后,分组的依据列会显示在结果集中,
其他列不会显示在结果集中可以对分组后的数据进行统计,做聚合运算。
select 列1,列2,聚合... from 表名 group by 列1,列2,列3... having 列1,...聚合...
例1:以性别分组查看分别有多少人
select gender,count(*) from students group by gender;
例2:查看男生人数
select gender,count(*) from students group by gender having gender="男";
对比 where 和 having :
where 是对from后面指定的表进行数据筛选,属于对原始数据的筛选.
having 是对group by的结果进行筛选.
5.分页
当数据量过大时,在一页中查看数据是一件非常麻烦的事情
语法 select * from 表名 limit start,count
从start开始,获取count条数据,start索引从0开始
例1:查询前两行男生的信息
select * from students where gender="男" limit 0,2;
例2:已知每页显示m条数据,当前显示第n页,求第n页的数据
select * from students where isdelete=0 limit (n-1)*m,m;
6.连接查询
当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集,再选择合适的列返回
mysql支持三种类型的连接查询,分别为:
内连接查询 inner join ...on :查询的结果为两个表匹配到的数据
右连接查询 right outer join ...on :查询的结果为两个表匹配到的数据,右表特有的数据,对于左表中不存在的数据使用null填充
左连接查询 left outer join ...on :查询的结果为两个表匹配到的数据,左表特有的数据,对于右表中不存在的数据使用null填充
例1:使用内连接查询学生表和班级表
select * from students inner join classes on students.cls_id = classes.id;
例2:使用右连接查询学生表和班级表
select * from students as s right outer join classes as c on s.cls_id=c.id;
例3:使用左连接查询学生表和班级表
select * from students as s left outer join classes as c on s.cls_id=c.id;
7.子查询
在一个 select 语句中,嵌入了另外一个 select 语句, 那么被嵌入的 select 语句称之为子查询语句
主查询和子查询的关系:
子查询是嵌入到主查询中
子查询是辅助主查询的,要么充当条件,要么充当数据源
子查询是可以独立存在的语句,是一条完整的 select 语句
子查询分类:
标量子查询: 子查询返回的结果是一个数据(一行一列)
列子查询: 返回的结果是一列(一列多行)
行子查询: 返回的结果是一行(一行多列)
表级子查询: 返回的结果是多行多列
例:查询班级里大于平均年龄的学生数量
select count(*) from students where age > (select avg(age) from students);
总结
查询的完整格式:
SELECT select_expr [,select_expr,...] [
FROM tb_name
[WHERE 条件判断]
[GROUP BY {col_name | postion} [ASC | DESC], ...]
[HAVING WHERE 条件判断]
[ORDER BY {col_name|expr|postion} [ASC | DESC], ...]
[ LIMIT {[offset,]rowcount | row_count OFFSET offset}]
完整的select语句:
select distinct *
from 表名
where ....
group by ... having ...
order by ...
limit start,count