
今天给大家出几个题目,看看大家掌握的怎么样?如果没有下面4表到上一篇文章找哦!
May:看完这篇文章保证你学会sql的增删改zhuanlan.zhihu.com
做题之前先把昨天改复杂的表变简单了
ALTER TABLE student RENAME stu;
UPDATE stu set s_name='赵雷' WHERE stu_id='01';
ALTER TABLE stu CHANGE stu_id s_id VARCHAR(20);




题目与讲解:
# 1.查找学生表stu的所有记录
SELECT*FROM stu;

# 2.查找所有学生的学号、姓名
SELECT s_id,s_name FROM stu;

# 3.查找学生编号为01的学生信息
SELECT * FROM stu WHERE s_id='01';

# 4.查找男性同学的学生编号、学生姓名;
SELECT s_id,s_name FROM stu WHERE s_sex='男';

# 5.查找本月过生日的同学信息
SELECT * FROM stu WHERE month(s_age)=month(CURRENT_DATE);#做题的时候是7月所以没有

日期类型的函数有哪些呢?
SELECT CURRENT_DATE,CURRENT_TIME,NOW(),CURDATE(),CURTIME();

SELECT MONTH(CURDATE()),
YEAR(CURDATE()),
DAY(CURRENT_DATE),
HOUR(CURRENT_TIME),
MIN(CURRENT_TIME),
SECOND(CURRENT_TIME);

# 6.查询学生编号为01的学生成绩总分;
SELECT s_id,SUM(score)总分 FROM sc WHERE s_id='01';

执行顺序 from——where——select
select:针对本地的数据,获取数据要不要做计算
from:针对数据库的数据进行处理,将数据库的数据获取到本地
# 7.查询学生编号为01的学生成绩的总分、平均分、最高分、最低分
SELECT s_id,
SUM(score)总分,
AVG(score)平均分,
MAX(score)最高分,
MIN(score)最低分
FROM sc WHERE s_id='01';

# 8.查询不及格的学生成绩信息
SELECT * FROM sc WHERE score<60;

# 9.查找学生编号不为01的其他同学的成绩信息
不为有两个符号“!=”和“<>”
SELECT *FROM sc WHERE s_id!='01';
SELECT *FROM sc WHERE s_id<>'01';

# 10.查找成绩在60-80分区间的成绩信息;
有四种方法哦!你能想出几种呢?
SELECT * FROM sc WHERE score>=60 and score<=80;
SELECT * FROM sc WHERE score in(60,80);
SELECT * FROM sc WHERE score BETWEEN 60 and 80;
SELECT * FROM sc WHERE (score>=60) * (score<=80);

'*'代替“and” ,'+'代替“or”
# 11.查找成绩不在60-80分区间的成绩信息
SELECT * FROM sc WHERE score<60 or score>80;
SELECT * FROM sc WHERE score not in(60,80);
SELECT * FROM sc WHERE score not BETWEEN 60 and 80;
SELECT * FROM sc WHERE (score<60) + (score>80);
SELECT * FROM sc WHERE not (score>=60)*(score<=80);

# 12.查找学生编号为01和02的学生信息;
SELECT *FROM stu WHERE s_id='01' or s_id='02';
SELECT * FROM stu WHERE s_id in('01','02');

# 延伸问题 求01和02 同学的总成绩
SELECT s_id,SUM(score)总成绩 FROM sc WHERE s_id='01' or s_id='02' GROUP BY s_id;

#仔细讲解
SELECT s_id,SUM((s_id='01')*score)'学号01的成绩',SUM((s_id='02')*score)'学号02的成绩' FROM sc;

SUM((s_id='01')score) 完整代码:SUM((if s_id='01' then 1 else 0)*score)
先判断s_id='01'

(s_id='01')*score
学号01的成绩=(s_id='01')*score

SUM((s_id='01')*score)
对“(s_id='01')*score”列进行求和得到最终结果

#13.查找学生编号不为01和02的学生信息:
SELECT *FROM stu WHERE s_id!='01' and s_id!='02';
SELECT * FROM stu WHERE s_id not in('01','02');

#14.查询学生编号为01或者02的课程编号为01的成绩信息:
SELECT * FROM sc WHERE c_id='01' and s_id in ('01','02');
SELECT * FROM sc WHERE (s_id='01' or s_id='02') and c_id='01';
and 运算优先于or。如果想要提升优先级,那就要像数学算式一样加一个小括号。

#15.查找男性同学的人数
SELECT COUNT(*)男同学人数 FROM stu WHERE s_sex='男';
SELECT SUM(s_sex='男')男同学人数 FROM stu;

#16.查询名字中含有“风”字的学生信息:
SELECT * FROM stu WHERE s_name like '%风%';
'%'代表任意长度 任意字符,'_' 代表一个长度 任意字符;结合like函数进行模糊匹配;

#17.查询名字中含有“李”的老师数量:
SELECT COUNT(*)老师数量 FROM te WHERE t_name like '%李%';

#18.查询出现过学生考试不及格的课程:
SELECT DISTINCT c_id FROM sc where score<60;
去重函数必须放在前面,针对所有字段去重

#19.按成绩升序显示成绩信息:
SELECT*FROM sc ORDER BY score ASC;

DESC stu; desc:describe描述表信息
ORDERBY score DESC;desc:descending 降序排列
ORDERBY score ASC ;asc:ascending 升序排列 ;
#20.按学生编号升序,课程编号降序显示成绩信息:
SELECT*FROM sc ORDER BY s_id,c_id DESC;

#21.查询课程编号为01的学生成绩,按分数降序,学生编号升序排列:
SELECT * FROM sc WHERE c_id='01' ORDER BY score DESC,s_id ASC;

#22.查询成绩前三名的成绩信息:
单科成绩前三名
SELECT s_id,score FROM sc ORDER BY score desc LIMIT 3;

总分前三名
SELECT s_id,SUM(score)总分 FROM sc GROUP BY s_id ORDER BY 总分 desc LIMIT 3;
LIMIT m,n:表示从第m行开始一共是n行,注意第m行是从0开始排的。

#23.查询成绩第三名到第五名的成绩信息:
单科成绩三至五名
SELECT s_id,score FROM sc ORDER BY score desc LIMIT 2,3;

总分三至五名
SELECT s_id,SUM(score)总分 FROM sc GROUP BY s_id ORDER BY 总分 desc LIMIT 2,3;

大家感觉怎么样?加油!美好的未来就在前方!
查询题目
1.查找学生表stu的所有记录
2.查找所有学生的学号、姓名
3.查找学生编号为01的学生信息
4.查找男性同学的学生编号、学生姓名;
5.查找本月过生日的同学信息
6.查询学生编号为01的学生成绩总分;
7.查询学生编号为01的学生成绩的总分、平均分、最高分、最低分;
8.查询不及格的学生成绩信息;
9.查找学生编号不为01的其他同学的成绩信息
10.查找成绩在60-80分区间的成绩信息;
11.查找成绩不在60-80分区间的成绩信息
12.查找学生编号为01和02的学生信息;
延伸问题 求01和02 同学的总成绩;
13.查找学生编号不为01和02的学生信息;
14.查询学生编号为01或者02的课程编号为01的成绩信息;
15.查找男性同学的人数;
16.查询名字中含有“风”字的学生信息;
17.查询名字中含有“李”的老师数量
18.查询出现过学生考试不及格的课程
19.按成绩升序显示成绩信息
20.按学生编号升序,课程编号降序显示成绩信息:
21.查询课程编号为01的学生成绩,按分数降序,学生编号升序排列
22.查询成绩前三名的成绩信息:
23.查询成绩第三名到第五名的成绩信息:
