sql完整的查询分为8个部分, 每个部分要么不写,要么必须写在正确的顺序上.
选项:
all : (默认值)全部
distinct :去重
写法:
select name,sex from student;
select * from student;
# 查询学生人数
select count(*) from student;
select count(*) as count from student;
select count(*) count from student;
from 后面接的是数据源, 表示查询数据的来源.
数据源: 通常由 一张表,或多张表(指连表查询), 或子查询 组成.
连表查询:查询学生的姓名及其班级名和教室
SELECT `学生表`.name,`班级表`.class_name,`班级表`.class_room from `学生表`
join `班级表` on `学生表`.class_id= `班级表`.class_id;
语法: where 条件表达式
作用: 使用用于对数据源进行过滤和筛选.
过滤和筛选原理: 根据 “条件表达式” 的结果, 如果结果为True,数据被保留;如果结果为False结果被过滤调用;
select * FROM `学生表` where sex='女';
select * FROM `学生表` where 2;#查询所有数据
条件表达式的写法:
查询学生表中的男生
select * from `学生表` WHERE sex<>'女';
查询学生id为 2 5 7 的学生的信息
SELECT * FROM `学生表` WHERE id in (2,5,7);
查询班级中名字有乔字的同学信息
SELECT * FROM `学生表` WHERE name like '%乔';
查询学生中年龄在18-19之间的学生信息
SELECT * FROM `学生表` WHERE age BETWEEN 18 and 19;
查询学生中年龄在18-19之间的并且班级信息不为空的学生信息
SELECT * FROM `学生表` WHERE age BETWEEN 18 and 19 and class_id is not null;
查询学生中年龄大于18的并且班级信息不为空的学生信息
SELECT * FROM `学生表` WHERE age>18 and class_id is not null;
语法: group by 字段
分组的目的: 为了统计结果
结合统计函数:
count()
sum()
avg()
max()
min()
group_concat() : 将组内字段的值通过,拼接成一个字符串
总计: 分组查询只能查找聚合函数以及分组的字段
例子: 求每个班级的人数, 每个班平均年龄,统计每个班的名单
SELECT class_id,COUNT(class_id) 班级人数,avg(age) 平均年龄,GROUP_CONCAT(name) 班级名单
FROM `学生表` where class_id is not null GROUP BY class_id;
用于分组后的再过滤(用法和where一样,只是位置不同)
语法: having 条件表达式
案例:查询班级人数大于2的班级id
SELECT class_id,COUNT(class_id) as 班级人数
FROM `学生表` where class_id is not null GROUP BY class_id
HAVING 班级人数>2;
语法:
查询学生信息,要求按照年龄降序排列
SELECT * from `学生表` where class_id is not null ORDER BY age desc ;
限制查询结果的条数,作用是减轻数据库服务器的压力.
语法: limit start,length;
表示 从开始索引start(默认0)位置查起,总共查length条记录
应用:处理分页
查询学生信息: 每页显4条
第一页
SELECT * from `学生表` limit 0,4;
第二页
SELECT * from `学生表` limit 4,4;
第n页
SELECT * from `学生表` limit (n-1)*4,4;