本文目錄一覽:
- 1、mysql數據庫面試題(學生表_課程表_成績表_教師表)
- 2、使用mysql 一個數據庫中有倆個表: student(學生表) 和score(成績表)
- 3、sql面試題50題(mysql版)
- 4、mysql數據庫學生成績查詢問題
- 5、mysql有一個考試成績表,test(studyid,pid,result,testdate)字段
mysql數據庫面試題(學生表_課程表_成績表_教師表)
Student(Sid,Sname,Sage,Ssex)學生表
Sid:學號
Sname:學生姓名
Sage:學生年齡
Ssex:學生性別
Course(Cid,Cname,Tid)課程表
Cid:課程編號
Cname:課程名稱
Tid:教師編號
SC(Sid,Cid,score)成績表
Sid:學號
Cid:課程編號
score:成績
Teacher(Tid,Tname)教師表
Tid:教師編號:
Tname:教師名字
1、插入數據
2、刪除課程表所有數據
3、將學生表中的姓名 張三修改為張大山
或者
4、查詢姓』李』的老師的個數:
5、查詢所有課程成績小於60的同學的學號、姓名:
6、查詢沒有學全所有課的同學的學號、姓名
7、查詢平均成績大於60分的同學的學號和平均成績
8、查詢學過「100」並且也學過編號「101」課程的同學的學號、姓名
9、查詢「100」課程比「101」課程成績高的所有學生的學號
10、查詢課程編號「100」的成績比課程編號「101」課程高的所有同學的學號、姓名
11、查詢學過「魯迅」老師所教的所有課的同學的學號、姓名
12、查詢所有同學的學號、姓名、選課數、總成績
13、查詢至少有一門課與學號為「1」同學所學相同的同學的學號和姓名
14、把「SC」表中「魯迅」老師教的課的成績都更改為此課程的平均成績,
錯誤
15、查詢和「2」學號的同學學習的課程完全相同的其他同學學號和姓名
16、刪除學習「魯迅」老師課的SC表記錄
17、向SC表中插入一些記錄,這些記錄要求符合以下條件:沒有上過編號「003」課程的同學學號、002號課的平均成績
18、查詢各科成績最高和最低的分:以如下的形式顯示:課程ID,最高分,最低分
19、按各科平均成績從低到高和及格率的百分數從高到低順序
20、查詢如下課程平均成績和及格率的百分數(用」1行」顯示): 數學(100),語文(101),英語(102)
22、查詢不同老師所教不同課程平均分從高到低顯示
23、查詢如下課程成績第3名到第6名的學生成績單:數學(100),語文(101),英語(102)
23、統計下列各科成績,各分數段人數:課程ID,課程名稱,[100-85],[85-70],[70-60],[ 小於60]
24、查詢學生平均成績及其名次
25、查詢各科成績前三名的記錄(不考慮成績並列情況)
26、查詢每門課程被選修的學生數
27、查詢出只選修一門課程的全部學生的學號和姓名
28、查詢男生、女生人數
29、查詢姓「張」的學生名單
30、查詢同名同姓的學生名單,並統計同名人數
31、1981年出生的學生名單(註:student表中sage列的類型是datetime)
32、查詢平均成績大於85的所有學生的學號、姓名和平均成績
33、查詢每門課程的平均成績,結果按平均成績升序排序,平均成績相同時,按課程號降序排列
34、查詢課程名稱為「英語」,且分數低於60的學生名字和分數
35、查詢所有學生的選課情況
36、查詢任何一門課程成績在70分以上的姓名、課程名稱和分數
37、查詢不及格的課程,並按課程號從大到小的排列
38、查詢課程編號為「101」且課程成績在80分以上的學生的學號和姓名
39、求選了課程的學生人數:
40、查詢選修「魯迅」老師所授課程的學生中,成績最高的學生姓名及其成績
41、檢索至少選修兩門課程的學生學號
42、查詢全部學生都選修的課程的課程號和課程名(1.一個課程被全部的學生選修,2.所有的學生選擇的所有課程)
43、查詢沒學過「魯迅」老師講授的任一門課程的學生姓名
44、查詢兩門以上不及格課程的同學的學號及其平均成績
45、檢索「101」課程分數小於60,按分數降序排列的同學學號
46、刪除「2」同學的「101」課程的成績
使用mysql 一個數據庫中有倆個表: student(學生表) 和score(成績表)
SET @i=0。
SQL本身有數據導入的操作。但如果要從一個備份的文件中導入數據,則要進行另外的操作。下面以一個例子進行說明。
SQL服務器上已有一個DOE數據庫,並且裏面有大量的數據,現準備從另外一個備份文件A1.BAK(不是DOE數據庫的備份文件)中導入另外的數據(即導入後在DOE中增加一些數據表,表中已錄有數據),並保持原DOE的數據不變。
擴展資料:
在為MySQL分配足夠的內存之前,請考慮不同領域對MySQL的內存需求。要考慮的關鍵領域是:並發連接——對於大量並發連接,排序和臨時表將需要大量內存。在撰寫本文時,對於處理3000+並發連接的數據庫,16GB到32GB的RAM是足夠的。
內存碎片可以消耗大約10%或更多的內存。像innodb_buffer_pool_size、key_buffer_size、query_cache_size等緩存和緩衝區要消耗大約80%的已分配內存。
參考資料來源:百度百科-MySQL數據庫
sql面試題50題(mysql版)
–插入學生表測試數據
insert into Student values(’01’ , ‘趙雷’ , ‘1990-01-01’ , ‘男’);
insert into Student values(’02’ , ‘錢電’ , ‘1990-12-21’ , ‘男’);
insert into Student values(’03’ , ‘孫風’ , ‘1990-05-20’ , ‘男’);
insert into Student values(’04’ , ‘李雲’ , ‘1990-08-06’ , ‘男’);
insert into Student values(’05’ , ‘周梅’ , ‘1991-12-01’ , ‘女’);
insert into Student values(’06’ , ‘吳蘭’ , ‘1992-03-01’ , ‘女’);
insert into Student values(’07’ , ‘鄭竹’ , ‘1989-07-01’ , ‘女’);
insert into Student values(’08’ , ‘王菊’ , ‘1990-01-20’ , ‘女’);
–課程表測試數據
insert into Course values(’01’ , ‘語文’ , ’02’);
insert into Course values(’02’ , ‘數學’ , ’01’);
insert into Course values(’03’ , ‘英語’ , ’03’);
–教師表測試數據
insert into Teacher values(’01’ , ‘張三’);
insert into Teacher values(’02’ , ‘李四’);
insert into Teacher values(’03’ , ‘王五’);
–成績表測試數據
insert into Score values(’01’ , ’01’ , 80);
insert into Score values(’01’ , ’02’ , 90);
insert into Score values(’01’ , ’03’ , 99);
insert into Score values(’02’ , ’01’ , 70);
insert into Score values(’02’ , ’02’ , 60);
insert into Score values(’02’ , ’03’ , 80);
insert into Score values(’03’ , ’01’ , 80);
insert into Score values(’03’ , ’02’ , 80);
insert into Score values(’03’ , ’03’ , 80);
insert into Score values(’04’ , ’01’ , 50);
insert into Score values(’04’ , ’02’ , 30);
insert into Score values(’04’ , ’03’ , 20);
insert into Score values(’05’ , ’01’ , 76);
insert into Score values(’05’ , ’02’ , 87);
insert into Score values(’06’ , ’01’ , 31);
insert into Score values(’06’ , ’03’ , 34);
insert into Score values(’07’ , ’02’ , 89);
insert into Score values(’07’ , ’03’ , 98);
— 1、查詢”01″課程比”02″課程成績高的學生的信息及課程分數
select c.*,a.s_score as 01課程score,b.s_score as 02課程score from
score a,score b
left join student c
on b.s_id = c.s_id
where a.s_id = b.s_id and a.c_id = ’01’ and b.c_id = ’02’ and a.s_score b.s_score;
— 2、查詢”01″課程比”02″課程成績低的學生的信息及課程分數
select a.* ,b.s_score as 01課程,c.s_score as 02課程 from student a
join score b
on a.s_id=b.s_id and b.c_id = ’01’
left join score c
on b.s_id = c.s_id and c.c_id = ’02’
where b.s_score c.s_score ;
— 3、查詢平均成績大於等於60分的同學的學生編號和學生姓名和平均成績
select a.s_id,a.s_name,round(avg(b.s_score),2) as 平均成績 from student a
join score b
on a.s_id = b.s_id
group by b.s_id having 平均成績 = 60;
備註:round[avg(成績),1]里,round是四捨五入函數,1代表保留1位小數
— 4、查詢平均成績小於60分的同學的學生編號和學生姓名和平均成績
— (包括有成績的和無成績的)
select b. ,round(avg(a.s_score),2) as 平均成績 from
student b
left join score a on b.s_id = a.s_id group by a.s_id having 平均成績 60
union
select b. ,0 as 平衡成績 from student b where b.s_id not in (select s_id from score);
— 5、查詢所有同學的學生編號、學生姓名、選課總數、所有課程的總成績
select a.s_id,a.s_name,count(b.c_id) as 選課總數 ,sum(b.s_score) as 總分 from student a
left join score b
on a.s_id = b.s_id group by s_id ;
— 6、查詢”李”姓老師的數量
select count(*) as 李姓老師數量 from teacher where t_name like ‘李%’;
— 7、查詢學過”張三”老師授課的同學的信息
select a.* from student a join score b
on a.s_id = b.s_id
where b.c_id in (select c.c_id from course c
join teacher d on c.t_id = d.t_id where d.t_name = ‘張三’);
— 8、查詢沒學過”張三”老師授課的同學的信息
select a.* from student a left join score b on a.s_id = b.s_id where a.s_id not in
(select s_id from score where c_id =
(select c_id from course where t_id =
(select t_id from teacher where t_name = ‘張
三’))) group by a.s_id;
— 9、查詢學過編號為”01″並且也學過編號為”02″的課程的同學的信息
select * from student where s_id in
(select a.s_id from score a join score b on a.s_id = b.s_id
where a.c_id = ’01’ and b.c_id = ’02’);
— 10、查詢學過編號為”01″但是沒有學過編號為”02″的課程的同學的信息
select * from student where s_id in
(select s_id from score where c_id = ’01’ )
and s_id not in (select s_id from score where c_id = ’02’ );
— 11、查詢沒有學全所有課程的同學的信息
select * from student where s_id not in
(select s_id from score group by s_id having count(c_id) = 3);
— 12、查詢至少有一門課與學號為”01″的同學所學相同的同學的信息
select distinct a.* from student a left join score b
on a.s_id = b.s_id where b.c_id in
(select c_id from score where s_id = ’01’) and a.s_id != ’01’ ;
注意:distinct是去重的
— 13、查詢和”01″號的同學學習的課程完全相同的其他同學的信息
select * from student where s_id in
(select s_id from score group by s_id having count(c_id) =
(select count(c_id) from score where s_id = ’01’) and s_id not in
(select s_id from score where c_id not in
(select c_id from score where s_id = ’01’)) and s_id != ’01’);
— 14、查詢沒學過”張三”老師講授的任一門課程的學生姓名
select s_name from student where s_id not in
(select s_id from score where c_id in
(select c_id from course where t_id in
(select t_id from teacher where t_name =’張三’)));
— 15、查詢兩門及其以上不及格課程的同學的學號,姓名及其平均成績
select a.s_id ,b.s_name,round(avg(a.s_score),2) as 平均成績 from score a
left join student b on a.s_id = b.s_id
where s_score 60 group by s_id having count(1) =2;
或者試試
select a.s_id ,b.s_name,round(avg(a.s_score),2) as 平均成績 from score a
left join student b on a.s_id = b.s_id
where a.s_score 60 group by a.s_id having count(*) =2;
— 16、檢索”01″課程分數小於60,按分數降序排列的學生信息
select a.* ,b.c_id ,b.s_score from student a
left join score b on a.s_id = b.s_id
where b.c_id = ’01’ and b.s_score 60
order by b.s_score desc;
— 17、按平均成績從高到低顯示所有學生的所有課程的成績以及平均成績
select a.s_name ,
sum(case when b.c_id = ’01’ then s_score else null end ) as 語文,
sum(case when b.c_id = ’02’ then s_score else null end ) as 數學,
sum(case when b.c_id = ’03’ then s_score else null end ) as 英語,
round(avg(s_score),2) as 平均成績
from student a left join score b on a.s_id = b.s_id group by a.s_name
order by 平均成績 desc;
— 18.查詢各科成績最高分、最低分和平均分:以如下形式顯示:課程ID,課程name,最高分,最低分,平均分,及格率,中等率,優良率,優秀率
–及格為=60,中等為:70-80,優良為:80-90,優秀為:=90
select b.c_id,b.c_name,
max(a.s_score) as 最高分,
min(a.s_score) as 最低分,
round(avg(a.s_score),2) as 平均分,
round(sum(case when a.s_score= 60 then 1 else 0 end)/count(s_id),2) as 及格率 ,
round(sum(case when a.s_score= 70 and a.s_score 80 then 1 else 0 end)/count(s_id),2) as 中等率,
round(sum(case when a.s_score= 80 and a.s_score 90 then 1 else 0 end)/count(s_id),2) as 優良率,
round(sum(case when a.s_score= 90 then 1 else 0 end)/count(s_id),2) as 優秀率
from score a
left join course b
on a.c_id = b.c_id group by b.c_id;
— 19、按各科成績進行排序,並顯示排名
第一種:
set @pre_c_id:= ’01’;
set @rank:=0;
select tb2.s_id ,tb2.c_id,tb2.s_score,tb2.排名 from
(select *,(case when tb1.c_id = @pre_c_id then @rank:=@rank+1 else @rank:=1 end) as 排名,
(case when @pre_c_id = tb1.c_id then @pre_c_id else @pre_c_id:=tb1.c_id end ) as pre_c_id
from
(select * from score order by c_id,s_score desc) tb1 )tb2;
如果看不懂用第二種方法:
SELECT a.c_id,a.s_id,a.s_score,COUNT(b.s_score)+1 AS 排名
FROM score a LEFT JOIN score b ON a.s_scoreb.s_score AND a.c_id = b.c_id
GROUP BY a.c_id,a.s_id,a.s_score ORDER BY a.c_id,排名,a.s_id ASC
— 20、查詢學生的總成績並進行排名
set @rank:=0;
select * ,(@rank:=@rank+1) as rank from
(select s_id ,sum(s_score) as 總成績 from score
group by s_id order by 總成績 desc) tb1;
— 21、查詢不同老師所教不同課程平均分從高到低顯示
select a.c_id, d.t_name,round(avg(a.s_score)) as 平均分 from score a
left join student b on a.s_id = b.s_id
left join course c on a.c_id = c.c_id
left join teacher d on c.t_id = d.t_id group by a.c_id
order by 平均分 desc;
— 22、查詢所有課程的成績第2名到第3名的學生信息及該課程成績
set @pre_c_id:= ’01’;
set @rank:=0;
select b.s_name,tb2.s_id ,tb2.c_id,tb2.s_score,tb2.排名 from
(select *,(case when tb1.c_id = @pre_c_id then @rank:=@rank+1 else @rank:=1 end) as 排名,
(case when @pre_c_id = tb1.c_id then @pre_c_id else @pre_c_id:=tb1.c_id end ) as pre_c_id
from
(select * from score order by c_id,s_score desc) tb1 )tb2 join student b on tb2.s_id = b.s_id where 排名 = 2 or 排名 =3;
— 23、統計各科成績各分數段人數:課程編號,課程名稱,[100-85],(85-70],(70-60],(0-60]及所佔百分比
select b.c_id,b.c_name ,
sum(case when a.s_score =85 then 1 else 0 end) as 100-85 ,
concat(round(100 sum(case when a.s_score =85 then 1 else 0 end)/count( ),2), ‘%’) as 百分比,
sum(case when a.s_score 85 and a.s_score =70 then 1 else 0 end) as 85-70 ,
concat(round(100 sum(case when a.s_score 85 and a.s_score =70 then 1 else 0 end)/count( ),2),’%’) as 百分比,
sum(case when a.s_score 70 and a.s_score =60 then 1 else 0 end) as 70-60 ,
concat(round(100 sum(case when a.s_score 70 and a.s_score =60 then 1 else 0 end)/count( ),2) ,’%’)as 百分比,
sum(case when a.s_score 60 and a.s_score =0 then 1 else 0 end) as 60-0 ,
concat(round(100 sum(case when a.s_score 60 and a.s_score =0 then 1
else 0 end)/count( ),2),’%’) as 百分比
from score a left join course b on a.c_id = b.c_id group by b.c_id;
— 24、查詢學生平均成績及其名次
select tb1.*,(@rank:=@rank +1 ) as rank from
(select s_id ,round(avg(s_score),2) as 平均成績 from score
group by s_id order by 平均成績 desc) tb1,(select @rank:=0) b;
— 25、查詢各科成績前三名的記錄
set @pre_c_id:= ’01’;
set @rank:=0;
select b.s_name,tb2.s_id ,tb2.c_id,tb2.s_score,tb2.排名 from
(select *,(case when tb1.c_id = @pre_c_id then @rank:=@rank+1 else @rank:=1 end) as 排名,
(case when @pre_c_id = tb1.c_id then @pre_c_id else @pre_c_id:=tb1.c_id end ) as pre_c_id
from
(select * from score order by c_id,s_score desc) tb1 )tb2 join student b on tb2.s_id = b.s_id where 排名 4;
— 26、查詢每門課程被選修的學生數
select c_id ,count(s_id) as 選修人數 from score group by c_id;
— 27、查詢出只有兩門課程的全部學生的學號和姓名
select a.s_id ,b.s_name from score a left join student b on a.s_id = b.s_id group by s_id having count(*) = 2;
— 28、查詢男生、女生人數
select sum(case s_sex when ‘男’ then 1 else 0 end) as 男生人數,
sum(case s_sex when ‘女’ then 1 else 0 end) as 女生人數 from student;
— 29、查詢名字中含有”風”字的學生信息
select * from student where s_name like ‘%風%’;
— 30、查詢同名同性學生名單,並統計同名人數
–略,不想寫
— 31、查詢1990年出生的學生名單
select * from student where s_birth like ‘1990%’;
— 32、查詢每門課程的平均成績,結果按平均成績降序排列,平均成績相同時,按課程編號升序排列
select c_id ,round(avg(s_score),2) as 平均成績 from score group by c_id order by 平均成績 desc, c_id asc;
— 33、查詢平均成績大於等於85的所有學生的學號、姓名和平均成績
select a.s_id,b.s_name ,round(avg(s_score),2) as 平均成績 from score a
left join student b on a.s_id = b.s_id group by a.s_id having 平均成績=85;
— 34、查詢課程名稱為”數學”,且分數低於60的學生姓名和分數
select b.s_name ,a.s_score from score a
left join student b on a.s_id = b.s_id
where a.c_id=(select c_id from course where c_name = ‘數學’)and a.s_score 60;
— 35、查詢所有學生的課程及分數情況;
select b.s_name,
sum(case when a.c_id = ’01’ then a.s_score else null end) as 語文,
sum(case when a.c_id = ’02’ then a.s_score else null end) as 數學,
sum(case when a.c_id = ’03’ then a.s_score else null end) as 英語
from score a right join student b on a.s_id = b.s_id group by b.s_name
— 36、查詢任何一門課程成績在70分以上的姓名、課程名稱和分數;
select b.s_name,
sum(case when a.c_id = ’01’ then a.s_score else null end) as 語文,
sum(case when a.c_id = ’02’ then a.s_score else null end) as 數學,
sum(case when a.c_id = ’03’ then a.s_score else null end) as 英語
from score a right join student b on a.s_id = b.s_id group by b.s_name having 語文= 70 or 數學= 70 or 英語= 70 ;
— 37、查詢不及格的課程
select a.s_id,a.c_id,b.c_name,a.s_score from score a
left join course b on a.c_id = b.c_id where a.s_score60;
–38、查詢課程編號為01且課程成績在80分以上的學生的學號和姓名;
select a.s_id,b.s_name from score a left join student b on a.s_id = b.s_id where a.c_id = ’01’ and a.s_score=80;
— 39、求每門課程的學生人數
select c_id,count(*) as 學生人數 from score group by c_id ;
— 40、查詢選修”張三”老師所授課程的學生中,成績最高的學生信息及其成績
select a.*,b.c_id,max(b.s_score) as 最高成績 from student a
right join score b on a.s_id = b.s_id
group by b.c_id
having b.c_id = (select c_id from course
where t_id = (select t_id from teacher where t_name = ‘張三’));
— 41、查詢不同課程成績相同的學生的學生編號、課程編號、學生成績
–(這題我搞不清題目是什麼意思,是指查找學生個體參加了的所有課程的成績各不相同的那個學生信息呢?還是所有課程之間做對比呢,我更傾向於理解為前者)
–理解為前者的寫法
select * from
(select * from score group by s_id,s_score) tb1
group by s_id having count(*) = 1;
–理解為後者的寫法
select distinct a.s_id,a.c_id,b.s_score from score a,score b where a.c_id != b.c_id and a.s_score = b.s_score;
— 42、查詢每門課程成績最好的前兩名
set @pre_c_id:= ’01’;
set @rank:=0;
select tb2.s_id ,tb2.c_id,tb2.s_score from
(select *,(case when tb1.c_id = @pre_c_id then @rank:=@rank+1 else @rank:=1 end) as 排名,
(case when @pre_c_id = tb1.c_id then @pre_c_id else @pre_c_id:=tb1.c_id end ) as pre_c_id
from
(select * from score order by c_id,s_score desc) tb1 )tb2
join student b on tb2.s_id = b.s_id where 排名 3;
— 43、統計每門課程的學生選修人數(超過5人的課程才統計)。要求輸出課程號和選修人數,查詢結果按人數降序排列,若人相同,按課程號升序排列
select c_id ,count(*) as 選修人數 from score group by c_id having 選修人數5 order by 選修人數 desc , c_id asc;
— 44、檢索至少選修兩門課程的學生學號
select s_id from score group by s_id having count(*) = 2;
— 45、查詢選修了全部課程的學生信息
select * from student where s_id in
(select s_id from score group by s_id having count(*) = 3)
–46、查詢各學生的年齡
select s_name ,(date_format(now(),’%Y’)-date_format(s_birth,’%Y’) + (CASE when date_format(now(),’%m%d’)=date_format(s_birth,’%m%d’) then 0 else 1 end)) as age
from student
— 47、查詢本周過生日的學生
—(實現得並不完全,因為例如出生月日為『01-01』在每一年可能會輸入不同周)
select * from student where week(date_format(s_birth,’%m%d’))=week(date_format(now(),’%m%d’)) ;
— 48、查詢下周過生日的學生
select * from student
where week(date_format(s_birth,’%m%d’))=week(date_format(date_add(now(),interval 7-dayofweek(now())+1 day),’%m%d’));
— 49、查詢本月過生日的學生
select * from student where date_format(s_birth,’%m’) = date_format(now(),’%m’)
— 50、查詢下月過生日的學生
select * from student where date_format(s_birth,’%m’) = date_format(date_add(now(),interval 1 month),’%m’)
mysql數據庫學生成績查詢問題
mysql的索引分成:primary key, unique, index, fulltext index。 primary key是主鍵, unique是唯一索引, index是普通的索引。fulltext index是全文索引。 索引的作用就像C語言里的指針那樣,直接指向表的一行。
可以對用col_name(N) 對符串的前N個位元組做索引。 text類型和blob類型則必須要對前N個位元組做索引。MYISAM最多支持1000個位元組的索引, INNODB最多支持767位元組的索引。
mysql有一個考試成績表,test(studyid,pid,result,testdate)字段
delete from test a
where not exists(
select 1 from
(
select studyid,pid,max(result) result,testdate from test
group by studyid,pid,testdate
) b
where a.studyid = b.studyid
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/304807.html