數(shù)據(jù)庫面試常見問題
數(shù)據(jù)庫面試常見問題
數(shù)據(jù)庫面試常見問題有哪些呢?你想知道嗎?下面是小編整理的數(shù)據(jù)庫面試常見問題,歡迎大家閱讀!
1、SQL的表連接方式有哪些?
SQL中連接按結(jié)果集分為:內(nèi)連接,外連接,交叉連接
內(nèi)連接:inner join on,兩表都滿足的組合。內(nèi)連接分為等值連接,不等連接,自然連接。
等值連接:兩表中相同的列都會出現(xiàn)在結(jié)果集中。
自然連接:兩表中具體相同列表的列會合并為同一列出現(xiàn)在結(jié)果集中。
外連接:分為左(外)連接,右(外)連接,全連接
左(外)連接:A left (outer) join B,以A表為基礎(chǔ),A表的全部數(shù)據(jù),B表有的組合,沒有的為null。
右(外)連接:A right(outer) join B,以B表為基礎(chǔ),B表的全部數(shù)據(jù),A表有的組合,沒有的位null。
全連接:A full (outer) join 兩表相同的組合在一起,A表有,B表沒有的數(shù)據(jù)(顯示為null),同樣B表有,A表沒有的顯示為null。
交叉連接:cross join,就是笛卡爾乘積。
2、三范式
1NF:表中的字段都是單一屬性,不再可分。
2NF:在1NF的基礎(chǔ)上,表中所有的非主屬性都必須完全依賴于任意一組候選鍵,不能僅依賴于候選鍵中的某個屬性。
3NF:在2NF的基礎(chǔ)上,表中所有的屬性都不依賴其他非主屬性。
簡單的說就是:1NF表示每個屬性不可分割,2NF表示非主屬性不存在對主鍵的部分依賴,3NF表示不存在非主屬性對主鍵的依賴傳遞。
3、表的操作
表的創(chuàng)建:create table 表名 (列名1 類型 約束,列2 類型 約束…)
表的刪除: 表名
表的更改(結(jié)構(gòu)的更改,不是記錄的更新):alter table 表名 add|drop 列名|約
束名
插入記錄: into 表名…values…
更新記錄:表名 set 列名=值 where 條件
刪除記錄: from 表名 where 條件
4、數(shù)據(jù)的完整性
數(shù)據(jù)完整性指的是存儲在數(shù)據(jù)庫中的數(shù)據(jù)的一致性和準(zhǔn)確性。
完整性分類:
。1)實體完整性:主鍵值必須唯一且非空。(主鍵約束)
(2) 引用完整性(也叫參照完整性):外鍵要么為空,要么引用主表中存在的記錄。(外鍵約束)。
(3)用戶自定義完整性:針對某一具體關(guān)系數(shù)據(jù)庫中的約束條件。
5、SQL的查詢優(yōu)化
(1)從表連接的角度優(yōu)化:盡量使用內(nèi)連接,因為內(nèi)連接是兩表都滿足的行的組合,而外連接是以其中一個表的全部為基準(zhǔn)。
(2)盡量使用存儲過程代替臨時寫SQL語句:因為存儲過程是預(yù)先編譯好的SQL語句的集合,這樣可以減少編譯時間。
。3)從索引的角度優(yōu)化:對那些常用的查詢字段簡歷索引,這樣查詢時值進(jìn)行索引掃描,不讀取數(shù)據(jù)塊。
。4)還有一些常用的'select優(yōu)化技巧:
。5)A.只查詢那些需要訪問的字段,來代替select*
B、將過濾記錄越多的where語句向前移:在一個SQL語句中,如果一個where條件過濾的數(shù)據(jù)庫記錄越多,定位越準(zhǔn)確,則該where條件越應(yīng)該前移。
6、索引的作用,聚集索引與非聚集索引的區(qū)別
索引是一個數(shù)據(jù)庫對象,使用索引,可以是數(shù)據(jù)庫程序無須對整個數(shù)據(jù)進(jìn)行掃描,就可以在其中找到目標(biāo)數(shù)據(jù),從而提高查找效率。索引的底層采用的是B樹。
聚集索引:根據(jù)記錄的key再表中排序數(shù)據(jù)行。
非聚集索引:獨(dú)立于記錄的結(jié)構(gòu),非聚集所以包含的key,且每個鍵值項都有指向該簡直的數(shù)據(jù)行的指針。
聚集索引與非聚集索引的區(qū)別:
。1)聚集索引的物理存儲按索引排序,非聚集所以的物理存儲不按索引排序。
。2) 聚集索引插入,更新數(shù)據(jù)的速度比非聚集索引慢,單查詢速度更快。
。3) 聚集索引的葉級結(jié)點保存的是時間的數(shù)據(jù)項,而非聚集結(jié)點的葉級結(jié)點保存的是指向數(shù)據(jù)項的指針。
。4)一個表只能有一個聚集索引(因為只有一種排序方式),但可以有多個非聚集索引。
7、存儲過程與函數(shù)的區(qū)別
。1)函數(shù)有返回值,存儲過程沒有返回值。
(2) 因為存儲過程沒有返回值,所以不能將存儲過程的執(zhí)行結(jié)果賦值給變量;函數(shù)有返回值類型,調(diào)用函數(shù)時,可以將函數(shù)的執(zhí)行結(jié)果賦值給變量。也就是說,函數(shù)可以在select語句中使用,而存儲過程則不能。
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 yyfangchan@163.com (舉報時請帶上具體的網(wǎng)址) 舉報,一經(jīng)查實,本站將立刻刪除