希望對(duì)大家面試有幫助,很經(jīng)典的幾道題,大家有興趣的話,歡迎大家加群討論,QQ群號(hào):295383988
問(wèn)題及描述:
1.學(xué)生表
Student(SID,Sname,Sage,Ssex) --SID 學(xué)生編號(hào),Sname 學(xué)生姓名,Sage 出生年月,Ssex 學(xué)生性別
2.課程表
Course(CID,Cname,TID) --CID --課程編號(hào),Cname 課程名稱(chēng),TID 教師編號(hào)
3.教師表
Teacher(TID,Tname) --TID 教師編號(hào),Tname 教師姓名
4.成績(jī)表
SC(SID,CID,score) --SID 學(xué)生編號(hào),CID 課程編號(hào),score 分?jǐn)?shù)
創(chuàng)建測(cè)試數(shù)據(jù)
create table Student(Sid varchar(10),Sname nvarchar(10),Sage datetime,Ssex nvarchar(10))
insert into Student values('01' , N'化懷彬' , '1990-01-01' , N'男')
insert into Student values('02' , N'肖易' , '1990-12-21' , N'男')
insert into Student values('03' , N'韋達(dá)' , '1990-05-20' , N'男')
insert into Student values('04' , N'姜雪' , '1990-08-06' , N'女')
insert into Student values('05' , N'秦蓉' , '1991-12-01' , N'女')
insert into Student values('06' , N'陳丹紅' , '1992-03-01' , N'女')
insert into Student values('07' , N'韋瀚瑜' , '1989-07-01' , N'男')
insert into Student values('08' , N'鐘愛(ài)軍' , '1990-01-20' , N'男')
insert into Student values('09' , N'王小凡' , '1985-02-20' , N'男')
insert into Student values('10' , N'于海洲' , '1989-04-13' , N'男')
insert into Student values('11' , N'姜曉亮' , '1992-11-03' , N'男')
insert into Student values('12' , N'王炳洲' , '1989-04-13' , N'男')
insert into Student values('13' , N'閆衛(wèi)龍' , '1992-11-03' , N'男')
create table Course(Cid varchar(10),Cname nvarchar(10),Tid varchar(10))
insert into Course values('01' , N'語(yǔ)文' , '02')
insert into Course values('02' , N'數(shù)學(xué)' , '01')
insert into Course values('03' , N'英語(yǔ)' , '03')
create table Teacher(Tid varchar(10),Tname nvarchar(10))
insert into Teacher values('01' , N'小徐老師')
insert into Teacher values('02' , N'歡歡老師')
insert into Teacher values('03' , N'小姜老師')
create table SC(Sid varchar(10),Cid varchar(10),score decimal(18,2))
insert into SC values('01' , '01' , 80)
insert into SC values('01' , '02' , 90)
insert into SC values('01' , '03' , 99)
insert into SC values('02' , '01' , 70)
insert into SC values('02' , '02' , 60)
insert into SC values('02' , '03' , 80)
insert into SC values('03' , '01' , 80)
insert into SC values('03' , '02' , 80)
insert into SC values('03' , '03' , 80)
insert into SC values('04' , '01' , 50)
insert into SC values('04' , '02' , 30)
insert into SC values('04' , '03' , 20)
insert into SC values('05' , '01' , 76)
insert into SC values('05' , '02' , 87)
insert into SC values('06' , '01' , 31)
insert into SC values('06' , '03' , 34)
insert into SC values('07' , '02' , 89)
insert into SC values('07' , '03' , 98)
insert into SC values('08' , '01' , 92)
insert into SC values('08' , '02' , 90)
insert into SC values('08' , '03' , 89)
insert into SC values('09' , '01' , 28)
insert into SC values('09' , '02' , 19)
insert into SC values('09' , '03' , 32)
insert into SC values('10' , '01' , 82)
insert into SC values('10' , '02' , 76)
insert into SC values('10' , '03' , 89)
insert into SC values('11' , '01' , 98)
insert into SC values('11' , '02' , 83)
insert into SC values('11' , '03' , 99)
insert into SC values('12' , '01' , 82)
insert into SC values('12' , '02' , 80)
insert into SC values('12' , '03' , 83)
insert into SC values('13' , '01' , 80)
insert into SC values('13' , '02' , 83)
insert into SC values('13' , '03' , 82)
go
1、查詢"01"課程比"02"課程成績(jī)高的學(xué)生的信息及課程分?jǐn)?shù)
1.1车柠、查詢同時(shí)存在"01"課程和"02"課程的情況
select a.* , b.score [課程'01'的分?jǐn)?shù)],c.score [課程'02'的分?jǐn)?shù)] from Student a , SC b , SC c where a.SID = b.SID and a.SID = c.SID and b.CID = '01' and c.CID = '02' and b.score > c.score
1.2剔氏、查詢同時(shí)存在"01"課程和"02"課程的情況和存在"01"課程但可能不存在"02"課程的情況(不存在時(shí)顯示為null)(以下存在相同內(nèi)容時(shí)不再解釋)
select a.* , b.score [課程"01"的分?jǐn)?shù)],c.score [課程"02"的分?jǐn)?shù)] from Student a left join SC b on a.SID = b.SID and b.CID = '01' left join SC c on a.SID = c.SID and c.CID = '02' where b.score > isnull(c.score,0)
2塑猖、查詢"01"課程比"02"課程成績(jī)低的學(xué)生的信息及課程分?jǐn)?shù)
2.1、查詢同時(shí)存在"01"課程和"02"課程的情況
select a.* , b.score [課程'01'的分?jǐn)?shù)],c.score [課程'02'的分?jǐn)?shù)] from Student a , SC b , SC c where a.SID = b.SID and a.SID = c.SID and b.CID = '01' and c.CID = '02' and b.score < c.score
2.2谈跛、查詢同時(shí)存在"01"課程和"02"課程的情況和不存在"01"課程但存在"02"課程的情況
select a.* , b.score [課程"01"的分?jǐn)?shù)],c.score [課程"02"的分?jǐn)?shù)] from Student a left join SC b on a.SID = b.SID and b.CID = '01' left join SC c on a.SID = c.SID and c.CID = '02' where isnull(b.score,0) < c.score
3羊苟、查詢平均成績(jī)大于等于60分的同學(xué)的學(xué)生編號(hào)和學(xué)生姓名和平均成績(jī)
select a.SID , a.Sname , cast(avg(b.score) as decimal(18,2)) avg_score from Student a , sc b where a.SID = b.SID group by a.SID , a.Sname having cast(avg(b.score) as decimal(18,2)) >= 60 order by a.SID
4、查詢平均成績(jī)小于60分的同學(xué)的學(xué)生編號(hào)和學(xué)生姓名和平均成績(jī)
4.1感憾、查詢?cè)趕c表存在成績(jī)的學(xué)生信息的SQL語(yǔ)句蜡励。
select a.SID , a.Sname , cast(avg(b.score) as decimal(18,2)) avg_score from Student a , sc b where a.SID = b.SID group by a.SID , a.Sname having cast(avg(b.score) as decimal(18,2)) < 60 order by a.SID
4.2、查詢?cè)趕c表中不存在成績(jī)的學(xué)生信息的SQL語(yǔ)句阻桅。
select a.SID , a.Sname , isnull(cast(avg(b.score) as decimal(18,2)),0) avg_score from Student a left join sc b on a.SID = b.SID group by a.SID , a.Sname having isnull(cast(avg(b.score) as decimal(18,2)),0) < 60 order by a.SID
5凉倚、查詢所有同學(xué)的學(xué)生編號(hào)、學(xué)生姓名嫂沉、選課總數(shù)稽寒、所有課程的總成績(jī)
5.1、查詢所有有成績(jī)的SQL趟章。
select a.SID [學(xué)生編號(hào)], a.Sname [學(xué)生姓名], count(b.CID) 選課總數(shù), sum(score) [所有課程的總成績(jī)] from Student a , SC b where a.SID = b.SID group by a.SID,a.Sname order by a.SID --5.2瓦胎、查詢所有(包括有成績(jī)和無(wú)成績(jī))的SQL。
select a.SID [學(xué)生編號(hào)], a.Sname [學(xué)生姓名], count(b.CID) 選課總數(shù), sum(score) [所有課程的總成績(jī)] from Student a left join SC b on a.SID = b.SID group by a.SID,a.Sname order by a.SID
6尤揣、查詢"李"姓老師的數(shù)量
--方法1
select count(Tname) ["李"姓老師的數(shù)量] from Teacher where Tname like N'李%'
--方法2
select count(Tname) ["李"姓老師的數(shù)量] from Teacher where left(Tname,1) = N'李' /* "李"姓老師的數(shù)量 ----------- 1 */
7搔啊、查詢學(xué)過(guò)"張三"老師授課的同學(xué)的信息
select distinct Student.* from Student , SC , Course , Teacher where Student.SID = SC.SID and SC.CID = Course.CID and Course.TID = Teacher.TID and Teacher.Tname = N'張三' order by Student.SID
8、查詢沒(méi)學(xué)過(guò)"張三"老師授課的同學(xué)的信息
select m.* from Student m where SID not in (select distinct SC.SID from SC , Course , Teacher where SC.CID = Course.CID and Course.TID = Teacher.TID and Teacher.Tname = N'張三') order by m.SID
9北戏、查詢學(xué)過(guò)編號(hào)為"01"并且也學(xué)過(guò)編號(hào)為"02"的課程的同學(xué)的信息
--方法1
select Student.* from Student , SC where Student.SID = SC.SID and SC.CID = '01' and exists (Select 1 from SC SC_2 where SC_2.SID = SC.SID and SC_2.CID = '02') order by Student.SID
--方法2
select Student.* from Student , SC where Student.SID = SC.SID and SC.CID = '02' and exists (Select 1 from SC SC_2 where SC_2.SID = SC.SID and SC_2.CID = '01') order by Student.SID
--方法3
select m.* from Student m where SID in ( select SID from ( select distinct SID from SC where CID = '01' union all select distinct SID from SC where CID = '02' ) t group by SID having count(1) = 2 ) order by m.SID
10负芋、查詢學(xué)過(guò)編號(hào)為"01"但是沒(méi)有學(xué)過(guò)編號(hào)為"02"的課程的同學(xué)的信息
--方法1
select Student.* from Student , SC where Student.SID = SC.SID and SC.CID = '01' and not exists (Select 1 from SC SC_2 where SC_2.SID = SC.SID and SC_2.CID = '02') order by Student.SID
--方法2 select Student.* from Student , SC where Student.SID = SC.SID and SC.CID = '01' and Student.SID not in (Select SC_2.SID from SC SC_2 where SC_2.SID = SC.SID and SC_2.CID = '02') order by Student.SID
11、查詢沒(méi)有學(xué)全所有課程的同學(xué)的信息
11.1嗜愈、
select Student.* from Student , SC where Student.SID = SC.SID group by Student.SID , Student.Sname , Student.Sage , Student.Ssex having count(CID) < (select count(CID) from Course)
11.2
select Student.* from Student left join SC on Student.SID = SC.SID group by Student.SID , Student.Sname , Student.Sage , Student.Ssex having count(CID) < (select count(CID) from Course)
12旧蛾、查詢至少有一門(mén)課與學(xué)號(hào)為"01"的同學(xué)所學(xué)相同的同學(xué)的信息
select distinct Student.* from Student , SC where Student.SID = SC.SID and SC.CID in (select CID from SC where SID = '01') and Student.SID <> '01'
13、查詢和"01"號(hào)的同學(xué)學(xué)習(xí)的課程完全相同的其他同學(xué)的信息
select Student.* from Student where SID in (select distinct SC.SID from SC where SID <> '01' and SC.CID in (select distinct CID from SC where SID = '01') group by SC.SID having count(1) = (select count(1) from SC where SID='01'))
14蠕嫁、查詢沒(méi)學(xué)過(guò)"張三"老師講授的任一門(mén)課程的學(xué)生姓名
select student.* from student where student.SID not in (select distinct sc.SID from sc , course , teacher where sc.CID = course.CID and course.TID = teacher.TID and teacher.tname = N'張三') order by student.SID
15锨天、查詢兩門(mén)及其以上不及格課程的同學(xué)的學(xué)號(hào),姓名及其平均成績(jī)
select student.SID , student.sname , cast(avg(score) as decimal(18,2)) avg_score from student , sc where student.SID = SC.SID and student.SID in (select SID from SC where score < 60 group by SID having count(1) >= 2) group by student.SID , student.sname
16剃毒、檢索"01"課程分?jǐn)?shù)小于60病袄,按分?jǐn)?shù)降序排列的學(xué)生信息
select student.* , sc.CID , sc.score from student , sc where student.SID = SC.SID and sc.score < 60 and sc.CID = '01' order by sc.score desc
17、按平均成績(jī)從高到低顯示所有學(xué)生的所有課程的成績(jī)以及平均成績(jī)
17.1 靜態(tài)
select a.SID 學(xué)生編號(hào) , a.Sname 學(xué)生姓名 , max(case c.Cname when N'語(yǔ)文' then b.score else null end) [語(yǔ)文], max(case c.Cname when N'數(shù)學(xué)' then b.score else null end) [數(shù)學(xué)], max(case c.Cname when N'英語(yǔ)' then b.score else null end) [英語(yǔ)], cast(avg(b.score) as decimal(18,2)) 平均分 from Student a left join SC b on a.SID = b.SID left join Course c on b.CID = c.CID group by a.SID , a.Sname order by 平均分 desc
17.2 動(dòng)態(tài)
declare @sql nvarchar(4000) set @sql = 'select a.SID ' + N'學(xué)生編號(hào)' + ' , a.Sname ' + N'學(xué)生姓名' select @sql = @sql + ',max(case c.Cname when N'''+Cname+''' then b.score else null end) ['+Cname+']' from (select distinct Cname from Course) as t set @sql = @sql + ' , cast(avg(b.score) as decimal(18,2)) ' + N'平均分' + ' from Student a left join SC b on a.SID = b.SID left join Course c on b.CID = c.CID group by a.SID , a.Sname order by ' + N'平均分' + ' desc' exec(@sql)