MySQL查询面试题
2019獨角獸企業重金招聘Python工程師標準>>>
MySQL查詢面試題
MySQL查詢面試題【第一部分】
[sql]?view plain?copy
Student(S#,Sname,Sage,Ssex)?學生表??
Course(C#,Cname,T#)?課程表??
SC(S#,C#,score)?成績表??
Teacher(T#,Tname)?教師表???
--建表:??
CREATE?TABLE?Student??
(??
S#??int?identity(1,1)?primary?key,,??
Sname?varchar(20),??
Sage??int,??
Ssex?varchar2(2)??
)??
???
CREATE?TABLE?Course??
(??
C#??int?identity(1,1)?primary?key,,??
Cname?varchar(255),??
T#?int??
)??
???
CREATE?TABLE?SC??
(??
S#??int?identity(1,1)?primary?key,,??
C#?int,??
score?varchar(50)??
)??
???
CREATE?TABLE?Teacher??
(??
T#??int?identity(1,1)?primary?key,,??
Tname??varchar(20)??
)??
??
??
--1、查詢“001”課程比“002”課程成績高的所有學生的學號;??
select?a.S#??
from?(select?s#,score?from?SC?where?C#=’001′)?a,??
(select?s#,score?from?SC?where?C#=’002′)?b??
where?a.score>b.score?and?a.s#=b.s#;???
--2、查詢平均成績大于60分的同學的學號和平均成績;??
select?S#,avg(score)??
from?sc??
group?by?S#?having?avg(score)?>60;???
--3、查詢所有同學的學號、姓名、選課數、總成績;??
select?Student.S#,Student.Sname,count(SC.C#),sum(score)??
from?Student?left?Outer?join?SC?on?Student.S#=SC.S#??
group?by?Student.S#,Sname???
--4、查詢姓“李”的老師的個數;??
select?count(distinct(Tname))??
from?Teacher??
where?Tname?like?‘李%’;???
--5、查詢沒學過“葉平”老師課的同學的學號、姓名;??
select?Student.S#,Student.Sname??
from?Student??
where?S#?not?in?(select?distinct(?SC.S#)?from?SC,Course,Teacher?where?SC.C#=Course.C#?and?Teacher.T#=Course.T#?and?Teacher.Tname=’葉平’);???
--6、查詢學過“001”并且也學過編號“002”課程的同學的學號、姓名;??
select?Student.S#,Student.Sname??
from?Student,SC??
where?Student.S#=SC.S#?and?SC.C#=’001′and?exists(?Select?*?from?SC?as?SC_2?where?SC_2.S#=SC.S#?and?SC_2.C#=’002′);??
--7、查詢學過“葉平”老師所教的所有課的同學的學號、姓名;??
select?S#,Sname??
from?Student??
where?S#?in??
(select?S#??
from?SC?,Course?,Teacher??
where?SC.C#=Course.C#?and?Teacher.T#=Course.T#?and?Teacher.Tname=’葉平’?group?by?S#?having?count(SC.C#)=(select?count(C#)?from?Course,Teacher?where?Teacher.T#=Course.T#?and?Tname=’葉平’));???
--8、查詢所有課程成績小于60分的同學的學號、姓名;??
select?S#,Sname??
from?Student??
where?S#?not?in?(select?Student.S#?from?Student,SC?where?S.S#=SC.S#?and?score>60);???
--9、查詢沒有學全所有課的同學的學號、姓名;??
select?Student.S#,Student.Sname??
from?Student,SC??
where?Student.S#=SC.S#??
group?by?Student.S#,Student.Sname?having?count(C#)?<(select?count(C#)?from?Course);???
--10、查詢至少有一門課與學號為“1001”的同學所學相同的同學的學號和姓名;??
select?S#,Sname??
from?Student,SC??
where?Student.S#=SC.S#?and?C#?in?(select?C#?from?SC?where?S#='1001');??
--11、刪除學習“葉平”老師課的SC表記錄;??
Delect?SC??
from?course?,Teacher??
where?Course.C#=SC.C#?and?Course.T#=?Teacher.T#?and?Tname='葉平';???
--12、查詢各科成績最高和最低的分:以如下形式顯示:課程ID,最高分,最低分??
SELECT?L.C#?--課程ID,L.score?最高分,R.score?最低分??
FROM?SC?L?,SC?R??
WHERE?L.C#?=?R.C#??
and??
L.score?=?(SELECT?MAX(IL.score)??
FROM?SC?IL,Student?IM??
WHERE?IL.C#?=?L.C#?and?IM.S#=IL.S#??
GROUP?BY?IL.C#)??
and??
R.Score?=?(SELECT?MIN(IR.score)??
FROM?SC?IR??
WHERE?IR.C#?=?R.C#??
GROUP?BY?IR.C#?);???
--13、查詢學生平均成績及其名次??
SELECT?1+(SELECT?COUNT(?distinct?平均成績)??
FROM?(SELECT?S#,AVG(score)?平均成績??
FROM?SC??
GROUP?BY?S#?)?T1??
WHERE?平均成績?>?T2.平均成績)?名次,?S#?學生學號,平均成績??
FROM?(SELECT?S#,AVG(score)?平均成績?FROM?SC?GROUP?BY?S#?)?T2??
ORDER?BY?平均成績?desc;??
--14、查詢各科成績前三名的記錄:(不考慮成績并列情況)??
SELECT?t1.S#?as?學生ID,t1.C#?as?課程ID,Score?as?分數??
FROM?SC?t1??
WHERE?score?IN?(SELECT?TOP?3?score??
FROM?SC??
WHERE?t1.C#=?C#??
ORDER?BY?score?DESC)??
ORDER?BY?t1.C#;???
--15、查詢每門功成績最好的前兩名??
SELECT?t1.S#?as?學生ID,t1.C#?as?課程ID,Score?as?分數??
FROM?SC?t1??
WHERE?score?IN?(SELECT?TOP?2?score??
FROM?SC??
WHERE?t1.C#=?C#??
ORDER?BY?score?DESC?)??
ORDER?BY?t1.C#;??
--補充:??
--已經知道原表??
year?salary??
——————??
2000?1000??
2001?2000??
2002?3000??
2003?4000??
--解:??
select?b.year,sum(a.salary)??
from?salary?a,salary?b??
where?a.year<=b.year??
group?by?b.year??
order?by?b.year;??
--在面試過程中多次碰到一道SQL查詢的題目,查詢A(ID,Name)表中第31至40條記錄,ID作為主鍵可能是不是連續增長的列,完整的查詢語句如下:??
--方法一:??
select?top?10?*??
from?A??
where?ID?>(select?max(ID)?from?(select?top?30?ID?from?A?order?by?ID?)?T)?order?by?ID??
--方法二:??
select?top?10?*??
from?A??
where?ID?not?In?(select?top?30?ID?from?A?order?by?ID)??
order?by?ID??
?
注意:
我們知道,在ms sql server中或access中,
若要查詢前10條記錄,使用top 10即可,
但在mysql中不支持這個寫法,它用limit 10。?
?
我們可以利用MySQL中SELECT支持的一個子句——LIMIT——來完成這項功能。?
LIMIT可以實現top N查詢,也可以實現M至N(某一段)的記錄查詢,具體語法如下:?
?
?
其中offset為從第幾條(M+1)記錄開始(即下標從0開始),recnum為返回的記錄條數。例:?
?
即意為,從第3條記錄開始的5條記錄。
?
轉載于:https://my.oschina.net/demons99/blog/1924606
總結
以上是生活随笔為你收集整理的MySQL查询面试题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 接入支付宝支付实现
- 下一篇: linux cmake编译源码,linu