SELECT语句的执行过程(单表查询)
过程如下 :
1、先执行FROM,先找表,先确定对应数据库中的表
SELECT
SELECT [ALL | DISTINCT | DISTINCTROW ] [SQL_CACHE | SQL_NO_CACHE] select_expr [, select_expr ...] [FROM table_references [WHERE where_condition] [GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]] [HAVING where_condition] [ORDER BY {col_name | expr | position} [ASC | DESC], ...] [LIMIT {[offset,] row_count | row_count OFFSET offset}] [FOR UPDATE | LOCK IN SHARE MODE]
总结:
1、字段显示可以显示别名
count]:对查询的结果进行输出行数数量限制
:单个任意字符
示例:
查找指定表中的所有字段
seletc * from students
查找students表中的所有数据,显示指定的行
select * from students limit 6;
查找指定字段行
select name,age from students;
查找tb1表中age 不等于24 的数据
select * from stdents where age != 24;
查找指定表中age大于等于24并且小于等于20的数据
selsct * from students where age>=24 and age <=20; select * fromstudents where age between 20 and 24;
查找指定表中age等于20或者等于24的数据
select * from students where age=20 or age=24;
查找指定表中的查询出age 不在20到24的区间中的数据
select * from students where age <25 or age >24; select * from students where not between 20 and 24;
通过like 结合通配符进行模糊搜索
查找所有字段开头是s的任意长度数据
select * frim students where name like 's%';
查找所有字段开始是s,但是只有三个字符的数据
select * from students where name like 's__'
通过rlike结合正则表达式
查找所有字段开头是s的任意长度数据
select * from students where name rlike ‘^s.*’
查找指定字段匹配对应的条件,使用in关键字指定
查找指定表中age 等于21 20 23 的数据
select * from students where age in (20,21,23);
查找指定表中age不等于21 20 23 的数据
select * from students where age not in (20,21,23);
对指定字段进行排序
查找所有表数据,并且指定字段进行排序
查询studentsd 的所有数据,并指定age字段的值从大到小进行降序排序,如果多行之间的age字段相同时,在将name字段进行升序排序
select * from students order by age desc, name asc;
注意:
order by 后面跟的要排序的字段,顺序不一样,结果也不一样
比如:
1、select * from students order by age,classid; 2、select * from students order by classid,age; 第一条是先对age进行排序后,再对classid进行排序 第二条是先对classid进行排序,然后再对age进行排序
去重
使用DISTINCT关键字进行去重
select distinct age from students;
别名
查询时给字段添加别名,显示的时候显示别名
select name as Name,age from students;
分组
分组
GROUP:根据指定的条件把查询结果进行“分组”以用于做“聚合”运算
avg(), 统计最小值 max(), 统计最大值 min(), 统计最小值 count(), 统计每个分组的数量 sum() 统计每个分组的总和 HAVING: 对分组聚合运算后的结果指定过滤条件
示例:
对sudents表的gender字段进行分组
select * from students group by gender;
需要注意的是,显示的是第一次查找到男生和女生数据
聚合操作
select count(*),gender from students group by gender;
先对性别进行分组,然后统计每组中的人数。
count()就是一种聚合函数,这个函数能统计数量
先对性别进行分组,然后将每个分组中的age字段进行平均计算,得到每个组的平均年龄
select avg(age),gender from students group by gender;
group_concat()用法
select gender,group_concat(name) from students group by gender;
先将性别分组后,然后显示男生和女生组中的名字
HAVING用法
select gender,avg(age) from students group by gender having avg(age) > 20;
将分组过后的信息在进行条件过滤,