关系型数据库一直作为比较热门的数据库存储,搭配服务器端编程语言(专业超文本预处理器的缩写)使用简直是绝配,mysql的结构化查询语言语句也是很重要的一门课,这里为大家分享一下结构化查询语言语句,大家可以试试
表名和字段
1.学生表
学生(姓名,出生日期,性别)学生编号,学生姓名,出生年月,学生性别
2.课程表
课程(c_id,c_name,t _ id)-课程编号,课程名称,教师编号
3.教师表
教师(t_id,t _ name)教师编号,教师姓名
4.成绩表
分数(s_id,c_id,s _ score)-学生编号,课程编号,分数
测试数据
-建表
-学生表
创建表"学生"(
' s _ id ' VARCHAR(20),
` s _ name ` VARCHAR(20)NOT NULL DEFAULT ' ',
` s _ birth ` VARCHAR(20)NOT NULL DEFAULT ' ',
` s _ sex ` VARCHAR(10)NOT NULL DEFAULT ' ',
主键(` s_id `)
);
-课程表
创建表格"课程"(
` c _ id ' VARCHAR(20),
` c _ name ` VARCHAR(20)NOT NULL DEFAULT ' ',
` t_id` VARCHAR(20)不为空,
主键(` c_id `)
);
-教师表
创建表"教师"(
` t _ id ' VARCHAR(20),
` t _ name ` VARCHAR(20)NOT NULL DEFAULT ' ',
主键(` t_id `)
);
-成绩表
创建表格"分数"(
' s _ id ' VARCHAR(20),
` c _ id ' VARCHAR(20),
' s _ score ' INT(3),
主键(` s_id ',` c_id ')
);
-插入学生表测试数据
插入学生值(' 01 ','赵雷' , '1990-01-01' , '男');
插入学生值(' 02 ','钱电' , '1990-12-21' , '男');
插入学生值(' 03 ','孙风' , '1990-05-20' , '男');
插入学生值(' 04 ','李云' , '1990-08-06' , '男');
插入学生值(' 05 ','周梅' , '1991-12-01' , '女');
插入学生值(' 06 ','吴兰' , '1992-03-01' , '女');
插入学生值(' 07 ','郑竹' , '1989-07-01' , '女');
插入学生值(' 08 ','王菊' , '1990-01-20' , '女');
-课程表测试数据
插入课程值(' 01 ','语文' , '02');
插入课程值(' 02 ','数学' , '01');
插入课程值(' 03 ','英语' , '03');
-教师表测试数据
插入教师值(' 01 ','张三');
插入教师值(' 02 ','李四');
插入教师值(' 03 ','王五');
-成绩表测试数据
插入分数值(' 01 ',' 01 ',80);
插入分数值(' 01 ',' 02 ',90);
插入分数值(' 01 ',' 03 ',99);
插入分数值(' 02 ',' 01 ',70);
插入分数值(' 02 ',' 02 ',60);
插入分数值(' 02 ',' 03 ',80);
插入分数值(' 03 ',' 01 ',80);
插入分数值(' 03 ',' 02 ',80);
插入分数值(' 03 ',' 03 ',80);
插入分数值(' 04 ',' 01 ',50);
插入分数值(' 04 ',' 02 ',30);
插入分数值(' 04 ',' 03 ',20);
插入分数值(' 05 ',' 01 ',76);
插入分数值(' 05 ',' 02 ',87);
插入分数值(' 06 ',' 01 ',31);
插入分数值(' 06 ',' 03 ',34);
插入分数值(' 07 ',' 02 ',89);
插入分数值(' 07 ',' 03 ',98);
表数据如下
student 学生表:
标识号
姓名
出生
性
01
赵雷
1990-01-01
男
02
钱电
1990-12-21
男
03
孙凤
1990-05-20
男
04
李云
1990-08-06
男
05
周梅
1991-12-12
女
06
吴兰
2017-12-13
女
07
郑竹
1989-07-01
女
08
王菊
1990-01-20
女
09
赵雷
1990-01-21
女
10
赵雷
1990-01-22
男
score 分数表:
标识号
身份证
s分数
01
01
80
01
02
90
01
03
99
02
01
70
02
02
60
02
03
80
03
01
80
03
02
80
03
03
80
04
01
50
04
02
30
04
03
20
05
01
76
05
03
87
06
01
31
06
03
34
07
03
89
07
01
98
course 课程表
身份证
c_name
t_id
01
语文
02
02
数学
01
03
英语
03
teacher 老师表:
t_id
名字
01
张三
02
李四
03
王五
-准备条件,去掉sql _模式的ONLY_FULL_GROUP_BY否则此种情况下会报错:
-选择列表的表达式#1不在分组依据子句中,并且包含非聚合列用户信息.
-原因:
- MySQL 5.7.5和向上实现了对功能依赖的检测。如果启用了only_full_group_by SQL模式(在默认情况下是这样),
-那么关系型数据库就会拒绝选择列表、条件或顺序列表引用的查询,这些查询将引用组中未命名的非聚合列,而不是在功能上依赖于它们。
- (在5.7.5之前,MySQL没有检测到功能依赖项,only_full_group_by在默认情况下是不启用的。关于前5.7.5行为的描述,请参阅MySQL 5.6参考手册。)
-执行以下个命令,可以查看sql _模式的内容。
显示会话变量;
显示全局变量;
选择@ @ sql _ mode
-更改
set global SQL _ mode=' STRICT _ TRANS _ TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO _ ENGINE _ SUBSTITUTION ';
set session SQL _ mode=' STRICT _ TRANS _ TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO _ ENGINE _ SUBSTITUTION ';
练习题和sql
- 1、查询'01'课程比'02'课程成绩高的学生的信息及课程分数
select st.*,sc.s_score as '语文,sc2.s_score '数学'
来自学生街
在供应链标识=供应链标识和sc.c_id='01 '上的左连接分数南卡罗来纳州
sc2.s_id=st.s_id和sc2.c_id='02 '上的左连接分数sc2
其中sc.s_scoresc2.s_score
- 2、查询'01'课程比'02'课程成绩低的学生的信息及课程分数
'选择st.*,sc.s_score '语文,sc2.s_score '数学来自学生街
在供应链标识=供应链标识和sc.c_id='01 '上的左连接分数南卡罗来纳州
sc2.s_id=st.s_id和sc2.c_id='02 '上的左连接分数sc2
其中sc.s_scoresc2.s_score
- 3、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩
select st.s_id,st.s_name,ROUND(AVG(sc.s_score),2) cjScore from student st
供应链标识=供应链标识的左连接分数南卡罗来纳州
按AVG(科学分数)=60的圣西德分组
- 4、查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩
- (包括有成绩的和无成绩的)
select圣名,圣名,(case when ROUND(AVG(sc.s_score),2)为空,则其他0轮(AVG(sc。s _ score))end)来自学生ST的CJ分数
供应链标识=供应链标识的左连接分数南卡罗来纳州
具有AVG(科学分数)60或AVG(科学分数)的按圣西德分组为空
- 5、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩
select商店标识,商店名称,计数(c . c . id),(当总和(sc.s _ score)为空或总和(sc。s _ score)='那么0 else SUM(sc。s _ score)结束时的情况)
供应链标识=供应链标识的左连接分数南卡罗来纳州
在c.c_id=sc.c_id上向左加入课程c
按圣西德分组
- 6、查询'李'姓老师的数量
select t.t_name,count(来自教师t的t . t _ id
'按t.t_id分组,t.t_name类似'李%';
- 7、查询学过'张三'老师授课的同学的信息
select st.* from student st
供应链标识=供应链标识的左连接分数南卡罗来纳州
在c.c_id=sc.c_id上向左加入课程c
在t.t_id=c.t_id上左连接教师t
其中t.t_name='张三'
- 8、查询没学过'张三'老师授课的同学的信息
-张三老师教的课
select c . * from course c left join teacher t on t . t _ id=c . t _ id where t . t _ name='张三'
-有张三老师课成绩的圣西德
选择sc。s _ id from score sc where sc。c _ id in(select c . c _ id from course c left join teacher t on t . t _ id=c . t _ id where t . t _ name='张三)
-不在上面查到的圣西德的学生信息,即没学过张三老师授课的同学信息
select ST . * from student ST where ST . s _ id not in(
选择sc。s _ id from score sc where sc。c _ id in(select c . c _ id from course c left join teacher t on t . t _ id=c . t _ id where t . t _ name='张三)
)
- 9、查询学过编号为'01'并且也学过编号为'02'的课程的同学的信息
select st.* from student st
供应链标识=供应链标识的内部联接分数南卡罗来纳州
c.c_id=sc.c_id和c.c_id='01 '上的内部加入课程c
其中圣标识在(
从学生st2中选择st2.s_id
sc2.s_id=st2.s_id上的内部联接分数sc2
c2.c_id=sc2.c_id和c2.c_id='02 '上的内部加入课程c2
)
网友提供的思路(厉害呦~):
选择圣*
来自学生街
即s _ id `=圣s _ id '上的内部联接分数南卡罗来纳州
按圣西德分组
具有SUM(IF(sc.`c_id`='01 '或sc.`c_id`='02 ',1,0))1
- 10、查询学过编号为'01'但是没有学过编号为'02'的课程的同学的信息
select st.* from student st
供应链标识=供应链标识的内部联接分数南卡罗来纳州
c.c_id=sc.c_id和c.c_id='01 '上的内部加入课程c
如果圣西德不在(
从学生st2中选择st2.s_id
sc2.s_id=st2.s_id上的内部联接分数sc2
c2.c_id=sc2.c_id和c2.c_id='02 '上的内部加入课程c2
)
- 11、查询没有学全所有课程的同学的信息
-太复杂,下次换一种思路,看有没有简单点方法
-此处思路为查学全所有课程的学生id,再内联取反面
select * from s _ id不在的学生(
select st.s_id from student st
供应链标识=供应链标识和sc.c_id='01 '上的内部联接分数南卡罗来纳州
其中圣标识在(
从学生st2中选择st2.s_id
sc2.s_id=st2.s_id和sc2.c_id='02 '上的内部联接分数sc2
)和圣标识在(
从学生st2中选择st2.s_id
sc2.s_id=st2.s_id和sc2.c_id='03 '上的内部联接分数sc2
))
-来自一楼网友的思路,左连接,根据学生身份证明(识别)分组过滤掉数量小于课程表中总课程数量的结果(给我看他的代码),简洁不少。
select st.* from Student st
左连接分数S
在圣标识=圣标识
按圣西德分组
拥有计数(c id)(从课程中选择计数(c_id))
- 12、查询至少有一门课与学号为'01'的同学所学相同的同学的信息
从学生街。中选择独特的圣*
供应链标识=供应链标识的左连接分数南卡罗来纳州
其中sc.c_id在(
从学生st2中选择sc2.c_id
sc2.s_id=st2.s_id上的左连接分数sc2
其中st2.s_id='01 '
)
- 13、查询和'01'号的同学学习的课程完全相同的其他同学的信息
select st.* from student st
供应链标识=供应链标识的左连接分数南卡罗来纳州
按圣西德分组
具有group _ concat(sc。c _ id)=1
(
从学生st2中选择group_concat(sc2.c_id)
sc2.s_id=st2.s_id上的左连接分数sc2
其中st2.s_id='01 '
)
- 14、查询没学过'张三'老师讲授的任一门课程的学生姓名
从学生街中选择圣名
如果圣西德不在(
从评分南卡罗来纳州中选择供应链标识
c.c_id=sc.c_id上的内部连接课程c
t.t_id=c.t_id和t.t_name='上的内部联接教师t张三'
)
- 15、查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩
select st.s_id,st.s_name,avg(sc.s_score) from student st
供应链标识=供应链标识的左连接分数南卡罗来纳州
其中供应链标识在(
从评分南卡罗来纳州中选择供应链标识
其中,系统得分60或系统得分为空
按计数(供应链标识)=2的供应链标识分组
)
按圣西德分组
- 16、检索'01'课程分数小于60,按分数降序排列的学生信息
select st.*,sc.s_score from student st
供应链标识=供应链标识和sc.c_id='01 '和sc.s_score60上的内部联接分数南卡罗来纳州
按desc科学分数订购
- 17、按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
-可加圆,否则什么时候结束使显示更完美
' select st.s_id,st.s_name,avg(sc4.s_score)'平均分,sc.s_score '语文,sc2.s_score '数学,sc3.s_score '英语来自学生街
在供应链标识=供应链标识和sc.c_id='01 '上的左连接分数南卡罗来纳州
sc2.s_id=st.s_id和sc2.c_id='02 '上的左连接分数sc2
sc3.s_id=st.s_id和sc3.c_id='03 '上的左连接分数sc3
sc4.s_id=st.s_id上的左连接分数sc4
按圣西德分组
按总和排序(sc4.s_score) desc
- 18.查询各科成绩最高分、最低分和平均分:以如下形式显示:课程ID,课程姓名,最高分,最低分,平均分,及格率,中等率,优良率,优秀率
-及格为=60,中等为:70-80,优良为:80-90,优秀为:=90
' select c.c_id,c.c_name,max(sc.s_score)'最高分,MIN(sc2.s_score)'最低分,avg(sc3.s_score)'平均分'
,((从s分数=60且c_id=c.c_id的分数中选择count(s_id)/(从c_id=c.c_id的分数中选择count(s _ id))'及格率'
,((select count(s _ id from score,其中s _ score=70,s _ score=70,c _ id=c . c _ id)/(select count(s _ id from score,其中c _ id=c . c _ id))'中等率'
,((select count(s _ id from score,其中s _ score=80,s _ score=80,c _ id=c . c _ id)/(select count(s _ id from score,其中c _ id=c . c _ id))'优良率'
,((select count(s _ id)from score where s _ score=90 and c _ id=c . c _ id)/(select count(s _ id from score where c _ id=c . c _ id))'优秀率'
来自课程c
sc.c_id=c.c_id上的左连接分数南卡罗来纳州
sc2.c_id=c.c_id上的左连接分数sc2
sc3.c_id=c.c_id上的左连接分数sc3
按中文身份证分组
- 19、按各科成绩进行排序,并显示排名(实现不完全)
- mysql没有等级函数
-加@分数是为了防止用联合所有后打乱了顺序
select c1.s_id,c1.c_id,c1.c_name,@score:=c1.s_score,@i:=@i 1 from (select c.c_name,sc .*来自课程c
sc.c_id=c.c_id上的左连接分数南卡罗来纳州
其中c . c _ id='01 '由desc科学分数排序)c1,
(select @i:=0) a
联合所有
select c2.s_id,c2.c_id,c2.c_name,c2.s_score,@ii:=@ii 1 from (select c.c_name,sc .*来自课程c
sc.c_id=c.c_id上的左连接分数南卡罗来纳州
其中c.c_id='02 '由desc科学分数排序)c2,
(select @ii:=0) aa
联合所有
select c3.s_id,c3.c_id,c3.c_name,c3.s_score,@iii:=@iii 1 from (select c.c_name,sc .*来自课程c
sc.c_id=c.c_id上的左连接分数南卡罗来纳州
其中c.c_id='03 '按desc科学分数顺序)C3;
set @ iii=0;
- 20、查询学生的总成绩并进行排名
选择服务标识,服务名称
,(当总和(sc.s _ score)为空时,则为0,否则总和(sc.s _ score)结束)
来自学生街
供应链标识=供应链标识的左连接分数南卡罗来纳州
按圣西德分组按总和(sc.s _ score)排序desc
- 21、查询不同老师所教不同课程平均分从高到低显示
select t.t_id,t.t_name,c.c_name,avg(sc.s_score) from teacher t
在c.t_id=t.t_id左转加入航向c
sc.c_id=c.c_id上的左连接分数南卡罗来纳州
按t.t_id分组
按平均值desc排序
- 22、查询所有课程的成绩第2名到第3名的学生信息及该课程成绩
从(
select st.*,c.c_id,c.c_name,sc.s_score from student st
供应链标识=供应链标识的左连接分数南卡罗来纳州
c.c_id=sc.c_id和c.c_id='01 '上的内部加入课程c
按desc科学分数限制1.2)a排序
联合所有
select b.* from(
select st.*,c.c_id,c.c_name,sc.s_score from student st
供应链标识=供应链标识的左连接分数南卡罗来纳州
c.c_id=sc.c_id和c.c_id='02 '上的内部加入课程c
按desc科学分数限制1.2)b排序
联合所有
select c.* from(
select st.*,c.c_id,c.c_name,sc.s_score from student st
供应链标识=供应链标识的左连接分数南卡罗来纳州
c.c_id=sc.c_id和c.c_id='03 '上的内部加入课程c
按desc科学分数限制1,2) c排序
- 23、统计各科成绩各分数段人数:课程编号,课程名称,[100-85],[85-70],[70-60],[0-60]及所占百分比
选择c . c . id,c . c . name
,((从score sc中选择count(1)其中sc。c _ id=c . c _ id和sc。s _ score=100和sc。s _ score 80)/(select count(1 from score sc where sc。c _ id=c . c _ id))' 100-85 '
,((从score sc中选择count(1)其中sc。c _ id=c . c _ id和sc。s _ score=85和sc。s _ score 70)/(select count(1 from score sc where sc。c _ id=c . c _ id))' 85-70 '
,((从score sc中选择count(1)其中sc。c _ id=c . c _ id,scs _ score=70和sc。s _ score 60)/(select count(1 from score sc where sc。c _ id=c . c _ id))' 70-60 '
,((从分数sc中选择计数(1)其中sc.c_id=c.c_id,sc.s_score=60,sc。s _ score=0)/(从分数sc中选择计数(1)其中sc.c_id=c.c_id )) '60-0 '
从课程c按中文身份证排序
- 24、查询学生平均成绩及其名次
set @ I=0;
select a.*,@i:=@i 1 from(
select st.s_id,st.s_name,round(如果平均值(标准分数)为空,则0 else avg(sc.s_score) end),2)'平均分来自学生街
供应链标识=供应链标识的左连接分数南卡罗来纳州
按圣西德分组按sc.s _ score排序desc) a
- 25、查询各科成绩前三名的记录
从(
select st.s_id,st.s_name,c.c_id,c.c_name,sc.s_score from student st
供应链标识=供应链标识的左连接分数南卡罗来纳州
c.c_id=sc.c_id和c.c_id='01 '上的内部加入课程c
按sc.s _ score排序desc限制0,3) a
联合所有
select b.* from(
select st.s_id,st.s_name,c.c_id,c.c_name,sc.s_score from student st
供应链标识=供应链标识的左连接分数南卡罗来纳州
c.c_id=sc.c_id和c.c_id='02 '上的内部加入课程c
按sc.s _ score排序desc限制0,3) b
联合所有
select c.* from(
select st.s_id,st.s_name,c.c_id,c.c_name,sc.s_score from student st
供应链标识=供应链标识的左连接分数南卡罗来纳州
c.c_id=sc.c_id和c.c_id='03 '上的内部加入课程c
按desc科学分数限制0.3摄氏度排序
- 26、查询每门课程被选修的学生数
从课程c中选择c.c_id,c.c_name,count(1)
sc.c_id=c.c_id上的左连接分数南卡罗来纳州
st.s_id=c.c_id上的内部联接学生标准时间
按圣西德分组
- 27、查询出只有两门课程的全部学生的学号和姓名
select st.s_id,st.s_name from student st
供应链标识=供应链标识的左连接分数南卡罗来纳州
c.c_id=sc.c_id上的内部连接课程c
分组依据计数(1)=2的圣西德
- 28、查询男生、女生人数
select st.s_sex,count(1)from student ST group by ST . s _ sex
- 29、查询名字中含有'风'字的学生信息
select st.* from student st,其中圣名喜欢' %风%';
- 30、查询同名同性学生名单,并统计同名人数
select st.*,count(1)from student ST group by ST . s _ name,st.s_sex having count(1)1
- 31、查询1990年出生的学生名单
从学生街中选择圣*,其中圣出生类似于"1990%";
- 32、查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列
从课程c中选择c.c_id,c.c_name,avg(sc.s_score)
sc.c_id=c.c_id上的内部联接分数南卡罗来纳州
group by c . c _ id order by avg(scs _ score)desc
- 33、查询平均成绩大于等于85的所有学生的学号、姓名和平均成绩
select st.s_id,st.s_name,avg(sc.s_score) from student st
供应链标识=供应链标识的左连接分数南卡罗来纳州
按平均分数为85的圣西德分组
- 34、查询课程名称为'数学,且分数低于60的学生姓名和分数
挑选学生编号,学生姓名,学生分数来自学生街
供应链标识=供应链标识和sc.s_score60上的内部联接分数南卡罗来纳州
c.c_id=sc.c_id和' c.c_name='上的内部加入课程c数学'
- 35、查询所有学生的课程及分数情况;
select st.s_id,st.s_name,c.c_name,sc.s_score from student st
供应链标识=供应链标识的左连接分数南卡罗来纳州
在c.c_id=sc.c_id上向左加入课程c
按st.s_id,c.c_name排序
- 36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数
从学生st2中选择st2.s_id,st2.s_name,c2.c_name,sc2.s_score
sc2.s_id=st2.s_id上的左连接分数sc2
在c2.c_id=sc2.c_id左转加入路线c2
其中st2.s_id在(
select st.s_id from student st
供应链标识=供应链标识的左连接分数南卡罗来纳州
按具有最小值(sc _ score)=70的圣西德分组
按标识号排序
- 37、查询不及格的课程
select st.s_id,c.c_name,st.s_name,sc.s_score from student st
供应链标识=供应链标识和sc.s_score60上的内部联接分数南卡罗来纳州
c.c_id=sc.c_id上的内部连接课程c
- 38、查询课程编号为01且课程成绩在80分以上的学生的学号和姓名
挑选学生编号,学生姓名,学生分数来自学生街
供应链标识=供应链标识和sc.c_id='01 '和科学分数=80上的内部联接分数南卡罗来纳州
- 39、求每门课程的学生人数
从课程c中选择c.c_id,c.c_name,count(1)
sc.c_id=c.c_id上的内部联接分数南卡罗来纳州
按中文身份证分组
- 40、查询选修'张三'老师所授课程的学生中,成绩最高的学生信息及其成绩
select st.*,c.c_name,sc.s_score,t.t_name from student st
供应链标识=供应链标识的内部联接分数南卡罗来纳州
c.c_id=sc.c_id上的内部连接课程c
t.t_id=c.t_id和t.t_name='上的内部联接教师t张三'
按desc科学分数订购
限制0.1
- 41、查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩
挑选学生编号,学生姓名,学生编号,学生分数
供应链标识=供应链标识的左连接分数南卡罗来纳州
在c.c_id=sc.c_id上向左加入课程c
其中(
从学生st2中选择计数(1)
sc2.s_id=st2.s_id上的左连接分数sc2
在c2.c_id=sc2.c_id左转加入路线c2
其中sc.s_score=sc2.s_score和c.c_id!=c2.c_id
)1
- 42、查询每门功成绩最好的前两名
select a.* from (select st.s_id,st.s_name,c.c_name,sc.s_score from student st
供应链标识=供应链标识的左连接分数南卡罗来纳州
c.c_id=sc.c_id和c.c_id='01 '上的内部加入课程c
按sc.s _ score排序desc限制0,2) a
联合所有
select b.* from (select st.s_id,st.s_name,c.c_name,sc.s_score from student st
供应链标识=供应链标识的左连接分数南卡罗来纳州
c.c_id=sc.c_id和c.c_id='02 '上的内部加入课程c
按sc.s _ score排序desc限制0,2) b
联合所有
select c.* from (select st.s_id,st.s_name,c.c_name,sc.s_score from student st
供应链标识=供应链标识的左连接分数南卡罗来纳州
c.c_id=sc.c_id和c.c_id='03 '上的内部加入课程c
按desc科学分数限制0,2) c排序
-借鉴(更准确,漂亮):
从分数a中选择美国身份证,美国身份证,美国分数
其中(select COUNT(1)from score b其中b . c _ id=a . c _ id且b . s _ score=a . s _ score)=2 order by a . c _ id
- 43、统计每门课程的学生选修人数(超过5人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,
-若人数相同,按课程号升序排列
select sc.c_id,count(1) from score sc
在c.c_id=sc.c_id上向左加入课程c
计数为(1)5的按c.c_id分组
按计数排序(1) desc,南卡罗来纳州
- 44、检索至少选修两门课程的学生学号
select st.s_id from student st
供应链标识=供应链标识的左连接分数南卡罗来纳州
分组依据计数(1)=2的圣西德
- 45、查询选修了全部课程的学生信息
select st.* from student st
供应链标识=供应链标识的左连接分数南卡罗来纳州
按具有计数(1)的圣西德分组=(从课程中选择计数(1))
- 46、查询各学生的年龄
select st.*,timestampdiff(year,st.s_birth,now()) from student st
- 47、查询本周过生日的学生
-此处可能有问题,周函数取的为当前年的第几周,2017-12-12是第50周而2018-12-12是第49周,可以取月份,天,星期几(%w),
-再判断本周是否会持续到下一个月进行判断,太麻烦,不会写
select st.* from student st
其中week(now())=week(date _ format(ST . s _ birth,' %Y%m%d '))
- 48、查询下周过生日的学生
select st.* from student st
其中周(现在())1=周(date_format(st.s_birth,' %Y%m%d '))
- 49、查询本月过生日的学生
select st.* from student st
其中month(now())=month(date _ format(ST . s _ birth,' %Y%m%d '))
- 50、查询下月过生日的学生
-注意:当当前月为12时,用月份(现在())1为13而不是1,可用timestampadd()函数或现代的取模
select st.* from student st
其中month(timestamp(month,1,now())=month(date _ format(ST . s _ birth,' %Y%m%d '))
-或
select ST . * from student ST where(month(now())1)mod 12=month(date _ format(ST . s _ birth,' %Y%m%d '))
到此这篇关于Mysql Sql语句练习题(50道)的文章就介绍到这了,更多相关关系型数据库练习题内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。