1. 程式人生 > >資料庫面試題 ,無聊整一下

資料庫面試題 ,無聊整一下

資料庫試題
1.現有學生、課程、成績、教師四張表。包含以下資訊:
Student(S#,Sname,Sage,Ssex)學生表。
S#:學號;Sname:學生姓名;Sage:學生年齡;Ssex:學生性別。
Course(C#,Cname,T#)課程表。
C#:課程編號;Cname:課程名稱;T#:教師編號。
SC(S#,C#,score)成績表。
S#:學號;C#:課程編號;score:成績。
Teacher(T#,Tname)教室表。
T#:教師編號;Tname:教師名字。
完成以下題目:

1)查詢“111”課程比“112”課程成績高的所有學生的學號;
2)查詢平均成績大於60分的同學的學號和平均成績;
3)查詢姓“李”的老師的個數;
4)查詢各科成績最高分和最低分:以如下形式顯示:課程ID,最高分,最低分。
5)刪除‘2’同學的‘111’課程的成績。
 

這邊我沒有那麼全去建表, 以下是剛才在大概7-8分鐘內,以最快速的想到啥方法就去用啥方法解決上面的問題。

 首先1)  我看到題目,先想到這個用臨時表,一張 111的, 一張112的,再通過學號關聯起來查詢。

所以,有了以下的程式碼思路:

select 學生表.學生號 ,成績表.成績 from  學生表,成績表,課程表 where 三表各種等值關聯 and 課程識別號=‘111’; 

select 學生表.學生號 ,成績表.成績 from  學生表,成績表,課程表 where 三表各種等值關聯 and 課程識別號=‘112’;

然後同時作為臨時表,

select 學生表.學生號 from (select 學生表.學生號 ,成績表.成績 from  學生表,成績表,課程表 where 三表各種等值關聯 and 課程識別號=‘111’)a,(select 學生表.學生號 ,成績表.成績 from  學生表,成績表,課程表 where 三表各種等值關聯 and 課程識別號=‘112’)b where a.學生號=b.學生號 and a.score>b.score;

我後面補了2個表,給後面幾題,這樣為了大家看思路更清晰,

學生表:

成績表:

不要在意這些表的欄位名什麼的,單純為了配合講解思路。

好了2)一看到題目裡面的‘和’字,我第一時間還是想到分層解題,也就是繼續用臨時表。

所以有了以下程式碼:

先把平均成績,學生號,計算出來,

SELECT score.stuid,avg(score) as tlscore from world.score, student where student.stuid=score.stuid group by score.stuid

然後當作臨時表組合下,

select stuid,tlscore from(SELECT score.stuid,avg(score) as tlscore from world.score, student where student.stuid=score.stuid group by score.stuid)a where tlscore>60;

3)這個簡單寫,模糊查詢,姓為前,後面模糊

我查的姓張的,

SELECT count(*) FROM world.student where name like '張%'

4)這麼單純考的就是max,min,

select subname ,max(score),min(score) from score  group by subname

我的表裡面沒建課程表和成績表關聯,直接用的課程名,意思理會就行,多個關聯而已。

5)這個有點意思,字面上說是刪除某個課程成績, 但是其他記錄應該不刪除,那我這用update了,

update  score set score=null where subname='pe' and stuid='3'

好了,今天無聊看別人部落格看的的什麼公司面試題,就跟著做了下。 就這樣吧。

最後 mysql查詢語句實現分頁查詢, 翻頁。

MySQL資料庫實現分頁查詢的SQL語句寫法!

一:分頁需求:

客戶端通過傳遞start(頁碼),limit(每頁顯示的條數)兩個引數去分頁查詢資料庫表中的資料,那我們知道MySql資料庫提供了分頁的函式limit m,n,但是該函式的用法和我們的需求不一樣,所以就需要我們根據實際情況去改寫適合我們自己的分頁語句,具體的分析如下:

比如:

查詢第1條到第10條的資料的sql是:select * from table limit 0,10;   ->對應我們的需求就是查詢第一頁的資料:select * from table limit (1-1)*10,10;

查詢第10條到第20條的資料的sql是:select * from table limit 10,20;  ->對應我們的需求就是查詢第二頁的資料:select * from table limit (2-1)*10,10;

查詢第20條到第30條的資料的sql是:select * from table limit 20,30;  ->對應我們的需求就是查詢第三頁的資料:select * from table limit (3-1)*10,10;

二:通過上面的分析,可以得出符合我們自己需求的分頁sql格式是:

select * from table limit (start-1)*limit,limit; 其中start是頁碼,limit是每頁顯示的條數。

這個start limit,後面結合前端頁面傳過來給後端,後端給mysql呼叫就行。 思路是這樣就好。 實際開發,前後端都有外掛或者別人寫好的程式碼, 分頁很簡單的。