之前因為面試中吃了很多sql 語法的虧了,決定真的要把這個玩會了,之前確實一直因為使用的都是hibernate框架,對資料庫原生sql的操作太少了,所以現在對基本的查詢方式特別陌生。看到這套題目之後我還是覺得挺好的,最好是自己親自寫,不會的可以先看一下資料,了解基本的sql 92 與 sql 99語法以及資料庫分組和組函式之後再開始做題。如果一上來就直接看我的步驟和答案,可能沒效果,因為你可能過兩天就還給我了。好了,不說那麼多了,直接上菜吧:
1、教師號 星期號 是否有課
1 2 有
1 3 有
2 1 有
3 2 有`
1 2 有
寫一條sql語句讓你變為這樣的表
教師號 星期一 星期二 星期三
1 2 1
2 1
3 1
解析步驟:首先建表,這裡是我建的表:
然後也可看到我圖中後面的步驟(以teacher_id列進行公升序排序),其實mysql自動就是公升序排列。再對比題目要求,我們還需要對calendar列進行操作,對相同數值的行進行count(*)操作,但是要注意的是這個count操作是在我們現有執行上面這樣操作之後的資料表,也就是要用到子查詢。所以接下來執行如下(
這裡只是對calendar進行count操作):
仔細看這張表發現在calendar=2時總共有3節課,但是顯示的全是teacher_id為1的老師,顯然這個是錯誤的。這是因為我們需要的結果是:
哪個老師
在哪一天
有幾節課,而上面只有引數哪一天而忽略了哪個老師這個條件,所以這裡對後面group by新增乙個條件:
這個看起來差不多了,但是看起來還是亂糟糟的,感覺還是以老師(teacher_id)來排序比較好,所以這裡再新增乙個條件:
嗯!這個看起來還不錯的樣子。我覺得這個應該也是答案吧。
因為昨天晚上想著第二道題都到兩點了,所以沒繼續寫下去,今天補充上來。 2、
兩個表情況
表名:wu_plan
id plan model corp_code plannum prixis
1 00001 exx22 nokia 2000 0
2 00002 lc001 sony 3000 0
表名:wu_bom
id plan pact amount
1 00001 aa1 300
2 00001 aa2 200
3 00002 bb1 500
4 00002 bb2 800
5 00002 bb3 400
查詢這兩個表中plan唯一,每乙個plan中,amount最少的,plannum大於prixis的記錄
結果是:
id plan model corp_code plannum prixis pact amount
1 00001 exx22 nokia 2000 0 a2 200
2 00002 lc001 sony 3000 0 bb3 400
select first row in each group by group
解題步驟:要查詢amount最少的,肯定要用到sql的min函式了,然後我們現不看wu_plan,直接對wu_bom表進行操作:
mysql> select min(b.amount) as min_amount, b.plan from wu_bom b group by b.plan;
結果如下圖:
這裡可能有些人有點不理解為什麼不直接使用min(b.amount)後面要加上乙個別名(min_amount)呢?因為這個min_amount在後面要作為我們與表wu_plan比較的根據,如果不設定別名,列名寫起來太麻煩了。那麼由上面sql 生成了每一組plan中的最小值,但是只有這麼乙個最小值還是不行的啊,因為題目的條件是每個wu_plan表中的最小資料,我們現在只是wu_bom表啊,那麼這時候需要進行:
右連線+子查詢。
很多人可能會問為什麼是這樣的操作呢?因為我們現在已經得到了上圖這樣的乙個查詢檢視,條件也已經知道了(wu_plan中所有plan值為『00001』的列行與『00002』的行),這不就是一次右查詢的事嘛,我知道這裡我說的很不清楚,但是左右查詢網上有很多教程的,不熟悉的朋友還是好好看看吧。
select p.*,y.min_amount from wu_plan p right join (select min(b.amount) as min_amount, b.plan from wu_bom b group by b.plan) y on p.plan = y.plan and p.plannum > p.prixis;
真相就出來了吧。結果如下圖:
當然有些同學又會說為什麼我在這個表中看到的全是wu_plan表資訊,我要想增加wu_bom表資訊(比如說增加pact列)怎麼辦,直接在子查詢(sql語句中括號內增加你想要在結果看到的列)增加該列到縣市結果中就可了。
未完待續!
資料庫常見面試題
1.事務的四大特性acid 1 原子性 事務包含的操作要麼全部成功,要麼全部回退。2 一致性 事務開始前和開始後,資料庫的完整性沒有被破壞。舉例 轉賬 3 隔離性 對資料庫進行併發操作時,事務不能被其他事務干擾。4 永續性 事務一旦提交,對資料庫的影響是永久的。2.事務的併發 包含3類資料讀和2類資...
vue的一些常見面試題
面試也告了乙個段落,總結一下我面試的心得 以下題目是常見的問題,由淺入深。vue的rou ter和 router和 router 和route的區別 vue 路由 vue中v show 和v if的區別 樣式穿透 vue的八種元件通訊方式 vue的slot插槽 vue 中 emit的使用 vue n...
資料庫方面常見面試題
1 說出資料連線池的工作機制是什麼 j2ee 伺服器啟動時會建立一定數量的池連線,並一直維持不少於此數目的池連線。客戶端程式需要連線時,池驅動程式會返回乙個未使用的池連線並將其表記為忙。如果當前沒有空閒連線,池驅動程式就新建一定數量的連線,新建連線的數量有配置引數決定。當使用的池連線呼叫完成後,池驅...