面接を経験したプログラマは、面接プロセス中に面接官があらゆる種類の奇妙な質問をする可能性があることを知っていますが、それらは常に同じです。特定のジョブの基本的な操作手順やコードの記述方法などのポイントに加えて、この記事では最も古典的なデータベース クエリの問題について説明します。
基本的なテーブル構造:
Teacher(tno,tname) Teacher テーブル
student(sno,sname,sage, ssex) 学生テーブル
course(cno,cname,tno)コーステーブル
sc(sno,cno,score)成績テーブル
NO.1 クエリコースコース 2 の成績よりも 1 の成績が高い生徒全員の生徒数
select a.sno from(select sno,score from sc where cno=1) a,(select sno,score from sc where cno=2) bwhere a.score>b.score and a.sno=b.sno
NO.2 平均成績が 60 点を超える生徒の生徒数と平均成績を問い合わせます
select a.sno as "学号", avg(a.score) as "平均成绩" from(select sno,score from sc) a group by sno having avg(a.score)>60
NO.2 すべての生徒の学籍番号、名前、履修科目数、および合計成績を照会します。
select a.sno as 学号, b.sname as 姓名,count(a.cno) as 选课数, sum(a.score) as 总成绩from sc a, student bwhere a.sno = b.snogroup by a.sno, b.sname
または:
selectstudent.sno as 学号, student.sname as 姓名, count(sc.cno) as 选课数, sum(score) as 总成绩from student left Outer join sc on student.sno = sc.snogroup by student.sno, sname
NO.3 姓が「Zhang」である教師の数を照会します。 ”
selectcount(distinct(tname)) from teacher where tname like '张%‘
または :
select tname as "姓名", count(distinct(tname)) as "人数" from teacher where tname like'张%'group by tname
NO.4 「Zhang San」のクラスを学習していない学生の学生番号と名前を問い合わせます
select student.sno,student.sname from student where sno not in (select distinct(sc.sno) from sc,course,teacher where sc.cno=course.cno and teacher.tno=course.tno and teacher.tname='张三')
NO.5コース 1 とコース 2 の両方を学習した学生を照会します。 学生 ID、名前
select sno, sname from studentwhere sno in (select sno from sc where sc.cno = 1)and sno in (select sno from sc where sc.cno = 2)
または:
selectc.sno, c.sname from(select sno from sc where sc.cno = 1) a,(select sno from sc where sc.cno = 2) b,student cwhere a.sno = b.sno and a.sno = c.sno
または:
select student.sno,student.sname from student,sc where student.sno=sc.sno and sc.cno=1and exists( select * from sc as sc_2 where sc_2.sno=sc.sno and sc_2.cno=2)
NO.6 すべての学生 ID を照会します。 「Li Si」が教えたすべてのコースを学習した学生、名前
select a.sno, a.sname from student a, sc bwhere a.sno = b.sno and b.cno in(select c.cno from course c, teacher d where c.tno = d.tno and d.tname = '李四')
または:
select a.sno, a.sname from student a, sc b,(select c.cno from course c, teacher d where c.tno = d.tno and d.tname = '李四') ewhere a.sno = b.sno and b.cno = e.cno
NO.7 コース番号 1 の成績が高いすべての学生の学生番号と名前をクエリします。コース番号 2 の生徒よりも
<p style="font-family: "Microsoft Yahei", "Hiragino Sans GB", Helvetica, "Helvetica Neue", 微软雅黑, Tahoma, Arial, sans-serif; white-space: normal;">select a.sno, a.sname from student a,</p><p style="font-family: "Microsoft Yahei", "Hiragino Sans GB", Helvetica, "Helvetica Neue", 微软雅黑, Tahoma, Arial, sans-serif; white-space: normal;">(select sno, score from sc where cno = 1) b,</p><p style="font-family: "Microsoft Yahei", "Hiragino Sans GB", Helvetica, "Helvetica Neue", 微软雅黑, Tahoma, Arial, sans-serif; white-space: normal;">(select sno, score from sc where cno = 2) c</p><p style="font-family: "Microsoft Yahei", "Hiragino Sans GB", Helvetica, "Helvetica Neue", 微软雅黑, Tahoma, Arial, sans-serif; white-space: normal;">where b.score > c.score and b.sno = c.sno and a.sno = b.sno<br/></p>
NO.8 成績が 60 点未満のすべての生徒の生徒番号と名前をクエリします
select sno,sname from studentwhere sno not in (select distinct sno from sc where score > 60)
NO。 9 少なくとも 1 つのコースと学生番号 1 を使用して、学生が受講したコースをクエリします。 同じクラスメートの学生番号と名前
select distinct a.sno, a.snamefrom student a, sc bwhere a.sno <> 1 and a.sno=b.sno andb.cno in (select cno from sc where sno = 1)
または:
select s.sno,s.sname from student s,(select sc.sno from scwhere sc.cno in (select sc1.cno from sc sc1 where sc1.sno=1)and sc.sno<>1group by sc.sno)r1where r1.sno=s.sno
上記は、データベース関連の仕事の面接でよく遭遇する可能性のある質問です。急いで集めてください。立ち上がってよく見てください。
【おすすめコース: MYSQL 学習ビデオ 】
以上がJava のインタビューで頻繁に現れるデータベース クエリの質問の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。