就以字段2来进行插头插座排序

东阳市金地子针织有限公司
新闻资讯
就以字段2来进行插头插座排序
发布日期:2024-05-02 08:21    点击次数:158

就以字段2来进行插头插座排序

 插头插座[[437763]]插头插座

今天咱们来讲讲SQL方面的常识点,格外是对于绝大无数的数据分析师而言,SQL亦然时常会被口试问到的实质。

首页-盛 盈宏壁纸有限公司

现在咱们有底下这4张表格

 学生表  教育表  得益表  课程表

咱们先在Navicat当中创建表格何况插入数据,在Navicat当中创建表格并不难,点击新建表,然后输入字段名,何况功令好相应的数据类型即可,点击保存

然后咱们向表中插入数据,语法如下 

insert into 表名(字段名1, 字段名2, 字段名3,.....)   values('val1', 'val2', 'val3', ......); 

举例咱们在学生表当中插入以下的数据 

insert into student(学号,姓名,出身日历,性别)   values('0001' , '张三' , '1991-05-01' , '男');  insert into student(学号,姓名,出身日历,性别)   values('0002' , '李四' , '1990-04-21' , '男'); 

output

将其他数据插入到其他的表格当中亦然雷同的敬爱,这里就不作念赘述了

苟简查询

举例查找学生名字以“小”起头的名单,不错这样作念 

select * from student where 姓名 like '小%' 

output 

学号 姓名 出身日历 性别  0003 小红 1994-10-21 女  0004 小王 1996-07-20 男  0005 小张 1999-04-15 男  0006 小好意思 1997-04-05 女  0007 小丽 1995-07-10 女 

这里的%默示大肆字符串,举例'小%'则默示姓“小”的学生信息,而'%小'默示的是以“小”字完毕的学生姓名,而'%小%'代表的是学生姓名中带有“小”这个要道字

关联词假如咱们仅仅思要复返前边几行的数据的话,就不错使用limit要道字 

select * from student where 姓名 like '小%' limit 3; 

output 

学号 姓名 出身日历 性别  0003 小红 1994-10-21 女  0004 小王 1996-07-20 男  0005 小张 1999-04-15 男 
分组汇总查询

咱们思要看一下报名插足“英语”课的学生有几东说念主,咱们知说念“英语”课程对应的课程号是0003,是以用count()函数才调来计较次数即可 

select count(*) as 学生东说念主数 from score where 课程号 = '0003'; 

output 

学生东说念主数        6 

但要是咱们思要查询一下每一门课程的最低、最高分以及平平分,不错通过group by要道字来延迟,按照“课程号”进行分组汇总 

select 课程号, min(得益) as 最低分, max(得益) as 最高分, avg(得益) as 平平分 from score group by 课程号 

output 

课程号 最低分 最高分 平平分  0001   80   88     84.0000  0002   66   90     80.2500  0003   69   97     84.1667  0004   75   78     76.5000  0005   97   99     98.0000 

鉴于上头的成果,咱们也不错使用order by要道字来进行排序,把柄“平平分”这一列 

select 课程号, min(得益) as 最低分,左云县代化棉类有限公司 max(得益) as 最高分,
赤坎区岩同锁具有限公司 avg(得益) as 平平分 from score group by 课程号 order by 平平分 

output 

课程号 最低分 最高分 平平分  0004 75 78 76.5000  0002 66 90 80.2500  0001 80 88 84.0000  0003 69 97 84.1667  0005 97 99 98.0000 

默许的排序口头是升序排序, 威海来威玩具有限公司另外咱们也不错尝试通过性别来进行分组查询 

select count(*) as 不同性别的学生数目 from student group by 性别; 

output 

不同性别的学生数目                4                3 
带有条目的分组查询

假定咱们盘算查询平平分大于80分的学生, 上海鑫美野营用品有限公司领先咱们要计较每个学生的平均得益, 大同区目化锁具有限公司然后再此的基础之上挑出80分以上的部分,是以不错group by 学号 

select 学号, avg(得益) as 平均得益 from score group by 学号 having avg(得益) > 80; 

output 

学号 平均得益  0001     91  0003 81.66666666666667  0004 81.33333333333333  0005     91.5  0006     91 

同理,咱们也不错把柄“课程号”来进行分组,group by 课程号,然后挑选出举例平平分大于70分的部分 

select 课程号, avg(得益) as 平均得益 from score group by 课程号 having avg(得益) > 70; 

output 

课程号 平均得益  0001     84  0002     80.25  0003 84.16666666666667  0004     76.5  0005     98 

上头提到的order by默许排序的口头是升序,咱们也不错建造成降序来排序 

select 课程号, avg(得益) as 平均得益 from score group by 课程号 having avg(得益) > 70 order by avg(得益) desc; 

output 

课程号 平均得益  0005      98  0003 84.16666666666667  0001     84  0002     80.25  0004     76.5 

此次咱们再添加一个字段最高分,通过max()才调来进行统计,同期对平平分与最高分进行排序,当平平分调换的技巧,就以最高分来进行排序 

select 课程号, avg(得益) as 平均得益, max(得益) as 最高分 from score group by 课程号 having avg(得益) > 70 order by avg(得益), max(得益); 

output 

课程号 平均得益 最高分  0004 76.5       78  0002 80.25       90  0001 84         88  0003 84.1666667 97  0005 98         99 

咱们在order by背面再放一个字段默示当以字段1排序的技巧遭遇调换的情况下,就以字段2来进行排序。

咱们再来换一个字段,插头插座看一下选课零散两门的学生有哪些,咱们领先是group by 学号,然后对“课程号”进行计数,挑选出欢快条目的部分 

select 学号, count(课程号) as 选课的数目 from score group by 学号 having count(课程号) > 2; 

output 

学号 选课的数目  0001       3  0003       3  0004       3 

底下咱们来处置一个复杂的查询,找出分数王人在80分以上至少两门课程的学生,列出他们的学号以及平平分,咱们先来筛选出分数王人在80分以上的学生 

select 学号 from score where 得益 > 80 

然后咱们计较出他们的平平分 

select 学号, avg(得益) as 平均得益 from score where 得益 > 80 group by 学号; 

output 

学号 平均得益  0001     91  0003     85  0004     97  0005     91.5 0006     91 

终末再加上截止条目,“至少是两门课程” 

select 学号, avg(得益) as 平均得益 from score where 得益 > 80 group by 学号 having count(课程号) >= 2;  

output 

学号 平均得益  0001     91  0005     91.5  0006     91 
汇总排序

咱们来看一下,对每位学生的总得益进行统计何况进行排序是如何来作念的,咱们用sum()才调来统计每个学生的总得益 

select 学号, sum(得益) from score group by 学号; 

然后咱们用order by要道字来进行排序 

select 学号, sum(得益) as 总分 from score group by 学号 order by sum(得益); 

output 

学号 总分  0007 75  0002 141  0006 182  0005 183  0004 244  0003 245  0001 273 

然后咱们再添加一个截止条目,举例挑选出总分在200分以上的数据,不错通过having要道词来延迟 

select 学号, sum(得益) as 总分 from score group by 学号 having sum(得益) > 200 order by sum(得益); 

output 

学号 总分  0004 244  0003 245  0001 273 
嵌套式查询

有技巧咱们需要写多层的SQL查询语句,一层的查询有技巧澄莹不够用,举例咱们思要查询出统共课程的得益王人是高于80分的学生学号与姓名,咱们一层一层来分析,领先咱们筛选出统共课程王人高于80分学生的学号与得益 

select 学号, min(得益) as 最低分 from score group by 学号 having min(得益) > 80; 

output 

学号 最低分  0001   88  0005   84  0006   85 

再得到了学号以及得益了之后,咱们将学号这一列索要出来,去student这张表当中去寻找欢快条目的 

select 学号,姓名 from student where 学号 in (select 学号 from score group by 学号 having min(得益) > 80); 

output 

学号 姓名  0001 张三  0005 小张  0006 小好意思 

芜俚来说,嵌套式的查询是触及到了多张表格的连合,举例咱们思要查询出选课的数目小于3门课程的学生姓名与学号,领先咱们先筛选出选课数目小于3门课程的学生学号 

select 学号, count(课程号) as 选课数目 from score group by 学号 having count(课程号) <= 2; 

output 

学号 选课数目  0002     2  0005     2  0006     2  0007     1 

虽然咱们其实惟有“学号”这一列,然后咱们在此基础之上再进行查询 

select 学号,姓名 from student where 学号 in (select 学号 from score group by 学号 having count(课程号) <= 2); 

output 

学号 姓名  0002 李四  0005 小张  0006 小好意思  0007 小丽 
日历函数

底下咱们来演练一下日历函数的使用,举例咱们思得到现时的日历,不错用curdate()才调

select curdate(); 

output 

curdate()  2021-11-16 

如果盘算得到现时的时刻,则不错用now()才调

select now(); 

output 

now()  2021-11-16 22:37:41 

由于篇幅的截止,这里就未几说了,咱们来看一下具体推行当中的操作,咱们筛选出出身年份在1994年的学生有哪些,不错这样来操作 

select * from student where year(出身日历) = 1994; 

output 

学号 姓名 出身日历 性别  0003 小红 1994-10-21 女 

同理咱们来筛选出当月过寿辰的同学 

select * from student where month(出身日历) = month(now()); 
跨表查询

有技巧咱们在进行数据查询的技巧需要用到多张表格,将多张表格衔尾起来进行操作,举例列出统共学生的姓名、选课的数目以及总分得益,咱们就需要用到多张表格了,咱们不错先尝试着贯穿student和score这两张表 

select * from student left join score on student.`学号` = score.`学号`; 

output 

学号 姓名 出身日历 性别 学号(1) 课程号 得益  0001 张三 1991-05-01 男 0001 0001 88  0001 张三 1991-05-01 男 0001 0002 90  0001 张三 1991-05-01 男 0001 0003 95  0002 李四 1990-04-21 男 0002 0002 66  0002 李四 1990-04-21 男 0002 0003 75  0003 小红 1994-10-21 女 0003 0001 80  0003 小红 1994-10-21 女 0003 0002 80  0003 小红 1994-10-21 女 0003 0003 85  0004 小王 1996-07-20 男 0004 0003 69  0004 小王 1996-07-20 男 0004 0004 78  0004 小王 1996-07-20 男 0004 0005 97  ..... 

然后再此基础之上,咱们保留需要的这几个字段 

select 姓名, count(课程号) as 选课的数目, sum(得益) as 总得益 from student left join score on student.`学号` = score.`学号` group by student.`姓名`; 

output 

姓名 选课的数目 总得益  张三         3   273  李四         2   141  小红         3   245  小王         3   244  小张         2   183  小好意思         2   182  小丽         1   75 

咱们也不错将总得益替换成平均得益,然后作念一个排序,取平平分最高的前三名 

select 姓名, avg(得益) as 平平分 from student left join score on student.`学号` = score.`学号` group by student.`姓名` limit 3; 

output 

姓名 平平分  张三 91.0000  李四 70.5000  小红 81.6667 

终末通过limit要道字来规则输出,上头的例子是两张表格的贯穿,咱们也不错尝试三张表格的贯穿, 

select * from student inner join score on student.`学号` = score.`学号` inner join course on score.`课程号` = course.`课程号`; 

output 

学号 姓名 出身日历 性别 学号(1) 课程号 得益 课程号(1) 课程称号 教育号  0001 张三 1991-05-01 男 0001 0001 88 0001 语文 0002  0001 张三 1991-05-01 男 0001 0002 90 0002 数学 0001  0001 张三 1991-05-01 男 0001 0003 95 0003 英语 0003  0002 李四 1990-04-21 男 0002 0002 66 0002 数学 0001  0002 李四 1990-04-21 男 0002 0003 75 0003 英语 0003  ...... 

虽然咱们也不错四张表格来贯穿 

select * from student inner join score on student.`学号` = score.`学号` inner join course on score.`课程号` = course.`课程号` inner join teacher on course.`教育号` = teacher.`教育号`; 

要是咱们思查询学生姓名、选课的课程称号以及讲课的敦朴,不错这样来作念 

select 姓名, 课程称号, 教育姓名 from student inner join score on student.`学号` = score.`学号` inner join course on score.`课程号` = course.`课程号` inner join teacher on course.`教育号` = teacher.`教育号`; 

output 

山东智德纺织有限公司
姓名 课程称号 教育姓名  张三 语文 马敦朴  张三 数学 王敦朴  张三 英语   李四 数学 王敦朴  李四 英语   小红 语文 马敦朴  小红 数学 王敦朴  小红 英语   小王 英语   小王 物理 张敦朴  ........ 

虽然咱们也不错将“得益”这一要道字也给加上 

select 姓名, 课程称号, 得益, 教育姓名 from student inner join score on student.`学号` = score.`学号` inner join course on score.`课程号` = course.`课程号` inner join teacher on course.`教育号` = teacher.`教育号`; 

output 

姓名 课程称号 得益 教育姓名  张三 语文     88   马敦朴  张三 数学     90   王敦朴  张三 英语     95   李四 数学     66   王敦朴  李四 英语     75   小红 语文     80   马敦朴  ....... 

咱们同期不错在背面添加一些筛选条目,举例咱们思要找出语文的得益在85分以上的同学学号以及姓名,就不错这样作念 

select student.`学号`, 姓名, 得益 from student inner join score on student.`学号` = score.`学号` inner join course on score.`课程号` = course.`课程号` inner join teacher on course.`教育号` = teacher.`教育号` where 课程称号 = '语文' and 得益 > 85; 

output 

学号 姓名 得益  0001 张三 88 

对于sql当中表格数据的贯穿,尤其是多张表格的贯穿。

 



  • 上一篇:没有了
  • 下一篇:没有了