1.连接查询/多表查询 假设有二张表t1和t2: t1的字段(id,name,age) t2的字段(id,class,score) (1)查询出学生的姓名,年龄和分数 mysql> SELECT name...列名称):求表中该列去重后的个数 (4)求出score表中学生的最高分数 SELECT max(score) FROM score; (5)求出score表中分数最高的学号和课程号 SELECT...min(score) FROM score; (7)求出分数表中最高分数和最低分数分别是多少 SELECT max(score),min(score) FROM score; (8)在7的基础上,...分别命别名为最高分数和最低分数,且取整 SELECT round(max(score)) 最高分数,round(min(score)) 最低分数 FROM score; (9)求出score表中学生的平均分数...: 1.如果分组函数存在,要显示分组条件的字段,则需要加上分组条件 2.如果分组函数单独使用,可以不用加上分组条件 在没有分组条件存在的情况下,分组函数必须单独存在 如果有分组条件GROUP BY,显示结果集可以包含分组条件的字段
语法:group_concat( distinct 要连接的字段 order by 排序字段 asc/desc )注意: 中括号是可选的分析: 通过使用distinct可以排除重复值;如果希望对结果中的值进行排序...需求1: 以stuName学生名称分组,把得分数score字段的值打印在一行,逗号分隔(默认) SQL如下 select stuName, GROUP_CONCAT(score) as '当前这个学生的得分数...#--这里我们可以使用in() 的包含+ 子查询的方式来 根据上面SQL的结果 来进行匹配包含查询 学生名 SELECT stuName,score,course from student where...上面已经用一句SQL查询出了 三门课的最低分和科目 那么我们就可以列用这个结果集来 当做另外一句SQL所要查询条件 !...想象成一张虚拟表取一个别名 t, 现在t这个是一个临时的表,我们要查询id,科目,分数,姓名, 就在前面加上需要的字段,注意别名#--然后再使用左连接筛选出 对应的结果SELECT g.
distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;separator是一个字符串值,缺省为一个逗号。...需求1: 以stuName学生名称分组,把得分数score字段的值打印在一行,逗号分隔(默认) SQL如下 select stuName, GROUP_CONCAT(score) as '当前这个学生的得分数...#--这里我们可以使用in() 的包含+ 子查询的方式来 根据上面SQL的结果 来进行匹配包含查询 学生名 SELECT stuName,score,course from student where...上面已经用一句SQL查询出了 三门课的最低分和科目 那么我们就可以列用这个结果集来 当做另外一句SQL所要查询条件 !...想象成一张虚拟表取一个别名 t, 现在t这个是一个临时的表,我们要查询id,科目,分数,姓名, 就在前面加上需要的字段,注意别名 #--然后再使用左连接筛选出 对应的结果 SELECT g.
4、Cluster by(字段) 除了具有Distribute by的功能外,还会对该字段进行排序。...(3)紧跟列名,也可以在列名和别名之间加入关键字‘AS’ select s_id as myid ,c_id from score; 二. 常用函数 1....分组 7.1 GROUP BY语句 GROUP BY语句通常会和聚合函数一起使用,按照一个或者多个列队结果进行分组,然后对每个组执行聚合操作。 1....每个MapReduce内部排序(Sort By)局部排序 Sort By:每个MapReduce内部进行排序,对全局结果集来说不是排序。...对于distribute by进行测试,一定要分配多reduce进行处理,否则无法看到distribute by的效果。 先按照学生id进行分区,再按照学生成绩进行排序。 1.
order by 排序的列 XXX asc 升序 order by 排序的列 XXX desc 降序 – 对emp表中所有员工的薪资进行升序(从低到高)排序,显示姓名、薪资。...(1~) (2)一个学生只能属于一个班级(11),两者合并结果还是1 因此,班级表和学生表是一对多的关系 对于一对多的两张表,可以在多的一方添加列,保存一的一方的主键,从而保存两张表之间的关系...保存另一张表的主键,从而保存两张表之间的关系 多对多 (1)一个学生对应多个老师(1~) (2)一个老师也对应多个学生(1*),两者合并结果是* 因此,学生表和老师表是多对多的关系 对于多对多的关系...上面小写的a和b就是A和B表的别名: – 查询部门和员工两张表 select * from dept,emp; 上面查询的结果中存在大量错误的数据, 如果想正确显示部门及部门对应的员工,可以通过where...from emp e1, emp e2 where e1.topid = e2.id; 4、(分组、聚合函数)列出最低薪资大于1500的各种职位,显示职位和该职位最低薪资 – 先查询出各种职位的最低薪资
8,DQL 下面是黑马程序员展示试题库数据的页面 页面上展示的数据肯定是在数据库中的试题库表中进行存储,而我们需要将数据库中的数据查询出来并展示在页面给用户看。...上图中的是最基本的查询效果,那么数据库其实是很多的,不可能在将所有的数据在一页进行全部展示,而页面上会有分页展示的效果,如下: 当然上图中的难度字段当我们点击也可以实现排序查询操作。...分别是: ASC : 升序排列 (默认值) DESC : 降序排列 注意:如果有多个排序条件,当前边的条件值一样时,才会根据第二条件进行排序 8.3.2 练习 查询学生信息,按照年龄升序排列...stu; select count(english) from stu; 上面语句根据某个字段进行统计,如果该字段某一行的值为null的话,将不会被统计。...count(*) > 2; where 和 having 区别: 执行时机不一样:where 是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。
in,not in,not exists和exists可投影多列 -- 把一个查询的结果 当成另一个查询的 字段,条件或者表(子查询可以应用到任何位置)!...,显示分数排在前5名的学员学号和分数 -- 不使用exists -- 01.查询“高等数学-1” 课程 对应的编号 SELECT subjectNo FROM `subject` WHERE SubjectName...,显示分数排在前5名的学员学号和分数 -- 01.查询“高等数学-1” 课程 对应的编号 SELECT subjectNo FROM `subject` WHERE SubjectName='高等数学-...-- 01.任何允许使用表达式的地方都可以使用子查询 -- 02.只出现在子查询中但是没有在父查询中出现的列,结果集中的列不能包含! ...笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员[1] 。
下图是MySQL练习题中涉及到的4张表和它们的具体字段: 学生表 课程表 成绩表 教师表 所有的题目都是根据4张表来进行出题,涉及到了很多的MySQL/SQL的知识点,希望对想提升SQL的读者朋友有所帮助....s_id = s2.s_id -- 学生表和成绩表的关联 and c_id in (select c_id from Score where s_id=01) -- 对课程进行限制,只在01学生的课程内...;t2和t1相同 order by 3 desc; -- 19、按照各科成绩进行排序,并且显示排名 select * from (select t1.c_id,...c on sc.c_id = c.c_id where sc.s_score < 60; -- 36、查询任何一门课程成绩都在75分以上的学生姓名、课程名和分数 select s.s_name...= s.c_id group by c.c_id -- 课程编号 order by 3 desc; -- 分组后排序,降序方式 -- 18、查询各科成绩最高分、最低分和平均分:以如下形式显示:
没选课的学生显示总成绩为 0 4.2.2.4. if 或 case 语句 – 2题 4.1 若学号sid为学生座位编号,现开始对座位号调整,奇数号和偶数号对调,如1和2对调、3和4对调…等, 如果最后一位为奇数...,则不调换座位,查询调换后的学生座位号(sid)、姓名,按sid排序 4.2 查询各科成绩最高分、最低分和平均分: 以如下形式显示:课程id、课程名、选修人数、最高分、最低分、平均分、及格率、中等率...按各科成绩进行排序,并显示排名 分数重复时保留名次空缺,即名次不连续 6.5 查询各科成绩,按各科成绩进行排序,并显示排名 分数重复时不保留名次空缺,即名次连续 6.6 查询学生 赵雷 的 变形 课程成绩的排名...:学生信息,分数,排名 分数重复时不保留名次空缺,即名次连续 6.7 查询课程 时空穿梭 成绩在第2-4名的学生,要求显示字段:学号、姓名、课程名、成绩 分数重复时不保留名次空缺,即名次连续 6.8...:课程编号,课程名称,[100-85],[85-70],[70-60],[60-0] 分别所占百分比 结果:保留2位小数 6.11 查询各科成绩前三名的记录,按照课程编号和分数排序 分数重复时,重复分数按照一名算
索引 ---- 在关系数据库中,如果有上万甚至上亿条记录,在查找记录的时候,想要获得非常快的速度,就需要使用索引。 索引是关系数据库中对某一列或多个列的值进行预排序的数据结构。...但是,很多时候,我们并不希望获得所有记录,而是根据条件选择性地获取指定条件的记录,例如,查询分数在80分以上的学生记录。在一张表有数百万记录的情况下,获取所有记录不仅费时,还费内存和网络带宽。...例如,要指定条件“分数在80分或以上的学生”,写成WHERE条件就是SELECT * FROM students WHERE score >= 80。...SELECT语句可以对结果集的列进行重命名。 排序 ---- 排序 我们使用SELECT查询时,细心的读者可能注意到,查询结果集通常是按照id排序的,也就是根据主键排序。这也是大部分数据库的做法。...这种多表查询又称笛卡尔查询,使用笛卡尔查询时要非常小心,由于结果集是目标表的行数乘积,对两个各自有100行记录的表进行笛卡尔查询将返回1万条记录,对两个各自有1万行记录的表进行笛卡尔查询将返回1亿条记录
”张三”老师可的学生,这些学生以外的学生就是没学过”张三”老师课的 (2) 在teacher表中获取”张三”的t_id,在course表中获取所有老师t_id和课程c_id,在score表中获取学生S_id...s_id和”01″课程分数,并按按分数降序排序 (2)将上面结果作为表a与student表内连接,最后输出学生信息 select b....(2) 要查询每个学生的平均成绩,就需要对s_id进行group by (3) 使用rank()函数对平均分排序和打名次 select a.s_id, avg(b.s_score) as avg_score...=b.s_id group by a.s_id; 24、查询各科成绩前三名的记录(不考虑成绩并列情况) 解题思路: (1) 首先使用row_number()函数对score表中所有课程进行分组并对每门课程的所有学生分数进行排序...解题思路: (1) 在score表中操作即可 (2) 求每门课的平均成绩,需要先对课程编号进行group by (3) 最后使用order by对平均成绩升序排序,平均成绩相同时按课程号降序排列 select
语句 使用 delete 语句删除表中数据 使用细节 select 语句 基本语法 注意事项 课堂练习 使用表达式对查询的列进行运算 在 select 语句中可使用 as 语句 练习 在 where...DISTINCT可选,指显示结果时,是否去掉重复数据 # 课堂练习 查询表中所有学生的信息。 查询表中所有学生的姓名和对应的英语成绩。 过滤表中重复数据distinct。...DISTINCT `name`,english FROM student; # 使用表达式对查询的列进行运算 # 在 select 语句中可使用 as 语句 # 练习 统计每个学生的总分 在所有学生总分加...10分的情况 使用别名表示学生分数。...在赵云的总分上增加60% 统计关羽的总分。 使用别名表示学生的数学分数。
; 查询各科成绩最高和最低的分, 以如下的形式显示:课程号,最高分,最低分 /* 分析思路 select 查询结果 [课程ID:是课程号的别名,最高分:max(成绩) ,最低分:min(成绩)] from... 最高分,min(成绩) as 最低分 from score group by 课程号; 查询每门课程被选修的学生数 /* 分析思路 select 查询结果 [课程号,选修该课程的学生数:汇总函数count...“每个”就是要分组了 平均成绩大于60分,就是对分组结果指定条件 分析思路 select 查询结果 [学号,平均成绩:汇总函数avg(成绩)] from 从哪张表中查找数据 [成绩在成绩表中,所以查找的是成绩表...60的学生学号,结果按按分数降序排列 /* 分析思路 select 查询结果 [] from 从哪张表中查找数据 [成绩表score] where 查询条件 [课程编号为“04”且分数小于60] group... by 分组 [没有] having 对分组结果指定条件 [] order by 对查询结果排序[查询结果按按分数降序排列]; */ select 学号 from score where 课程号='04
在group by子句后出现),MySQL中可以不用 having 对分组结果指定条件 如:[大于60分] order by 对查询结果排序 如:[增序: 成绩 ASC / 降序: 成绩...; 查询各科成绩最高和最低的分, 以如下的形式显示:课程号,最高分,最低分 /* 分析思路 select 查询结果 [课程ID:是课程号的别名,最高分:max(成绩) ,最低分:min(成绩)] from...最高分,min(成绩) as 最低分 from score group by 课程号; 查询每门课程被选修的学生数 /* 分析思路 select 查询结果 [课程号,选修该课程的学生数:汇总函数count...“每个”就是要分组了 平均成绩大于60分,就是对分组结果指定条件 分析思路 select 查询结果 [学号,平均成绩:汇总函数avg(成绩)] from 从哪张表中查找数据 [成绩在成绩表中,所以查找的是成绩表...[学生选修人数(超过2人的课程才统计):每门课程学生人数>2] order by 对查询结果排序[查询结果按人数降序排序,若人数相同,按课程号升序排序]; */ select 课程号, count(学号
; 查询各科成绩最高和最低的分, 以如下的形式显示:课程号,最高分,最低分 /* 分析思路 select 查询结果 [课程ID:是课程号的别名,最高分:max(成绩) ,最低分:min(成绩)] from...最高分,min(成绩) as 最低分 from score group by 课程号; 查询每门课程被选修的学生数 /* 分析思路 select 查询结果 [课程号,选修该课程的学生数:汇总函数count...“每个”就是要分组了 平均成绩大于60分,就是对分组结果指定条件 分析思路 select 查询结果 [学号,平均成绩:汇总函数avg(成绩)] from 从哪张表中查找数据 [成绩在成绩表中,所以查找的是成绩表...60的学生学号,结果按按分数降序排列 /* 分析思路 select 查询结果 [] from 从哪张表中查找数据 [成绩表score] where 查询条件 [课程编号为“04”且分数小于60] group...[学生选修人数(超过2人的课程才统计):每门课程学生人数>2] order by 对查询结果排序[查询结果按人数降序排序,若人数相同,按课程号升序排序]; */ select 课程号, count(学号
查询各科成绩最高和最低的分, 以如下的形式显示:课程号,最高分,最低分 /* 分析思路 select 查询结果 [课程ID:是课程号的别名,最高分:max(成绩) ,最低分:min(成绩)] from...最高分,min(成绩) as 最低分 from score group by 课程号; 查询每门课程被选修的学生数 /* 分析思路 select 查询结果 [课程号,选修该课程的学生数:汇总函数count...60的学生学号,结果按按分数降序排列 /* 分析思路 select 查询结果 [] from 从哪张表中查找数据 [成绩表score] where 查询条件 [课程编号为“04”且分数小于60] group...by 分组 [没有] having 对分组结果指定条件 [] order by 对查询结果排序[查询结果按按分数降序排列]; */ select 学号 from score where 课程号='04...[学生选修人数(超过2人的课程才统计):每门课程学生人数>2] order by 对查询结果排序[查询结果按人数降序排序,若人数相同,按课程号升序排序]; */ select 课程号, count(学号
order by 按照uid排序,对”序号“相同的元素进行求和,不同”序号“的数累加求和 如果将”序号“认为是分组的话,个人理解这是一个分组求和并累加的过程 即分组内求和,分组间累加。...框架是对窗口进行进一步分区,框架有两种范围限定方式: 一种是使用 ROWS 子句,通过指定当前行之前或之后的固定数目的行来限制分区中的行数。...学生成绩分析 表:Enrollments (student_id, course_id) 是该表的主键。...1)查询每位学生获得的最高成绩和它所对应的科目,若科目成绩并列,取 course_id 最小的一门。查询结果需按 student_id 增序进行排序。...by student_id order by student_id; 2)查询每一科目成绩最高和最低分数的学生,输出course_id,student_id,score 我们可以按科目查找成绩最高的同学和最低分的同学
2, image.png 查询各科成绩最高和最低的分, 以如下的形式显示:课程号,最高分,最低分 /* 分析思路 select 查询结果 [课程ID:是课程号的别名,最高分:max(成绩) ,最低分:min...查询每门课程被选修的学生数 /* 分析思路 select 查询结果 [课程号,选修该课程的学生数:汇总函数count] from 从哪张表中查找数据 [成绩表score] where 查询条件 [没有]...image.png 查询平均成绩大于60分学生的学号和平均成绩 /* 题目翻译成大白话: 平均成绩:展开来说就是计算每个学生的平均成绩 这里涉及到“每个”就是要分组了 平均成绩大于60分,就是对分组结果指定条件...分析思路 select 查询结果 [学号,平均成绩:汇总函数avg(成绩)] from 从哪张表中查找数据 [成绩在成绩表中,所以查找的是成绩表score] where 查询条件 [没有] group...by 对查询结果排序[课程号从大到小排列:降序desc]; */ select 课程号 from score where 成绩<60 order by 课程号 desc; order by 对查询结果排序
领取专属 10元无门槛券
手把手带您无忧上云