华为荣耀手机商城官方网站,南山区做网站,河北省建设监理协会网站,二级院系网站建设下面所有示例均来自 SQL之母 - SQL自学网站
-- 查询所有学生
-- 请编写 SQL 查询语句#xff0c;从名为 student 的数据表中查询出所有学生的信息。
select * from student;
-- 查询学生的姓名和年龄
-- 请编写一条 SQL 查询语句#xff0c;从名为 student 的数据表中选择出…下面所有示例均来自 SQL之母 - SQL自学网站
-- 查询所有学生
-- 请编写 SQL 查询语句从名为 student 的数据表中查询出所有学生的信息。
select * from student;
-- 查询学生的姓名和年龄
-- 请编写一条 SQL 查询语句从名为 student 的数据表中选择出所有学生的姓名name和年龄age信息。
select name, age from student;
-- 查询 - 别名
-- 请编写一条 SQL 查询语句从名为 student 的数据表中选择出所有学生的姓名name和年龄age信息并为它们取别名为 学生姓名 和 学生年龄。
select name as 学生姓名, age as 学生年龄 from student;
-- 查询 - 常量和运算
-- 请编写一条 SQL 查询语句从名为student的数据表中选择出所有学生的姓名name和分数score并且额外计算出分数的 2 倍double_score。
select name, score, 2 * score as double_score from student;
-- 条件查询 - where
-- 请编写一条 SQL 查询语句从名为student 的数据表中选择出所有学生的姓名name和成绩score要求学生姓名为 鱼皮。
select name, score from student where name 鱼皮
-- 条件查询 - 运算符
-- 请编写一条 SQL 查询语句从名为 student 的数据表中选择出所有学生的姓名name和年龄age要求学生姓名不等于 热dog 。
select name, age from student where name ! 热dog
-- 条件查询 - 空值
-- 请编写一条 SQL 查询语句从名为 student 的数据表中选择出所有学生的姓名name、年龄age和成绩score要求学生年龄不为空值。
select name, age, score from student where age is not null;
-- 条件查询 - 模糊查询
-- 请编写一条 SQL 查询语句从名为 student 的数据表中选择出所有学生的姓名name和成绩score要求姓名name不包含 李 这个字。
select name, score from student where name not like %李%
-- 条件查询 - 逻辑运算
-- 请编写一条 SQL 查询语句从名为 student 的数据表中选择出所有学生的姓名name、成绩score要求学生的姓名包含 李或者成绩score大于 500。
select name, score from student where name like %李% or score 500
-- 去重
-- 请编写一条 SQL 查询语句从名为 student 的数据表中选择出所有不重复的班级 IDclass_id和考试编号exam_num的组合。
select distinct class_id, exam_num from student
-- 排序
-- 请编写一条 SQL 查询语句从名为 student 的数据表中选择出学生姓名name、年龄age和成绩score首先按照成绩从大到小排序如果成绩相同则按照年龄从小到大排序。
select name, age, score from student order by score desc, age asc
-- 截断和偏移
-- 请编写一条 SQL 查询语句从名为 student 的数据表中选择学生姓名name和年龄age按照年龄从小到大排序从第 2 条数据开始、截取 3 个学生的信息。
select name, age from student order by age asc limit 1, 3
-- 条件分支
-- 假设有一个学生表 student包含以下字段name姓名、age年龄。请你编写一个 SQL 查询将学生按照年龄划分为三个年龄等级age_level60 岁以上为 老同学20 岁以上不包括 60 岁以上为 年轻20 岁及以下、以及没有年龄信息为 小同学。返回结果应包含学生的姓名name和年龄等级age_level并按姓名升序排序。
select name,case when (age 60) then 老同学when (age 20) then 年轻else 小同学 end as age_level
from
student
order by name asc
-- 函数 - 时间函数
-- 假设有一个学生表 student包含以下字段name姓名、age年龄。请你编写一个 SQL 查询展示所有学生的姓名name和当前日期列名为 当前日期。
select name, date () as 当前日期 from student
-- 函数 - 字符串处理
-- 假设有一个学生表 student包含以下字段id学号、name姓名。请你编写一个 SQL 查询筛选出姓名为 热dog 的学生展示其学号id、姓名name及其大写姓名upper_name。
select id, name, upper(name) as upper_name from student where name 热dog
-- 函数 - 聚合函数
-- 假设有一个学生表 student包含以下字段id学号、name姓名、class_id班级编号、score成绩。请你编写一个 SQL 查询汇总学生表中所有学生的总成绩total_score、平均成绩avg_score、最高成绩max_score和最低成绩min_score。
select sum(score) as total_score, avg(score) as avg_score, max(score) as max_score, min(score) as min_score from student
-- 分组聚合 - 单字段分组
-- 假设有一个学生表 student包含以下字段id学号、name姓名、class_id班级编号、score成绩。请你编写一个 SQL 查询统计学生表中的班级编号class_id和每个班级的平均成绩avg_score。
select class_id, avg(score) as avg_score from student group by class_id
-- 分组聚合 - 多字段分组
-- 假设有一个学生表 student包含以下字段id学号、name姓名、class_id班级编号、exam_num考试次数、score成绩。请你编写一个 SQL 查询统计学生表中的班级编号class_id考试次数exam_num和每个班级每次考试的总学生人数total_num。
select
class_id, exam_num, count(*) as total_num
from student
group by class_id, exam_num
-- 分组聚合 - having 子句
-- 假设有一个学生表 student包含以下字段id学号、name姓名、class_id班级编号、score成绩。请你编写一个 SQL 查询统计学生表中班级的总成绩超过 150 分的班级编号class_id和总成绩total_score。
select
class_id, sum(score) as total_score
from student
group by class_id
having total_score 150
-- 查询进阶 - 关联查询 - cross join
-- 假设有一个学生表 student 包含以下字段id学号、name姓名、age年龄、class_id班级编号还有一个班级表 class 包含以下字段id班级编号、name班级名称。请你编写一个 SQL 查询将学生表和班级表的所有行组合在一起并返回学生姓名student_name、学生年龄student_age、班级编号class_id以及班级名称class_name。
select s.name as student_name, s.age as student_age, s.class_id, c.name as class_name
from student s
cross join class c
-- 查询进阶 - 关联查询 - inner 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 as student_name, s.age as student_age, s.class_id, c.name as class_name, c.level as class_level
from student s
join class c on s.class_id c.id
-- 查询进阶 - 关联查询 - 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 as student_name, s.age as student_age, s.class_id, c.name as class_name, c.level as class_level
from student s
left join class c on s.class_id c.id
-- 查询进阶 - 子查询
-- 假设有一个学生表 student包含以下字段id学号、name姓名、age年龄、score分数、class_id班级编号。还有一个班级表 class包含以下字段id班级编号、name班级名称。请你编写一个 SQL 查询使用子查询的方式来获取存在对应班级的学生的所有数据返回学生姓名name、分数score、班级编号class_id字段。
select name, score, class_id
from student
where class_id in (select id from class
)
-- 查询进阶 - 子查询 - exists
-- 假设有一个学生表 student包含以下字段id学号、name姓名、age年龄、score分数、class_id班级编号。还有一个班级表 class包含以下字段id班级编号、name班级名称。请你编写一个 SQL 查询使用 exists 子查询的方式来获取 **不存在对应班级的** 学生的所有数据返回学生姓名name、年龄age、班级编号class_id字段。
select name, age, class_id
from student
where not exists (select idfrom classwhere class.id student.class_id
)
-- 查询进阶 - 组合查询
-- 假设有一个学生表 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
-- 查询进阶 - 开窗函数 - sum over
-- 假设有一个学生表 student包含以下字段id学号、name姓名、age年龄、score分数、class_id班级编号。请你编写一个 SQL 查询返回每个学生的详细信息字段顺序和原始表的字段顺序一致并计算每个班级的学生平均分class_avg_score。
select id, name, age, score, class_id,avg(score) over(partition by class_id) as class_avg_score
from student
-- 查询进阶 - 开窗函数 - sum over order by
-- 假设有一个学生表 student包含以下字段id学号、name姓名、age年龄、score分数、class_id班级编号。请你编写一个 SQL 查询返回每个学生的详细信息字段顺序和原始表的字段顺序一致并且按照分数升序的方式累加计算每个班级的学生总分class_sum_score。
select id, name, age, score, class_id,
sum(score) over (partition by class_id order by score asc) as class_sum_score
from student
-- 查询进阶 - 开窗函数 - rank
-- 假设有一个学生表 student包含以下字段id学号、name姓名、age年龄、score分数、class_id班级编号。请你编写一个 SQL 查询返回每个学生的详细信息字段顺序和原始表的字段顺序一致并且按照分数降序的方式计算每个班级内的学生的分数排名ranking。
select id, name, age, score, class_id,
rank() over(partition by class_id order by score desc) as ranking
from student
-- 查询进阶 - 开窗函数 - row_number
-- 假设有一个学生表 student包含以下字段id学号、name姓名、age年龄、score分数、class_id班级编号。请你编写一个 SQL 查询返回每个学生的详细信息字段顺序和原始表的字段顺序一致并且按照分数降序的方式给每个班级内的学生分配一个编号row_number。
select id, name, age, score, class_id,
row_number() over(partition by class_id order by score desc) as row_number
from student
-- 查询进阶 - 开窗函数 - lag / lead
-- 假设有一个学生表 student包含以下字段id学号、name姓名、age年龄、score分数、class_id班级编号。请你编写一个 SQL 查询返回每个学生的详细信息字段顺序和原始表的字段顺序一致并且按照分数降序的方式获取每个班级内的学生的前一名学生姓名prev_name、后一名学生姓名next_name。
select id, name, age, score, class_id,
lag(name) over(partition by class_id order by score desc) as prev_name,
lead(name) over (partition by class_id order by score desc) as next_name
from student