芬兰对捷克欧洲杯直播

admin · 2012-01-01

  

  明天咱们来说讲SQL方面的常识点,十分是看待绝大无数的数据剖判师而言,SQL也是通常会被口试问到的实质。

  现在咱们有上面这4张外格

   门生外 教授外 结果外 课程外

  咱们先正在Navicat傍边创修外格而且拔出数据,正在Navicat傍边创修外格并不难,点击新修外,而后输入字段名,而且规则好响应的数据范例便可,点击留存

  

  而后咱们向外中拔出数据,语法如下

  

insertinto外名(字段名1,字段名2,字段名3,.....)values(val1,val2,val3,......);

 

  比方咱们正在门生外傍边拔出如下的数据

  

insertintostudent(学号,姓名,出诞辰期,性别)values(0001,张三,1991-05-01,男);insertintostudent(学号,姓名,出诞辰期,性别)values(0002,李四,1990-04-21,男);

 

  output

  

  将其余数据拔出到其余的外格傍边也是同样的原因,这里就不做赘述了

   简陋查问

  比方查找门生名字以小开始的名单,能够这么做

  

select*fromstudentwhere姓名like小%

 

  output

  

学号姓名出诞辰期性别0003小红1994-10-21女0004小王1996-07-20男0005小张1999-04-15男0006小美1997-04-05女0007小丽1995-07-10女

 

  这里的%体现恣意字符串,比方小%则体现姓小的门生新闻,而%小体现的是以小字终局的门生姓名,而%小%代外的是门生姓名中带有小这个症结字

  可是假使咱们只是思要前往后面几行的数据的话,就能够利用limit症结字

  

select*fromstudentwhere姓名like小%limit3;

 

  output

  

学号姓名出诞辰期性别0003小红1994-10-21女0004小王1996-07-20男0005小张1999-04-15男

分组汇总查问

 

  咱们思要看一下报名列入英语课的门生有几人,咱们晓得英语课程对应的课程号是0003,以是用count()函数方式来揣测次数便可

  

selectcount(*)as门生人数fromscorewhere课程号=0003;

 

  output

  

门生人数6

 

  但如果咱们思要查问一下每一门课程的最低、最高分以及均匀分,能够经由过程group by症结字来施行,依照课程号实行分组汇总

  

select课程号,min(结果)as最低分,max(结果)as最高分,avg(结果)as均匀分fromscoregroupby课程号

 

  output

  

课程号最低分最高分均匀分0001808884.00000002669080.25000003699784.16670004757876.50000005979998.0000

 

  鉴于下面的了局,咱们也能够利用order by症结字来实行排序,按照均匀分这一列

  

select课程号,min(结果)as最低分,max(结果)as最高分,avg(结果)as均匀分fromscoregroupby课程号orderby均匀分

 

  output

  

课程号最低分最高分均匀分0004757876.50000002669080.25000001808884.00000003699784.16670005979998.0000

 

  默许的排序方法是升序排序,其余咱们也能够实验经由过程性别来实行分组查问

  

selectcount(*)as差异性其它门生数目fromstudentgroupby性别;

 

  output

  

差异性其它门生数目43

带有要求的分组查问

 

  假定咱们妄图查问均匀分大于80分的门生,开始咱们要揣测每一个门生的均匀结果,而后再此的根本之上挑出80分以上的部份,以是能够group by 学号

  

select学号,avg(结果)as均匀结果fromscoregroupby学号havingavg(结果)>80;

 

  output

  

学号均匀结果000191000381.66666666666667000481.33333333333333000591.5000691

 

  同理,咱们也能够按照课程号来实行分组,group by 课程号,而后遴选出比方均匀分大于70分的部份

  

select课程号,avg(结果)as均匀结果fromscoregroupby课程号havingavg(结果)>70;

 

  output

  

课程号均匀结果000184000280.25000384.16666666666667000476.5000598

 

  下面提到的order by默许排序的方法是升序,咱们也能够设备成降序来排序

  

select课程号,avg(结果)as均匀结果fromscoregroupby课程号havingavg(结果)>70orderbyavg(结果)desc;

 

  output

  

课程号均匀结果000598000384.16666666666667000184000280.25000476.5

 

  此次咱们再增添一个字段最高分,经由过程max()方式来实行统计,同时对均匀分与最高分实行排序,当均匀分一样的光阴,就以最高分来实行排序

  

select课程号,avg(结果)as均匀结果,max(结果)as最高分fromscoregroupby课程号havingavg(结果)>70orderbyavg(结果),max(结果);

 

  output

  

课程号均匀结果最高分000476.578000280.259000018488000384.16666679700059899

 

  咱们正在order by前面再放一个字段体现当以字段1排序的光阴遭受一样的景况下,就以字段2来实行排序。

  咱们再来换一个字段,看一下选课越过两门的门生有哪些,咱们开始是group by 学号,而后对课程号实行计数,遴选出满意要求的部份

  

select学号,count(课程号)as选课的数目fromscoregroupby学号havingcount(课程号)>2;

 

  output

  

学号选课的数目000130003300043

 

  上面咱们来打点一个庞杂的查问,寻找分数都正在80分以上起码两门课程的门生,列出他们的学号以及均匀分,咱们先来挑选出分数都正在80分以上的门生

  

select学号fromscorewhere结果>80

 

  而后咱们揣测出他们的均匀分

  

select学号,avg(结果)as均匀结果fromscorewhere结果>80groupby学号;

 

  output

  

学号均匀结果000191000385000497000591.5000691

 

  结果再加之束缚要求,起码是两门课程

  

select学号,avg(结果)as均匀结果fromscorewhere结果>80groupby学号havingcount(课程号)>=2;

 

  output

  

学号均匀结果000191000591.5000691

汇总排序

 

  咱们来看一下,对每位门生的总结果实行统计而且实行排序是奈何来做的,咱们用sum()方式来统计每一个门生的总结果

  

select学号,sum(结果)fromscoregroupby学号;

 

  而后咱们用order by症结字来实行排序

  

select学号,sum(结果)as总分fromscoregroupby学号orderbysum(结果);

 

  output

  

学号总分000775000214100061820005183000424400032450001273

 

  而后咱们再增添一个束缚要求,比方遴选出总分正在200分以上的数据,能够经由过程having症结词来施行

  

select学号,sum(结果)as总分fromscoregroupby学号havingsum(结果)>200orderbysum(结果);

 

  output

  

学号总分000424400032450001273

嵌套式查问

 

  偶然候咱们必要写众层的SQL查问语句,一层的查问偶然候分明不足用,比方咱们思要查问出统统课程的结果都是高于80分的门生学号与姓名,咱们一层一层来剖判,开始咱们挑选出统统课程都高于80分门生的学号与结果

  

select学号,min(结果)as最低分fromscoregroupby学号havingmin(结果)>80;

 

  output

  

学号最低分000188000584000685

 

  再获得了学号以及结果了以后,咱们将学号这一列提掏出来,去student这张外傍边去寻觅满意要求的

  

select学号,姓名fromstudentwhere学号in(select学号fromscoregroupby学号havingmin(结果)>80);

 

  output

  

学号姓名0001张三0005小张0006小美

 

  一般来讲,嵌套式的查问是触及到了众张外格的团结,比方咱们思要查问出选课的数目小于3门课程的门生姓名与学号,开始咱们先挑选出选课数目小于3门课程的门生学号

  

select学号,count(课程号)as选课数目fromscoregroupby学号havingcount(课程号)<=2;

 

  output

  

学号选课数目00022000520006200071

 

  固然咱们本来只消学号这一列,而后咱们正在此根本之上再实行查问

  

select学号,姓名fromstudentwhere学号in(select学号fromscoregroupby学号havingcount(课程号)<=2);

 

  output

  

学号姓名0002李四0005小张0006小美0007小丽

日期函数

 

  上面咱们来练习训练一下日期函数的利用,比方咱们思获取眼前的日期,能够用curdate()方式

  

selectcurdate();

 

  output

  

curdate()2021-11-16

 

  假如妄图获取眼前的时辰,则能够用now()方式

  

selectnow();

 

  output

  

now()2021-11-1622:37:41

 

  因为篇幅的束缚,这里就不众说了,咱们来看一下的确试验傍边的操纵,咱们挑选出诞生年份正在1994年的门生有哪些,能够这么来操纵

  

select*fromstudentwhereyear(出诞辰期)=1994;

 

  output

  

学号姓名出诞辰期性别0003小红1994-10-21女

 

  同理咱们来挑选出当月过诞辰的同窗

  

select*fromstudentwheremonth(出诞辰期)=month(now());

跨外查问

 

  偶然候咱们正在实行数据查问的光阴必要用到众张外格,将众张外格联络起来实行操纵,比方列出统统门生的姓名、选课的数目以及总分红绩,咱们就必要用到众张外格了,咱们能够先实验着连合student和score这两张外

  

select*fromstudentleftjoinscoreonstudent.`学号`=score.`学号`;

 

  output

  

学号姓名出诞辰期性别学号(1)课程号结果0001张三1991-05-01男00010001880001张三1991-05-01男00010002900001张三1991-05-01男00010003950002李四1990-04-21男00020002660002李四1990-04-21男00020003750003小红1994-10-21女00030001800003小红1994-10-21女00030002800003小红1994-10-21女00030003850004小王1996-07-20男00040003690004小王1996-07-20男00040004780004小王1996-07-20男0004000597.....

 

  而后再此根本之上,咱们保存必要的这几个字段

  

select姓名,count(课程号)as选课的数目,sum(结果)as总结果fromstudentleftjoinscoreonstudent.`学号`=score.`学号`groupbystudent.`姓名`;

 

  output

  

姓名选课的数目总结果张三3273李四2141小红3245小王3244小张2183小美2182小丽175

 

  咱们也能够将总结果替代成均匀结果,而后做一个排序,取均匀分最高的前三名

  

select姓名,avg(结果)as均匀分fromstudentleftjoinscoreonstudent.`学号`=score.`学号`groupbystudent.`姓名`limit3;

 

  output

  

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

 

  结果经由过程limit症结字来负责输出,下面的例子是两张外格的连合,咱们也能够实验三张外格的连合,

  

select*fromstudentinnerjoinscoreonstudent.`学号`=score.`学号`innerjoincour搜索引擎优化nscore.`课程号`=course.`课程号`;

 

  output

  

学号姓名出诞辰期性别学号(1)课程号结果课程号(1)课程称号教授号0001张三1991-05-01男00010001880001语文00020001张三1991-05-01男00010002900002数学00010001张三1991-05-01男00010003950003英语00030002李四1990-04-21男00020002660002数学00010002李四1990-04-21男00020003750003英语0003......

 

  固然咱们也能够四张外格来连合

  

select*fromstudentinnerjoinscoreonstudent.`学号`=score.`学号`innerjoincour搜索引擎优化nscore.`课程号`=course.`课程号`innerjointeacheroncourse.`教授号`=teacher.`教授号`;

 

  如果咱们思查问门生姓名、选课的课程称号以及讲课的教员,能够这么来做

  

select姓名,课程称号,教授姓名fromstudentinnerjoinscoreonstudent.`学号`=score.`学号`innerjoincour搜索引擎优化nscore.`课程号`=course.`课程号`innerjointeacheroncourse.`教授号`=teacher.`教授号`;

 

  output

  

姓名课程称号教授姓名张三语文马教员张三数学王教员张三英语李四数学王教员李四英语小红语文马教员小红数学王教员小红英语小王英语小王物理张教员........

 

  固然咱们也能够将结果这一症结字也给加之

  

select姓名,课程称号,结果,教授姓名fromstudentinnerjoinscoreonstudent.`学号`=score.`学号`innerjoincour搜索引擎优化nscore.`课程号`=course.`课程号`innerjointeacheroncourse.`教授号`=teacher.`教授号`;

 

  output

  

姓名课程称号结果教授姓名张三语文88马教员张三数学90王教员张三英语95李四数学66王教员李四英语75小红语文80马教员.......

 

  咱们同时能够正在前面增添少少挑选要求,比方咱们思要寻找语文的结果正在85分以上的同窗学号以及姓名,就能够这么做

  

selectstudent.`学号`,姓名,结果fromstudentinnerjoinscoreonstudent.`学号`=score.`学号`innerjoincour搜索引擎优化nscore.`课程号`=course.`课程号`innerjointeacheroncourse.`教授号`=teacher.`教授号`where课程称号=语文and结果>85;

 

  output

  

学号姓名结果0001张三88

 

  对于sql傍边外格数据的连合,特别是众张外格的连合。

文章推荐:

cba大白熊是谁

直播欧冠预选赛赛程

大地欧洲杯直播

cctv怎么看欧洲杯直播表