目录
- 全表查询
- 选择查询
- 常量和运算
- 条件查询 - where
- 运算符
- 模糊查询 - not like,like
- 逻辑运算
- 去重 - DISTINCT
- 排序 - order by
- 聚合函数
- 分组 - group by
- having
- join
- 组合查询
1.全表查询
查询数据表中所有关于学生(student)的信息
Select * from student
2.选择查询
查询数据表中学生的姓名(name)和年龄(age)信息
select name,age from student
3.常量和运算
查询数据表中的学生姓名(name)和成绩(score),并计算出来成绩的2倍且取名为:double_score
select name,score,score*2'double_score'from student
4.条件查询 - where
查询数据表中姓名为‘小明’的成绩和姓名
select name,score from student where name='小明'
5.运算符
查询数据表中的所有姓名和年龄,但不查询姓名为‘LISA’的学生
select name,age from student where name!="lisa"
6.模糊查询
查询数据表中所有学生的姓名(name)和年龄(age),但姓名内不能包含“张”(not like)
#不能包含“张”
select name,age from student where name not like "%张%"
#包含“张”
select name,age from student where name like "%张%"
7.逻辑运算
查询数据表中所有人学生的姓名(name),成绩(score),要求学生的姓名需包含“ding”,或者成绩(score)大于100
select name,score from student where name like "%ding%" or score>100
8.去重 - DISTINCT
过滤掉数据表中重复的数据,筛选掉数据表中班级(class_id)重复的数据
select distinct class_id from student
9.排序 - order by
筛选出数据表中的学生姓名(name)、年龄(age)、成绩(score)并且按照成绩从大到小进行排序;如果成绩相同,则按照年龄从小到大排序
- order by … Desc 从大到小
- order by … Asc 从小到大
- order by 默认排序为升序
select name,age,score from student order by score Desc,age Asc
10.聚合函数
聚合函数是指需要对数据进行汇总计算的特殊函数,他可以对数据进行:计数、求和、平均值、最大值、最小值等操作。
需要配合GROUP BY使用
----常见的的聚合函数:
- COUNT:计算制定列的行数或非空值的数量
- SUN:数值求和
- AVG:数据平均值
- MAX:最大值
- MIN:最小值
汇总数据表中学生的总成绩(total_score)、平均成绩(avg_score)、最高成绩(max_score)、最低成绩(min_score)
select SUM(score)'total_score', AVG(score)'avg_score', MAX(score)'max_score', MIN(score)'min_score' from student
11.分组 - GROUP BY
分组聚合是一种对数据进行分类并对每个分类进行聚合计算的操作。
- 单子段分组
学生表 student,包含以下字段:id(学号)、name(姓名)、class_id(班级编号)、score(成绩)。查询学生表中的班级编号(class_id)和每个班级的平均成绩(avg_score)
select class_id,AVG(score)'avg_score' from student group by class_id
- 多字段分组
比如想统计学校里每个班级每次考试的学生情况,这时就可以使用多字段分组。
学生表 student,包含以下字段:id(学号)、name(姓名)、class_id(班级编号)、exam_num(考试次数)、score(成绩)。统计学生表中的班级编号(class_id),考试次数(exam_num)和每个班级每次考试的总学生人数(total_num)
select class_id,exam_num,COUNT(id)'total_num' from student group by class_id,exam_num
12.分组聚合 – having
- HAVING函数用于在分组聚合后对分组进行过滤,可以对分组后的结果进行条件筛选,只保留满足特点条件的分组
- HAVING与条件查询WHERE的区别在于:
WHERE用于在**分组之前**进行过滤
HAVING用于在**分组之后**进行过滤
学生表 student,包含以下字段:id(学号)、name(姓名)、class_id(班级编号)、score(成绩)。统计学生表中班级的总成绩超过 150 分的班级编号(class_id)和总成绩(total_score)
select class_id,SUM(score)'total_score' from student group by class_id HAVING SUM(score)>=150
13.关联查询 - - join
关联查询是一种用于联合多个数据表中的数据的查询方式
- CROSS JOIN
- CROSS JOIN 是一种简单的关联查询,不需要任何条件来匹配行,它直接将左表的 每一行 与右表的 每一行 进行组合,返回的结果是两个表的笛卡尔
SELECT
student.name AS student_name,
student.age AS student_age,
student.class_id,
class.name AS class_name
FROM
student
CROSS JOIN class;
- INNER JOIN
- INNER JOIN 是一种常见的关联查询方式,它根据两个表之间的关联条件,将满足条件的行组合在一起
- INNER JOIN 只返回两个表中满足关联条件的交集部分,即在两个表中都存在的匹配行
题目:
假设有一个学生表 student,包含以下字段:id(学号)、name(姓名)、age(年龄)、class_id(班级编号)。还有一个班级表 class,包含以下字段:id(班级编号)、name(班级名称)、level(班级级别)。
请你编写一个 SQL 查询,根据学生表和班级表之间的班级编号进行匹配,返回学生姓名(student_name)、学生年龄(student_age)、班级编号(class_id)、班级名称(class_name)、班级级别(class_level)。
select student.name'student_name',student.age'student_age',class_id,class.name'class_name',class.level'class_level'
from
student join class on student.calss_id = class.id
- OUTER JOIN
- OUTER JOIN 是一种关联查询方式,它根据指定的关联条件,将两个表中满足条件的行组合在一起,并 包含没有匹配的行
- 在 OUTER JOIN 中,包括 LEFT OUTER JOIN 和 RIGHT OUTER JOIN 两种类型,它们分别表示查询左表和右表的所有行(即使没有被匹配),再加上满足条件的交集部分
题目:
假设有一个学生表 student,包含以下字段:id(学号)、name(姓名)、age(年龄)、class_id(班级编号)。还有一个班级表 class,包含以下字段:id(班级编号)、name(班级名称)、level(班级级别)。
请你编写一个 SQL 查询,根据学生表和班级表之间的班级编号进行匹配,返回学生姓名(student_name)、学生年龄(student_age)、班级编号(class_id)、班级名称(class_name)、班级级别(class_level),要求必须返回所有学生的信息(即使对应的班级编号不存在)。
select s.name'student_name',s.age'student_age',class_id,c.name'class_name',c.level'class_level'
from
student s left join calss c on s.class_id = c.id
14.组合查询
组合查询是一种将多个 SELECT 查询结果合并在一起的查询操作。
-
常见的组合查询:UNION 和 UNION ALL。
-
UNION:用于将两个或多个查询的结果集合并, 并去除重复的行 。即如果两个查询的结果有相同的行,则只保留一行
-
UNION ALL:将两个或多个查询的结果集合并, 但不去除重复的行 。即如果两个查询的结果有相同的行,则全部保留
题目: 假设有一个学生表 student,包含以下字段:id(学号)、name(姓名)、age(年龄)、score(分数)、class_id(班级编号)。还有一个新学生表 student_new,包含的字段和学生表完全一致。 请编写一条 SQL 语句,获取所有学生表和新学生表的学生姓名(name)、年龄(age)、分数(score)、班级编号(class_id)字段,要求保留重复的学生记录。
select name,age,score,class_id from student UNION ALL select name,age,score,class_id from student_new