<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          金三銀四面試季:數(shù)據(jù)庫(kù)SqlServer筆試題 趕快收藏

          共 19223字,需瀏覽 39分鐘

           ·

          2021-03-22 17:29

          一、數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí)(通用)篇

          1.說(shuō)說(shuō)主鍵、外鍵、超鍵、候選鍵

          2.為什么用自增列作為主鍵?

          3.觸發(fā)器的作用是什么?

          4.什么是存儲(chǔ)過(guò)程?用什么來(lái)調(diào)用?

          5.說(shuō)說(shuō)存儲(chǔ)過(guò)程的優(yōu)缺點(diǎn)?

          6.說(shuō)說(shuō)存儲(chǔ)過(guò)程與函數(shù)的區(qū)別

          7.什么叫視圖?游標(biāo)是什么?

          8.視圖的優(yōu)缺點(diǎn)有哪些?

          9.說(shuō)說(shuō)drop、truncate、 delete區(qū)別

          10.什么是臨時(shí)表,臨時(shí)表什么時(shí)候刪除?

          11.說(shuō)說(shuō)非關(guān)系型數(shù)據(jù)庫(kù)和關(guān)系型數(shù)據(jù)庫(kù)區(qū)別,優(yōu)勢(shì)比較?

          12.什么是數(shù)據(jù)庫(kù)范式,根據(jù)某個(gè)場(chǎng)景設(shè)計(jì)數(shù)據(jù)表?

          13.什么是 內(nèi)連接、外連接、交叉連接、笛卡爾積等?

          14.varchar和char的使用場(chǎng)景?

          15.SQL語(yǔ)言分類(lèi)

          16.說(shuō)說(shuō)like %和-的區(qū)別

          17.說(shuō)說(shuō)count(*)、count(1)、count(column)的區(qū)別

          18.什么是最左前綴原則?

          19.什么是索引?

          20.索引的作用?它的優(yōu)點(diǎn)缺點(diǎn)是什么?

          21.索引的優(yōu)缺點(diǎn)有哪些?

          22.什么樣的字段適合建索引?

          23.說(shuō)說(shuō)聚集索引和非聚集索引區(qū)別?

          二、SqlServer筆試基礎(chǔ)篇

          1.求年齡大于所有女同學(xué)年齡的男學(xué)生姓名和年齡。

          2.求年齡大于女同學(xué)平均年齡的男學(xué)生姓名和年齡。

          3.在 SC 中檢索成績(jī)?yōu)榭罩档膶W(xué)生學(xué)號(hào)和課程號(hào)。

          4.檢索姓名以 WANG 打頭的所有學(xué)生的姓名和年齡。

          5.檢索學(xué)號(hào)比 WANG 同學(xué)大,而年齡比他小的學(xué)生姓名。

          6.統(tǒng)計(jì)每門(mén)課程的學(xué)生選修人數(shù) (超過(guò) 2 人的課程才統(tǒng)計(jì)) 。要求輸出課程號(hào)和選修人數(shù),查詢結(jié)果按

          人數(shù)降序排列,若人數(shù)相同,按課程號(hào)升序排列。

          7.求 LIU 老師所授課程的每門(mén)課程的學(xué)生平均成績(jī)。

          8.求選修 C4 課程的學(xué)生的平均年齡。

          9.統(tǒng)計(jì)有學(xué)生選修的課程門(mén)數(shù)。

          10.在基本表 SC 中修改 4 號(hào)課程的成績(jī),若成績(jī)小于等于 75 分時(shí)提高 5% , 若成績(jī)大于 75 分時(shí)提高

          4% (用兩個(gè) UPDATE 語(yǔ)句實(shí)現(xiàn))。

          11 .把低于總平均成績(jī)的女同學(xué)成績(jī)提高 5% 。

          12 .把選修數(shù)據(jù)庫(kù)原理課不及格的成績(jī)?nèi)臑榭罩怠?/p>

          13.把WANG 同學(xué)的學(xué)習(xí)選課和成績(jī)?nèi)縿h去。

          14 .在基本表 SC 中刪除尚無(wú)成績(jī)的選課元組。

          15 .往基本表 S 中插入一個(gè)學(xué)生元組( ‘ S9’,‘ WU ’,18 )。。

          16.什么是SQL注入式攻擊?

          三、SqlServer筆試高級(jí)篇

          1.什么是內(nèi)存泄漏?

          2.維護(hù)數(shù)據(jù)庫(kù)的完整性和一致性,你喜歡用觸發(fā)器還是自寫(xiě)業(yè)務(wù)邏輯?為什么?

          3.什么是事務(wù)?什么是鎖?

          4.對(duì)一個(gè)投入使用的在線事務(wù)處理表格有過(guò)多索引需要有什么樣的性能考慮?

          6.什么是SQL注入式攻擊?

          7.如何防范SQL注入式攻擊?

          8.你可以用什么來(lái)確保表格里的字段只接受特定范圍里的值?

          公眾號(hào):DotNet開(kāi)發(fā)跳槽

          9.有哪些操作會(huì)使用到TempDB;如果TempDB異常變大,可能的原因是什么,該如何處理;

          10.Index有哪些類(lèi)型,它們的區(qū)別和實(shí)現(xiàn)原理是什么,索引有啥優(yōu)點(diǎn)和缺點(diǎn);如何為SQL語(yǔ)句創(chuàng)建合適的

          索引,索引創(chuàng)建時(shí)有哪些需要,注意的項(xiàng),如何查看你創(chuàng)建的索引是否被使用;如何維護(hù)索引;索引損壞如

          何檢查,怎么修復(fù);T-SQL有更好的索引存在,但是運(yùn)行,時(shí)并沒(méi)有使用該索引,原因可能是什么;

          11.Job信息我們可以通過(guò)哪些表獲?。幌到y(tǒng)正在運(yùn)行的語(yǔ)句可以通過(guò)哪些視圖獲?。蝗绾潍@取某個(gè)T-SQL

          語(yǔ)句的IO、Time等信息;

          ?

          一、數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí)(通用)篇? ? ? ? ? ? ? ? ??

          1.說(shuō)說(shuō)主鍵、外鍵、超鍵、候選鍵? ? ? ? ? ? ? ? ? ? ? ?

          超鍵:在關(guān)系中能唯一標(biāo)識(shí)元組的屬性集稱為關(guān)系模式的超鍵。一個(gè)屬性可以為作為一個(gè)超鍵,多個(gè)屬

          性組合在一起也可以作為一個(gè)超鍵。超鍵包含候選鍵和主鍵。

          候選鍵:是最小超鍵,即沒(méi)有冗余元素的超鍵。

          主鍵:數(shù)據(jù)庫(kù)表中對(duì)儲(chǔ)存數(shù)據(jù)對(duì)象予以唯一和完整標(biāo)識(shí)的數(shù)據(jù)列或?qū)傩缘慕M合。一個(gè)數(shù)據(jù)列只能有一個(gè)

          主鍵,且主鍵的取值不能缺失,即不能為空值(Null)。

          外鍵:在一個(gè)表中存在的另一個(gè)表的主鍵稱此表的外鍵。

          2.為什么用自增列作為主鍵?? ? ? ? ? ? ? ? ? ? ? ? ??

          如果我們定義了主鍵(PRIMARY KEY),那么InnoDB會(huì)選擇主鍵作為聚集索引、

          如果沒(méi)有顯式定義主鍵,則InnoDB會(huì)選擇第一個(gè)不包含有NULL值的唯一索引作為主鍵索引、

          如果也沒(méi)有這樣的唯一索引,則InnoDB會(huì)選擇內(nèi)置6字節(jié)長(zhǎng)的ROWID作為隱含的聚集索引(ROWID隨著

          行記錄的寫(xiě)入而主鍵遞增,這個(gè)ROWID不像ORACLE的ROWID那樣可引用,是隱含的)。

          數(shù)據(jù)記錄本身被存于主索引(一顆B+Tree)的葉子節(jié)點(diǎn)上。這就要求同一個(gè)葉子節(jié)點(diǎn)內(nèi)(大小為一個(gè)內(nèi)

          存頁(yè)或磁盤(pán)頁(yè))的各條數(shù)據(jù)記錄按主鍵順序存放,因此每當(dāng)有一條新的記錄插入時(shí),MySQL會(huì)根據(jù)其主

          鍵將其插入適當(dāng)?shù)墓?jié)點(diǎn)和位置,如果頁(yè)面達(dá)到裝載因子(InnoDB默認(rèn)為15/16),則開(kāi)辟一個(gè)新的頁(yè)

          (節(jié)點(diǎn))

          如果表使用自增主鍵,那么每次插入新的記錄,記錄就會(huì)順序添加到當(dāng)前索引節(jié)點(diǎn)的后續(xù)位置,當(dāng)一頁(yè)

          寫(xiě)滿,就會(huì)自動(dòng)開(kāi)辟一個(gè)新的頁(yè)

          如果使用非自增主鍵(如果身份證號(hào)或?qū)W號(hào)等),由于每次插入主鍵的值近似于隨機(jī),因此每次新記錄

          都要被插到現(xiàn)有索引頁(yè)的中間某個(gè)位置,此時(shí)MySQL不得不為了將新記錄插到合適位置而移動(dòng)數(shù)據(jù),甚

          至目標(biāo)頁(yè)面可能已經(jīng)被回寫(xiě)到磁盤(pán)上而從緩存中清掉,此時(shí)又要從磁盤(pán)上讀回來(lái),這增加了很多開(kāi)銷(xiāo),

          同時(shí)頻繁的移動(dòng)、分頁(yè)操作造成了大量的碎片,得到了不夠緊湊的索引結(jié)構(gòu),后續(xù)不得不通過(guò)

          OPTIMIZE TABLE來(lái)重建表并優(yōu)化填充頁(yè)面。

          3.觸發(fā)器的作用是什么?? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

          觸發(fā)器是一種特殊的存儲(chǔ)過(guò)程,主要是通過(guò)事件來(lái)觸發(fā)而被執(zhí)行的。它可以強(qiáng)化約束,來(lái)維護(hù)數(shù)據(jù)的完

          整性和一致性,可以跟蹤數(shù)據(jù)庫(kù)內(nèi)的操作從而不允許未經(jīng)許可的更新和變化??梢月?lián)級(jí)運(yùn)算。如,某表

          上的觸發(fā)器上包含對(duì)另一個(gè)表的數(shù)據(jù)操作,而該操作又會(huì)導(dǎo)致該表觸發(fā)器被觸發(fā)。

          4.什么是存儲(chǔ)過(guò)程?用什么來(lái)調(diào)用?? ? ? ? ? ? ? ? ? ? ??

          存儲(chǔ)過(guò)程是一個(gè)預(yù)編譯的SQL語(yǔ)句,優(yōu)點(diǎn)是允許模塊化的設(shè)計(jì),就是說(shuō)只需創(chuàng)建一次,以后在該程序中

          就可以調(diào)用多次。如果某次操作需要執(zhí)行多次SQL,使用存儲(chǔ)過(guò)程比單純SQL語(yǔ)句執(zhí)行要快。

          調(diào)用:

          1)可以用一個(gè)命令對(duì)象來(lái)調(diào)用存儲(chǔ)過(guò)程。

          2)可以供外部程序調(diào)用,比如:java程序。

          公眾號(hào):DotNet開(kāi)發(fā)跳槽

          5.說(shuō)說(shuō)存儲(chǔ)過(guò)程的優(yōu)缺點(diǎn)?? ? ? ? ? ? ? ? ? ? ? ? ? ?

          優(yōu)點(diǎn):

          1)存儲(chǔ)過(guò)程是預(yù)編譯過(guò)的,執(zhí)行效率高。

          2)存儲(chǔ)過(guò)程的代碼直接存放于數(shù)據(jù)庫(kù)中,通過(guò)存儲(chǔ)過(guò)程名直接調(diào)用,減少網(wǎng)絡(luò)通訊。

          3)安全性高,執(zhí)行存儲(chǔ)過(guò)程需要有一定權(quán)限的用戶。

          4)存儲(chǔ)過(guò)程可以重復(fù)使用,可減少數(shù)據(jù)庫(kù)開(kāi)發(fā)人員的工作量。

          缺點(diǎn):

          移植性差

          6.說(shuō)說(shuō)存儲(chǔ)過(guò)程與函數(shù)的區(qū)別? ? ? ? ? ? ? ? ? ? ? ? ??

          (1)存儲(chǔ)過(guò)程用戶在數(shù)據(jù)庫(kù)中完成特定操作或者任務(wù)(如插入,刪除等),函數(shù)用于返回特定的數(shù)

          據(jù)。

          (2)存儲(chǔ)過(guò)程聲明用procedure,函數(shù)用function。

          (3)存儲(chǔ)過(guò)程不需要返回類(lèi)型,函數(shù)必須要返回類(lèi)型。

          (4)存儲(chǔ)過(guò)程可作為獨(dú)立的pl-sql執(zhí)行,函數(shù)不能作為獨(dú)立的plsql執(zhí)行,必須作為表達(dá)式的一部分。

          (5)存儲(chǔ)過(guò)程只能通過(guò)out和in/out來(lái)返回值,函數(shù)除了可以使用out,in/out以外,還可以使用return

          返回值。

          (6)sql語(yǔ)句(DML或SELECT)中不可用調(diào)用存儲(chǔ)過(guò)程,而函數(shù)可以。

          7.什么叫視圖?游標(biāo)是什么?? ? ? ? ? ? ? ? ? ? ? ? ??

          視圖:

          是一種虛擬的表,具有和物理表相同的功能??梢詫?duì)視圖進(jìn)行增,改,查,操作,試圖通常是有一個(gè)表

          或者多個(gè)表的行或列的子集。對(duì)視圖的修改會(huì)影響基本表。它使得我們獲取數(shù)據(jù)更容易,相比多表查

          詢。

          游標(biāo):

          是對(duì)查詢出來(lái)的結(jié)果集作為一個(gè)單元來(lái)有效的處理。游標(biāo)可以定在該單元中的特定行,從結(jié)果集的當(dāng)前

          行檢索一行或多行??梢詫?duì)結(jié)果集當(dāng)前行做修改。一般不使用游標(biāo),但是需要逐條處理數(shù)據(jù)的時(shí)候,游

          標(biāo)顯得十分重要。

          8.視圖的優(yōu)缺點(diǎn)有哪些?? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

          優(yōu)點(diǎn):

          1對(duì)數(shù)據(jù)庫(kù)的訪問(wèn),因?yàn)橐晥D可以有選擇性的選取數(shù)據(jù)庫(kù)里的一部分。

          2)用戶通過(guò)簡(jiǎn)單的查詢可以從復(fù)雜查詢中得到結(jié)果。

          3)維護(hù)數(shù)據(jù)的獨(dú)立性,試圖可從多個(gè)表檢索數(shù)據(jù)。

          4)對(duì)于相同的數(shù)據(jù)可產(chǎn)生不同的視圖。

          缺點(diǎn):

          性能:查詢視圖時(shí),必須把視圖的查詢轉(zhuǎn)化成對(duì)基本表的查詢,如果這個(gè)視圖是由一個(gè)復(fù)雜的多表查詢

          所定義,那么,那么就無(wú)法更改數(shù)據(jù)

          9.說(shuō)說(shuō)drop、truncate、 delete區(qū)別? ? ? ? ? ? ? ? ? ??

          最基本:

          1) drop直接刪掉表。

          2) truncate刪除表中數(shù)據(jù),再插入時(shí)自增長(zhǎng)id又從1開(kāi)始。

          3) delete刪除表中數(shù)據(jù),可以加where字句。

          (1) DELETE語(yǔ)句執(zhí)行刪除的過(guò)程是每次從表中刪除一行,并且同時(shí)將該行的刪除操作作為事務(wù)記錄在

          日志中保存以便進(jìn)行進(jìn)行回滾操作。TRUNCATE TABLE 則一次性地從表中刪除所有的數(shù)據(jù)并不把單獨(dú)

          的刪除操作記錄記入日志保存,刪除行是不能恢復(fù)的。并且在刪除的過(guò)程中不會(huì)激活與表有關(guān)的刪除觸

          發(fā)器。執(zhí)行速度快。

          公眾號(hào):DotNet開(kāi)發(fā)跳槽

          (2) 表和索引所占空間。當(dāng)表被TRUNCATE 后,這個(gè)表和索引所占用的空間會(huì)恢復(fù)到初始大小,而

          DELETE操作不會(huì)減少表或索引所占用的空間。drop語(yǔ)句將表所占用的空間全釋放掉。

          (3) 一般而言,drop > truncate > delete

          (4) 應(yīng)用范圍。TRUNCATE 只能對(duì)TABLE;DELETE可以是table和view

          (5) TRUNCATE 和DELETE只刪除數(shù)據(jù),而DROP則刪除整個(gè)表(結(jié)構(gòu)和數(shù)據(jù))。

          (6) truncate與不帶where的delete :只刪除數(shù)據(jù),而不刪除表的結(jié)構(gòu)(定義)drop語(yǔ)句將刪除表的

          結(jié)構(gòu)被依賴的約束(constrain),觸發(fā)器(trigger)索引(index);依賴于該表的存儲(chǔ)過(guò)程/函數(shù)將被保留,

          但其狀態(tài)會(huì)變?yōu)椋篿nvalid。

          (7) delete語(yǔ)句為DML(data maintain Language),這個(gè)操作會(huì)被放到 rollback segment中,事務(wù)提交

          后才生效。如果有相應(yīng)的 tigger,執(zhí)行的時(shí)候?qū)⒈挥|發(fā)。

          (8) truncate、drop是DLL(data define language),操作立即生效,原數(shù)據(jù)不放到 rollback?

          segment中,不能回滾。

          (9) 在沒(méi)有備份情況下,謹(jǐn)慎使用 drop 與 truncate。要?jiǎng)h除部分?jǐn)?shù)據(jù)行采用delete且注意結(jié)合

          where來(lái)約束影響范圍。回滾段要足夠大。要?jiǎng)h除表用drop;若想保留表而將表中數(shù)據(jù)刪除,如果與事

          務(wù)無(wú)關(guān),用truncate即可實(shí)現(xiàn)。如果和事務(wù)有關(guān),或老師想觸發(fā)trigger,還是用delete。

          (10) Truncate table 表名 速度快,而且效率高,因?yàn)??truncate table 在功能上與不帶 WHERE 子句的?

          DELETE 語(yǔ)句相同:二者均刪除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系統(tǒng)

          和事務(wù)日志資源少。DELETE 語(yǔ)句每次刪除一行,并在事務(wù)日志中為所刪除的每行記錄一項(xiàng)。

          TRUNCATE TABLE 通過(guò)釋放存儲(chǔ)表數(shù)據(jù)所用的數(shù)據(jù)頁(yè)來(lái)刪除數(shù)據(jù),并且只在事務(wù)日志中記錄頁(yè)的釋

          放。

          (11) TRUNCATE TABLE 刪除表中的所有行,但表結(jié)構(gòu)及其列、約束、索引等保持不變。新行標(biāo)識(shí)所

          用的計(jì)數(shù)值重置為該列的種子。如果想保留標(biāo)識(shí)計(jì)數(shù)值,請(qǐng)改用 DELETE。如果要?jiǎng)h除表定義及其數(shù)

          據(jù),請(qǐng)使用 DROP TABLE 語(yǔ)句。

          (12) 對(duì)于由 FOREIGN KEY 約束引用的表,不能使用 TRUNCATE TABLE,而應(yīng)使用不帶 WHERE 子

          句的 DELETE 語(yǔ)句。由于 TRUNCATE TABLE 不記錄在日志中,所以它不能激活觸發(fā)器。

          ?

          10.什么是臨時(shí)表,臨時(shí)表什么時(shí)候刪除?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

          臨時(shí)表可以手動(dòng)刪除:

          DROP TEMPORARY TABLE IF EXISTS temp_tb;

          臨時(shí)表只在當(dāng)前連接可見(jiàn),當(dāng)關(guān)閉連接時(shí),MySQL會(huì)自動(dòng)刪除表并釋放所有空間。因此在不同的連接中

          可以創(chuàng)建同名的臨時(shí)表,并且操作屬于本連接的臨時(shí)表。

          創(chuàng)建臨時(shí)表的語(yǔ)法與創(chuàng)建表語(yǔ)法類(lèi)似,不同之處是增加關(guān)鍵字TEMPORARY,

          如:

          ?

          11.說(shuō)說(shuō)非關(guān)系型數(shù)據(jù)庫(kù)和關(guān)系型數(shù)據(jù)庫(kù)區(qū)別,優(yōu)勢(shì)比較?? ? ? ? ? ? ? ? ? ? ?

          非關(guān)系型數(shù)據(jù)庫(kù)的優(yōu)勢(shì):

          性能:NOSQL是基于鍵值對(duì)的,可以想象成表中的主鍵和值的對(duì)應(yīng)關(guān)系,而且不需要經(jīng)過(guò)SQL層的解

          析,所以性能非常高。

          可擴(kuò)展性:同樣也是因?yàn)榛阪I值對(duì),數(shù)據(jù)之間沒(méi)有耦合性,所以非常容易水平擴(kuò)展。

          關(guān)系型數(shù)據(jù)庫(kù)的優(yōu)勢(shì):

          復(fù)雜查詢:可以用SQL語(yǔ)句方便的在一個(gè)表以及多個(gè)表之間做非常復(fù)雜的數(shù)據(jù)查詢。

          CREATE TEMPORARY TABLE tmp_table (

          ? ? ? ? NAME VARCHAR (10) NOT NULL,

          ? ? ? ? time date NOT NULL

          );

          select * from tmp_table;

          公眾號(hào):DotNet開(kāi)發(fā)跳槽

          事務(wù)支持:使得對(duì)于安全性能很高的數(shù)據(jù)訪問(wèn)要求得以實(shí)現(xiàn)。

          其他:

          1.對(duì)于這兩類(lèi)數(shù)據(jù)庫(kù),對(duì)方的優(yōu)勢(shì)就是自己的弱勢(shì),反之亦然。

          2.NOSQL數(shù)據(jù)庫(kù)慢慢開(kāi)始具備SQL數(shù)據(jù)庫(kù)的一些復(fù)雜查詢功能,比如MongoDB。

          3.對(duì)于事務(wù)的支持也可以用一些系統(tǒng)級(jí)的原子操作來(lái)實(shí)現(xiàn)例如樂(lè)觀鎖之類(lèi)的方法來(lái)曲線救國(guó),比如

          Redis set nx。

          ?

          12.什么是數(shù)據(jù)庫(kù)范式,根據(jù)某個(gè)場(chǎng)景設(shè)計(jì)數(shù)據(jù)表?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

          第一范式:(確保每列保持原子性)所有字段值都是不可分解的原子值。

          第一范式是最基本的范式。如果數(shù)據(jù)庫(kù)表中的所有字段值都是不可分解的原子值,就說(shuō)明該數(shù)據(jù)庫(kù)表滿

          足了第一范式。

          第一范式的合理遵循需要根據(jù)系統(tǒng)的實(shí)際需求來(lái)定。比如某些數(shù)據(jù)庫(kù)系統(tǒng)中需要用到“地址”這個(gè)屬性,

          本來(lái)直接將“地址”屬性設(shè)計(jì)成一個(gè)數(shù)據(jù)庫(kù)表的字段就行。但是如果系統(tǒng)經(jīng)常會(huì)訪問(wèn)“地址”屬性中的“城市”

          部分,那么就非要將“地址”這個(gè)屬性重新拆分為省份、城市、詳細(xì)地址等多個(gè)部分進(jìn)行存儲(chǔ),這樣在對(duì)

          地址中某一部分操作的時(shí)候?qū)⒎浅7奖?。這樣設(shè)計(jì)才算滿足了數(shù)據(jù)庫(kù)的第一范式,如下表所示。

          上表所示的用戶信息遵循了第一范式的要求,這樣在對(duì)用戶使用城市進(jìn)行分類(lèi)的時(shí)候就非常方便,也提

          高了數(shù)據(jù)庫(kù)的性能。

          第二范式:(確保表中的每列都和主鍵相關(guān))在一個(gè)數(shù)據(jù)庫(kù)表中,一個(gè)表中只能保存一種數(shù)據(jù),不可以把多

          種數(shù)據(jù)保存在同一張數(shù)據(jù)庫(kù)表中。

          第二范式在第一范式的基礎(chǔ)之上更進(jìn)一層。第二范式需要確保數(shù)據(jù)庫(kù)表中的每一列都和主鍵相關(guān),而不

          能只與主鍵的某一部分相關(guān)(主要針對(duì)聯(lián)合主鍵而言)。也就是說(shuō)在一個(gè)數(shù)據(jù)庫(kù)表中,一個(gè)表中只能保

          存一種數(shù)據(jù),不可以把多種數(shù)據(jù)保存在同一張數(shù)據(jù)庫(kù)表中。

          比如要設(shè)計(jì)一個(gè)訂單信息表,因?yàn)橛唵沃锌赡軙?huì)有多種商品,所以要將訂單編號(hào)和商品編號(hào)作為數(shù)據(jù)庫(kù)

          表的聯(lián)合主鍵。

          第三范式:(確保每列都和主鍵列直接相關(guān),而不是間接相關(guān)) 數(shù)據(jù)表中的每一列數(shù)據(jù)都和主鍵直接相關(guān),

          而不能間接相關(guān)。

          第三范式需要確保數(shù)據(jù)表中的每一列數(shù)據(jù)都和主鍵直接相關(guān),而不能間接相關(guān)。

          比如在設(shè)計(jì)一個(gè)訂單數(shù)據(jù)表的時(shí)候,可以將客戶編號(hào)作為一個(gè)外鍵和訂單表建立相應(yīng)的關(guān)系。而不可以

          在訂單表中添加關(guān)于客戶其它信息(比如姓名、所屬公司等)的字段。

          BCNF:符合3NF,并且,主屬性不依賴于主屬性。

          若關(guān)系模式屬于第二范式,且每個(gè)屬性都不傳遞依賴于鍵碼,則R屬于BC范式。

          通常BC范式的條件有多種等價(jià)的表述:每個(gè)非平凡依賴的左邊必須包含鍵碼;每個(gè)決定因素必須包含鍵

          碼。

          BC范式既檢查非主屬性,又檢查主屬性。當(dāng)只檢查非主屬性時(shí),就成了第三范式。滿足BC范式的關(guān)系

          都必然滿足第三范式。

          還可以這么說(shuō):若一個(gè)關(guān)系達(dá)到了第三范式,并且它只有一個(gè)候選碼,或者它的每個(gè)候選碼都是單屬

          性,則該關(guān)系自然達(dá)到BC范式。

          一般,一個(gè)數(shù)據(jù)庫(kù)設(shè)計(jì)符合3NF或BCNF就可以了。

          第四范式:要求把同一表內(nèi)的多對(duì)多關(guān)系刪除。

          第五范式:從最終結(jié)構(gòu)重新建立原始結(jié)構(gòu)。

          ?

          13.什么是 內(nèi)連接、外連接、交叉連接、笛卡爾積等?? ? ? ? ? ? ? ? ? ? ? ? ? ??

          內(nèi)連接: 只連接匹配的行

          左外連接: 包含左邊表的全部行(不管右邊的表中是否存在與它們匹配的行),以及右邊表中全部匹配

          的行

          右外連接: 包含右邊表的全部行(不管左邊的表中是否存在與它們匹配的行),以及左邊表中全部匹配

          公眾號(hào):DotNet開(kāi)發(fā)跳槽

          的行

          例如1:

          例如2:

          全外連接: 包含左、右兩個(gè)表的全部行,不管另外一邊的表中是否存在與它們匹配的行。

          交叉連接: 生成笛卡爾積-它不使用任何匹配或者選取條件,而是直接將一個(gè)數(shù)據(jù)源中的每個(gè)行與另一

          個(gè)數(shù)據(jù)源的每個(gè)行都一一匹配

          例如:

          ?

          14.varchar和char的使用場(chǎng)景?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

          1.char的長(zhǎng)度是不可變的,而varchar的長(zhǎng)度是可變的。

          定義一個(gè)char[10]和varchar[10]。

          如果存進(jìn)去的是‘csdn’,那么char所占的長(zhǎng)度依然為10,除了字符‘csdn’外,后面跟六個(gè)空格,varchar就

          立馬把長(zhǎng)度變?yōu)?了,取數(shù)據(jù)的時(shí)候,char類(lèi)型的要用trim()去掉多余的空格,而varchar是不需要的。

          2.char的存取速度還是要比varchar要快得多,因?yàn)槠溟L(zhǎng)度固定,方便程序的存儲(chǔ)與查找。

          char也為此付出的是空間的代價(jià),因?yàn)槠溟L(zhǎng)度固定,所以難免會(huì)有多余的空格占位符占據(jù)空間,可謂是

          以空間換取時(shí)間效率。

          varchar是以空間效率為首位。

          3.char的存儲(chǔ)方式是:對(duì)英文字符(ASCII)占用1個(gè)字節(jié),對(duì)一個(gè)漢字占用兩個(gè)字節(jié)。

          varchar的存儲(chǔ)方式是:對(duì)每個(gè)英文字符占用2個(gè)字節(jié),漢字也占用2個(gè)字節(jié)。

          4.兩者的存儲(chǔ)數(shù)據(jù)都非unicode的字符數(shù)據(jù)。

          ?

          15.SQL語(yǔ)言分類(lèi)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

          SQL語(yǔ)言共分為四大類(lèi):

          一、數(shù)據(jù)查詢語(yǔ)言DQL

          二、數(shù)據(jù)操縱語(yǔ)言DML

          三、數(shù)據(jù)定義語(yǔ)言DDL

          四、數(shù)據(jù)控制語(yǔ)言DCL。

          1. 數(shù)據(jù)查詢語(yǔ)言DQL

          數(shù)據(jù)查詢語(yǔ)言DQL基本結(jié)構(gòu)是由SELECT子句,F(xiàn)ROM子句,WHERE子句組成的查詢塊:

          SELECT

          FROM

          WHERE

          2. 數(shù)據(jù)操縱語(yǔ)言DML

          數(shù)據(jù)操縱語(yǔ)言DML主要有三種形式:

          1) 插入:INSERT

          2) 更新:UPDATE

          3) 刪除:DELETE

          SELECT a.,b. FROM luntan LEFT JOIN usertable as b ON a.username=b.username

          SELECT a.,b. FROM city as a FULL OUTER JOIN user as b ON a.username=b.username

          SELECT type,pub_name FROM titles CROSS JOIN publishers ORDER BY type

          公眾號(hào):DotNet開(kāi)發(fā)跳槽

          3. 數(shù)據(jù)定義語(yǔ)言DDL

          數(shù)據(jù)定義語(yǔ)言DDL用來(lái)創(chuàng)建數(shù)據(jù)庫(kù)中的各種對(duì)象-----表、視圖、索引、同義詞、聚簇等如:

          CREATE TABLE/VIEW/INDEX/SYN/CLUSTER

          表 視圖 索引 同義詞 簇

          DDL操作是隱性提交的!不能rollback

          4. 數(shù)據(jù)控制語(yǔ)言DCL

          數(shù)據(jù)控制語(yǔ)言DCL用來(lái)授予或回收訪問(wèn)數(shù)據(jù)庫(kù)的某種特權(quán),并控制數(shù)據(jù)庫(kù)操縱事務(wù)發(fā)生的時(shí)間及效

          果,對(duì)數(shù)據(jù)庫(kù)實(shí)行監(jiān)視等。如:

          1) GRANT:授權(quán)。

          2) ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一點(diǎn)。回滾---ROLLBACK;回滾命令使數(shù)據(jù)庫(kù)

          狀態(tài)回到上次最后提交的狀態(tài)。其格式為:

          SQL>ROLLBACK;

          3) COMMIT [WORK]:提交。

          在數(shù)據(jù)庫(kù)的插入、刪除和修改操作時(shí),只有當(dāng)事務(wù)在提交到數(shù)據(jù)庫(kù)時(shí)才算完成。在事務(wù)提交前,只

          有操作數(shù)據(jù)庫(kù)的這個(gè)人才能有權(quán)看到所做的事情,別人只有在最后提交完成后才可以看到。

          提交數(shù)據(jù)有三種類(lèi)型:顯式提交、隱式提交及自動(dòng)提交。下面分別說(shuō)明這三種類(lèi)型。

          (1) 顯式提交

          用COMMIT命令直接完成的提交為顯式提交。其格式為:SQL>COMMIT;

          (2) 隱式提交

          用SQL命令間接完成的提交為隱式提交。這些命令是:

          ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,

          EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。

          (3) 自動(dòng)提交

          若把AUTOCOMMIT設(shè)置為ON,則在插入、修改、刪除語(yǔ)句執(zhí)行后,

          系統(tǒng)將自動(dòng)進(jìn)行提交,這就是自動(dòng)提交。

          其格式為:SQL>SET AUTOCOMMIT ON;

          ?

          16.說(shuō)說(shuō)like %和-的區(qū)別? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

          通配符的分類(lèi)

          %百分號(hào)通配符:表示任何字符出現(xiàn)任意次數(shù)(可以是0次).

          下劃線通配符:表示只能匹配單個(gè)字符,不能多也不能少,就是一個(gè)字符.

          like操作符: LIKE作用是指示mysql后面的搜索模式是利用通配符而不是直接相等匹配進(jìn)行比較.

          注意: 如果在使用like操作符時(shí),后面的沒(méi)有使用通用匹配符效果是和=一致的,SELECT * FROM products?

          WHERE products.prod_name like '1000';只能匹配的結(jié)果為1000,而不能匹配像JetPack 1000這樣的結(jié)果.

          %通配符使用: 匹配以"yves"開(kāi)頭的記錄:(包括記錄"yves") SELECT FROM products WHERE?

          products.prod_name like 'yves%';

          匹配包含"yves"的記錄(包括記錄"yves") SELECT FROM products WHERE products.prod_name like?

          '%yves%';

          匹配以"yves"結(jié)尾的記錄(包括記錄"yves",不包括記錄"yves ",也就是yves后面有空格的記錄,這里需要注意)?

          SELECT * FROM products WHERE products.prod_name like '%yves';

          通配符使用: SELECT FROM products WHERE products.prod_name like 'yves'; 匹配結(jié)果為: 像"yyves"這樣

          記錄. SELECT FROM products WHERE products.prodname like 'yves'; 匹配結(jié)果為: 像"yvesHe"這樣

          的記錄.(一個(gè)下劃線只能匹配一個(gè)字符,不能多也不能少)

          注意事項(xiàng):

          注意大小寫(xiě),在使用模糊匹配時(shí),也就是匹配文本時(shí),mysql是可能區(qū)分大小的,也可能是不區(qū)分大小寫(xiě)的,這

          個(gè)結(jié)果是取決于用戶對(duì)MySQL的配置方式.如果是區(qū)分大小寫(xiě),那么像YvesHe這樣記錄是不能

          被"yves__"這樣的匹配條件匹配的.

          注意尾部空格,"%yves"是不能匹配"heyves "這樣的記錄的.

          注意NULL,%通配符可以匹配任意字符,但是不能匹配N(xiāo)ULL,也就是說(shuō)SELECT * FROM products WHERE?

          products.prod_name like '%;是匹配不到products.prod_name為NULL的的記錄.

          公眾號(hào):DotNet開(kāi)發(fā)跳槽

          技巧與建議:

          正如所見(jiàn), MySQL的通配符很有用。但這種功能是有代價(jià)的:通配符搜索的處理一般要比前面討論的

          其他搜索所花時(shí)間更長(zhǎng)。這里給出一些使用通配符要記住的技巧。

          不要過(guò)度使用通配符。如果其他操作符能達(dá)到相同的目的,應(yīng)該 使用其他操作符。

          在確實(shí)需要使用通配符時(shí),除非絕對(duì)有必要,否則不要把它們用 在搜索模式的開(kāi)始處。把通配符置于搜

          索模式的開(kāi)始處,搜索起 來(lái)是最慢的。

          仔細(xì)注意通配符的位置。如果放錯(cuò)地方,可能不會(huì)返回想要的數(shù).

          ?

          17.說(shuō)說(shuō)count(*)、count(1)、count(column)的區(qū)別? ? ? ? ??

          count()對(duì)行的數(shù)目進(jìn)行計(jì)算,包含NULL

          count(column)對(duì)特定的列的值具有的行數(shù)進(jìn)行計(jì)算,不包含NULL值。

          count()還有一種使用方式,count(1)這個(gè)用法和count()的結(jié)果是一樣的。

          性能問(wèn)題:

          1.任何情況下SELECT COUNT() FROM tablename是最優(yōu)選擇;

          2.盡量減少SELECT COUNT() FROM tablename WHERE COL = ‘value’ 這種查詢;

          3.杜絕SELECT COUNT(COL) FROM tablename WHERE COL2 = ‘value’ 的出現(xiàn)。

          如果表沒(méi)有主鍵,那么count(1)比count()快。

          如果有主鍵,那么count(主鍵,聯(lián)合主鍵)比count()快。

          如果表只有一個(gè)字段,count()最快。

          count(1)跟count(主鍵)一樣,只掃描主鍵。count()跟count(非主鍵)一樣,掃描整個(gè)表。明顯前者更快一

          些。

          ?

          18.什么是最左前綴原則?? ? ? ? ? ? ? ? ? ? ? ? ? ??

          多列索引:

          為了提高搜索效率,我們需要考慮運(yùn)用多列索引,由于索引文件以B-Tree格式保存,所以我們不用掃描

          任何記錄,即可得到最終結(jié)果。

          注:在mysql中執(zhí)行查詢時(shí),只能使用一個(gè)索引,如果我們?cè)趌name,fname,age上分別建索引,執(zhí)行查詢

          時(shí),只能使用一個(gè)索引,mysql會(huì)選擇一個(gè)最嚴(yán)格(獲得結(jié)果集記錄數(shù)最少)的索引。

          最左前綴原則:顧名思義,就是最左優(yōu)先,上例中我們創(chuàng)建了lname_fname_age多列索引,相當(dāng)于創(chuàng)建

          了(lname)單列索引,(lname,fname)組合索引以及(lname,fname,age)組合索引。

          19.什么是索引?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

          何為索引:

          數(shù)據(jù)庫(kù)索引,是數(shù)據(jù)庫(kù)管理系統(tǒng)中一個(gè)排序的數(shù)據(jù)結(jié)構(gòu),索引的實(shí)現(xiàn)通常使用B樹(shù)及其變種B+樹(shù)。

          在數(shù)據(jù)之外,數(shù)據(jù)庫(kù)系統(tǒng)還維護(hù)著滿足特定查找算法的數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)以某種方式引用(指

          向)數(shù)據(jù),這樣就可以在這些數(shù)據(jù)結(jié)構(gòu)上實(shí)現(xiàn)高級(jí)查找算法。這種數(shù)據(jù)結(jié)構(gòu),就是索引。

          20.索引的作用?它的優(yōu)點(diǎn)缺點(diǎn)是什么?? ? ? ? ? ? ? ? ? ?

          索引作用:

          協(xié)助快速查詢、更新數(shù)據(jù)庫(kù)表中數(shù)據(jù)。

          為表設(shè)置索引要付出代價(jià)的:

          一是增加了數(shù)據(jù)庫(kù)的存儲(chǔ)空間

          二是在插入和修改數(shù)據(jù)時(shí)要花費(fèi)較多的時(shí)間(因?yàn)樗饕惨S之變動(dòng))。

          ALTER TABLE people ADD INDEX lname_fname_age (lame,fname,age);

          公眾號(hào):DotNet開(kāi)發(fā)跳槽

          21.索引的優(yōu)缺點(diǎn)有哪些?? ? ? ? ? ? ? ? ? ? ? ? ? ??

          創(chuàng)建索引可以大大提高系統(tǒng)的性能(優(yōu)點(diǎn)):

          (1)通過(guò)創(chuàng)建唯一性索引,可以保證數(shù)據(jù)庫(kù)表中每一行數(shù)據(jù)的唯一性。

          (2)可以大大加快數(shù)據(jù)的檢索速度,這也是創(chuàng)建索引的最主要的原因。

          (3)可以加速表和表之間的連接,特別是在實(shí)現(xiàn)數(shù)據(jù)的參考完整性方面特別有意義。

          (4)在使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時(shí),同樣可以顯著減少查詢中分組和排序的時(shí)間。

          (5)通過(guò)使用索引,可以在查詢的過(guò)程中,使用優(yōu)化隱藏器,提高系統(tǒng)的性能。

          增加索引也有許多不利的方面(缺點(diǎn)):

          (1).創(chuàng)建索引和維護(hù)索引要耗費(fèi)時(shí)間,這種時(shí)間隨著數(shù)據(jù)量的增加而增加。

          (2).索引需要占物理空間,除了數(shù)據(jù)表占數(shù)據(jù)空間之外,每一個(gè)索引還要占一定的物理空間,如果要

          建立聚簇索引,那么需要的空間就會(huì)更大。

          (3).當(dāng)對(duì)表中的數(shù)據(jù)進(jìn)行增加、刪除和修改的時(shí)候,索引也要?jiǎng)討B(tài)的維護(hù),這樣就降低了數(shù)據(jù)的維護(hù)

          速度。

          (4).哪些列適合建立索引、哪些不適合建索引?

          索引是建立在數(shù)據(jù)庫(kù)表中的某些列的上面。在創(chuàng)建索引的時(shí)候,應(yīng)該考慮在哪些列上可以創(chuàng)建索引,在

          哪些列上不能創(chuàng)建索引。

          一般來(lái)說(shuō),應(yīng)該在這些列上創(chuàng)建索引:

          (1)在經(jīng)常需要搜索的列上,可以加快搜索的速度;

          (2)在作為主鍵的列上,強(qiáng)制該列的唯一性和組織表中數(shù)據(jù)的排列結(jié)構(gòu);

          (3)在經(jīng)常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度;

          (4)在經(jīng)常需要根據(jù)范圍進(jìn)行搜索的列上創(chuàng)建索引,因?yàn)樗饕呀?jīng)排序,其指定的范圍是連續(xù)的;

          (5)在經(jīng)常需要排序的列上創(chuàng)建索引,因?yàn)樗饕呀?jīng)排序,這樣查詢可以利用索引的排序,加快排序

          查詢時(shí)間;

          (6)在經(jīng)常使用在WHERE子句中的列上面創(chuàng)建索引,加快條件的判斷速度。

          對(duì)于有些列不應(yīng)該創(chuàng)建索引:

          (1)對(duì)于那些在查詢中很少使用或者參考的列不應(yīng)該創(chuàng)建索引。

          這是因?yàn)椋热贿@些列很少使用到,因此有索引或者無(wú)索引,并不能提高查詢速度。相反,由于增加了

          索引,反而降低了系統(tǒng)的維護(hù)速度和增大了空間需求。

          (2)對(duì)于那些只有很少數(shù)據(jù)值的列也不應(yīng)該增加索引。

          這是因?yàn)?,由于這些列的取值很少,例如人事表的性別列,在查詢的結(jié)果中,結(jié)果集的數(shù)據(jù)行占了表中

          數(shù)據(jù)行的很大比例,即需要在表中搜索的數(shù)據(jù)行的比例很大。增加索引,并不能明顯加快檢索速度。

          (3)對(duì)于那些定義為text, image和bit數(shù)據(jù)類(lèi)型的列不應(yīng)該增加索引。

          這是因?yàn)?,這些列的數(shù)據(jù)量要么相當(dāng)大,要么取值很少。

          (4)當(dāng)修改性能遠(yuǎn)遠(yuǎn)大于檢索性能時(shí),不應(yīng)該創(chuàng)建索引。

          這是因?yàn)椋薷男阅芎蜋z索性能是互相矛盾的。當(dāng)增加索引時(shí),會(huì)提高檢索性能,但是會(huì)降低修改性

          能。當(dāng)減少索引時(shí),會(huì)提高修改性能,降低檢索性能。因此,當(dāng)修改性能遠(yuǎn)遠(yuǎn)大于檢索性能時(shí),不應(yīng)該

          創(chuàng)建索引。

          索引詳解:帶你從頭到尾捋一遍MySQL索引結(jié)構(gòu)!

          ?

          22.什么樣的字段適合建索引?? ? ? ? ? ? ? ? ? ? ? ? ?

          唯一、不為空、經(jīng)常被查詢的字段

          23.說(shuō)說(shuō)聚集索引和非聚集索引區(qū)別?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

          聚合索引(clustered index):

          聚集索引表記錄的排列順序和索引的排列順序一致,所以查詢效率快,只要找到第一個(gè)索引值記錄,其

          余就連續(xù)性的記錄在物理也一樣連續(xù)存放。聚集索引對(duì)應(yīng)的缺點(diǎn)就是修改慢,因?yàn)闉榱吮WC表中記錄的

          物理和索引順序一致,在記錄插入的時(shí)候,會(huì)對(duì)數(shù)據(jù)頁(yè)重新排序。

          公眾號(hào):DotNet開(kāi)發(fā)跳槽

          聚集索引類(lèi)似于新華字典中用拼音去查找漢字,拼音檢索表于書(shū)記順序都是按照a~z排列的,就像相同

          的邏輯順序于物理順序一樣,當(dāng)你需要查找a,ai兩個(gè)讀音的字,或是想一次尋找多個(gè)傻(sha)的同音字

          時(shí),也許向后翻幾頁(yè),或緊接著下一行就得到結(jié)果了。

          非聚合索引(nonclustered index):

          非聚集索引指定了表中記錄的邏輯順序,但是記錄的物理和索引不一定一致,兩種索引都采用B+樹(shù)結(jié)

          構(gòu),非聚集索引的葉子層并不和實(shí)際數(shù)據(jù)頁(yè)相重疊,而采用葉子層包含一個(gè)指向表中的記錄在數(shù)據(jù)頁(yè)中

          的指針?lè)绞健7蔷奂饕龑哟味?,不?huì)造成數(shù)據(jù)重排。

          非聚集索引類(lèi)似在新華字典上通過(guò)偏旁部首來(lái)查詢漢字,檢索表也許是按照橫、豎、撇來(lái)排列的,但是

          由于正文中是a~z的拼音順序,所以就類(lèi)似于邏輯地址于物理地址的不對(duì)應(yīng)。同時(shí)適用的情況就在于分

          組,大數(shù)目的不同值,頻繁更新的列中,這些情況即不適合聚集索引。

          根本區(qū)別:

          聚集索引和非聚集索引的根本區(qū)別是表記錄的排列順序和與索引的排列順序是否一致。?

          二、SqlServer筆試基礎(chǔ)篇? ? ? ? ? ? ? ? ? ? ?

          試用SQL查詢語(yǔ)句表達(dá)下列對(duì)教學(xué)數(shù)據(jù)庫(kù)中三個(gè)基本表 S、SC 、C 的查詢:

          S(sno,sname,SAGE,SSEX) 各字段表示學(xué)號(hào),姓名,年齡,性別

          Sc(sno,cno,grade) 各字段表示學(xué)號(hào),課程號(hào),成績(jī)、

          C(cno,cname, TEACHER) 各字段表示課程號(hào),課程名和教師名 其 中 SAGE, grade 是數(shù)值型,其他均

          為字符型。

          1.求年齡大于所有女同學(xué)年齡的男學(xué)生姓名和年齡。? ? ? ? ??

          2.求年齡大于女同學(xué)平均年齡的男學(xué)生姓名和年齡。? ? ? ? ? ?

          3.在 SC 中檢索成績(jī)?yōu)榭罩档膶W(xué)生學(xué)號(hào)和課程號(hào)。? ? ? ? ? ? ?

          4.檢索姓名以 WANG 打頭的所有學(xué)生的姓名和年齡。? ? ? ? ? ?

          5.檢索學(xué)號(hào)比 WANG 同學(xué)大,而年齡比他小的學(xué)生姓名。? ? ? ??

          SELECTSNAME,SAGE FROM S AS X

          WHERE X.SSEX=' 男'AND X.SAGE >ALL (SELECT SAGE FROMS AS Y WHERE

          Y.SSEX=' 女')

          SELECT SNAME,SAGE

          FROM S

          WHERE SSEX=' 男'

          AND SAGE>(SELECTAVG(SAGE) FROM S WHERE SSEX='女')

          SELECT Sno,CnoFROM SC WHERE GRADE IS NULL

          SELECT SNAME,SAGE FROM S

          WHERE SNAME LIKE 'WANG%'

          SELECTX.SNAME FROM S AS X, S AS Y

          WHERE Y .SNAME='WANG' AND X.Sno>Y.Sno AND X.SAGE

          公眾號(hào):DotNet開(kāi)發(fā)跳槽

          6.統(tǒng)計(jì)每門(mén)課程的學(xué)生選修人數(shù) (超過(guò) 2 人的課程才統(tǒng)計(jì)) 。要求

          輸出課程號(hào)和選修人數(shù),查詢結(jié)果按人數(shù)降序排列,若人數(shù)相同,按

          課程號(hào)升序排列。

          ?

          7.求 LIU 老師所授課程的每門(mén)課程的學(xué)生平均成績(jī)。? ? ? ? ? ?

          8.求選修 C4 課程的學(xué)生的平均年齡。? ? ? ? ? ? ? ? ? ??

          9.統(tǒng)計(jì)有學(xué)生選修的課程門(mén)數(shù)。? ? ? ? ? ? ? ? ? ? ? ?

          試用 SQL 更新語(yǔ)句表達(dá)對(duì)教學(xué)數(shù)據(jù)庫(kù)中三個(gè)基本表 S、

          SC 、C的各個(gè)更新操作:

          10.在基本表 SC 中修改 4 號(hào)課程的成績(jī),若成績(jī)小于等于 75 分時(shí)提

          高 5% , 若成績(jī)大于 75 分時(shí)提高 4% (用兩個(gè) UPDATE 語(yǔ)句實(shí)

          現(xiàn))。

          ?

          SELECT SNAME

          from s

          where sno>(select sno from s where SNAME='WANG') andSAGE<(select sAGE from s?

          where SNAME='WANG')

          SELECTDISTINCT Cno,COUNT(Sno) FROM SC

          GROUPBY Cno HAVING COUNT(Sno)>2

          ORDER BY 2 DESC, Cno ASC

          SELECT DISTINCT Cno,COUNT(Sno) as 人數(shù)

          FROMSC GROUP BY Cno

          HAVING COUNT(Sno)>2

          ORDER BY 人 數(shù) DESC, Cno ASC

          SELECT AVG(GRADE)

          FROM SC join C on SC.Cno=C.Cno WHERE TEACHER='liu'

          GROUP BY c.Cno

          SELECTCNAME,AVG(GRADE) FROM SC ,C WHERE SC.Cno=C.Cno AND TEACHER='liu'

          GROUP BY c.Cno,cname

          SELECT AVG(SAGE )

          FROMS WHERE Sno

          IN(SELECT Sno FROM SC WHERE Cno='4')?

          SELECT AVG(SAGE)

          FROM S,SC WHERES.Sno=SC.Sno AND Cno='4'

          SELECT COUNT(DISTINCT Cno) FROM SC

          公眾號(hào):DotNet開(kāi)發(fā)跳槽

          11 .把低于總平均成績(jī)的女同學(xué)成績(jī)提高 5% 。? ? ? ? ? ? ? ?

          12 .把選修數(shù)據(jù)庫(kù)原理課不及格的成績(jī)?nèi)臑榭罩怠? ? ? ? ? ??

          13.把WANG 同學(xué)的學(xué)習(xí)選課和成績(jī)?nèi)縿h去。? ? ? ? ? ? ?

          14 .在基本表 SC 中刪除尚無(wú)成績(jī)的選課元組。? ? ? ? ? ? ??

          15 .往基本表 S 中插入一個(gè)學(xué)生元組( ‘ S9’,‘ WU ’,18 )。。? ?

          16.什么是SQL注入式攻擊?? ? ? ? ? ? ? ? ? ? ? ? ? ?

          所謂SQL注入式攻擊,就是攻擊者把SQL命令插入到Web表單的輸入域或頁(yè)面請(qǐng)求的查詢字符串,欺騙

          服務(wù)器執(zhí)行惡意的SQL命令。在某些表單中,用戶輸入的內(nèi)容直接用來(lái)構(gòu)造(或者影響)動(dòng)態(tài)SQL命

          令,或作為存儲(chǔ)過(guò)程的輸入?yún)?shù),這類(lèi)表單特別容易受到SQL注入式攻擊。

          三、SqlServer筆試高級(jí)篇? ? ? ? ? ? ? ? ? ? ?

          1.什么是內(nèi)存泄漏?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

          一般我們所說(shuō)的內(nèi)存泄漏指的是堆內(nèi)存的泄漏。堆內(nèi)存是程序從堆中為其分配的,大小任意的,使用完

          后要顯示釋放內(nèi)存。當(dāng)應(yīng)用程序用關(guān)鍵字new 等創(chuàng)建對(duì)象時(shí),就從堆中為它分配一塊內(nèi)存,使用完后程

          序調(diào)用free 或者delete 釋放該內(nèi)存,否則就說(shuō)該內(nèi)存就不能被使用,我們就說(shuō)該內(nèi)存被泄漏了。

          2.維護(hù)數(shù)據(jù)庫(kù)的完整性和一致性,你喜歡用觸發(fā)器還是自寫(xiě)業(yè)務(wù)邏

          輯?為什么?

          ?

          是這樣做的,盡可能使用約束,如check, 主鍵,外鍵,非空字段等來(lái)約束,這樣做效率最高,也最方

          便。其次是使用觸發(fā)器,這種方法可以保證,無(wú)論什么業(yè)務(wù)系統(tǒng)訪問(wèn)數(shù)據(jù)庫(kù)都可以保證數(shù)據(jù)的完整新和

          一致性。最后考慮的是自寫(xiě)業(yè)務(wù)邏輯,但這樣做麻煩,編程復(fù)雜,效率低下。

          UPDATE SC SETGRADE=GRADE*1.05 WHERE Cno='4' AND GRADE<=75?

          UPDATE SC SET GRADE=GRADE*1.04 WHERE Cno='4' AND GRADE>75

          UPDATE SC SETGRADE=GRADE*1.05 WHERE GRADE<(SELECT AVG(GRADE) FROM SC)

          AND Sno IN (SELECT Sno FROM SWHERE SSEX=' 女')

          UPDATE SC SET GRADE=NULL

          WHERE GRADE<60 AND Cno IN(SELECT Cno FROM C

          WHERE CNAME=' 數(shù)據(jù)庫(kù)原理 ')

          DELETEFROM SC WHERE Sno IN(SELECT Sno FROM S

          WHERE SNAME='WANG')

          DELETE FROM SCWHERE GRADE IS NULL

          INSERT INTO S(Sno,SNAME,SAGE) VALUES('59','WU',18)

          公眾號(hào):DotNet開(kāi)發(fā)跳槽

          3.什么是事務(wù)?什么是鎖?? ? ? ? ? ? ? ? ? ? ? ? ? ?

          事務(wù)就是被綁定在一起作為一個(gè)邏輯工作單元的SQL 語(yǔ)句分組,如果任何一個(gè)語(yǔ)句操作失敗那么整個(gè)操

          作就被失敗,以后操作就會(huì)回滾到操作前狀態(tài),或者是上有個(gè)節(jié)點(diǎn)。為了確保要么執(zhí)行,要么不執(zhí)行,

          就可以使用事務(wù)。要將有組語(yǔ)句作為事務(wù)考慮,就需要通過(guò)ACID 測(cè)試,即原子性,一致性,隔離性和

          持久性。

          鎖:在所以的 DBMS中,鎖是實(shí)現(xiàn)事務(wù)的關(guān)鍵,鎖可以保證事務(wù)的完整性和并發(fā)性。與現(xiàn)實(shí)生活中鎖一

          樣,它可以使某些數(shù)據(jù)的擁有者,在某段時(shí)間內(nèi)不能使用某些數(shù)據(jù)或數(shù)據(jù)結(jié)構(gòu)。當(dāng)然鎖還分級(jí)別的。

          ?

          4.對(duì)一個(gè)投入使用的在線事務(wù)處理表格有過(guò)多索引需要有什么樣的性

          能考慮?

          ?

          對(duì)一個(gè)表格的索引越多,數(shù)據(jù)庫(kù)引擎用來(lái)更新、插入或者刪除數(shù)據(jù)所需要的時(shí)間就越多,因?yàn)樵跀?shù)據(jù)操

          控發(fā)生的時(shí)候索引也必須要維護(hù)。

          5.什么是相關(guān)子查詢?如何使用這些查詢?

          相關(guān)子查詢是一種包含子查詢的特殊類(lèi)型的查詢。查詢里包含的子查詢會(huì)真正請(qǐng)求外部查詢的值,從而

          形成一個(gè)類(lèi)似于循環(huán)的狀況。

          6.什么是SQL注入式攻擊?? ? ? ? ? ? ? ? ? ? ? ? ? ?

          就是攻擊者把SQL命令插入到Web表單的輸入域或頁(yè)面請(qǐng)求的查詢字符串,欺騙服務(wù)器執(zhí)行惡意的SQL

          命令。在某些表單中,用戶輸入的內(nèi)容直接用來(lái)構(gòu)造(或者影響)動(dòng)態(tài)SQL命令,或作為存儲(chǔ)過(guò)程的輸

          入?yún)?shù),這類(lèi)表單特別容易受到SQL注入式攻擊

          7.如何防范SQL注入式攻擊?? ? ? ? ? ? ? ? ? ? ? ? ??

          ? 好在要防止ASP.NET應(yīng)用被SQL注入式攻擊闖入并不是一件特別困難的事情,只要在利用表單輸入的內(nèi)

          容構(gòu)造SQL命令之前,把所有輸入內(nèi)容過(guò)濾一番就可以了。過(guò)濾輸入內(nèi)容可以按多種方式進(jìn)行。

          ? ⑴ 對(duì)于動(dòng)態(tài)構(gòu)造SQL查詢的場(chǎng)合,可以使用下面的技術(shù):

          ? 第一:替換單引號(hào),即把所有單獨(dú)出現(xiàn)的單引號(hào)改成兩個(gè)單引號(hào),防止攻擊者修改SQL命令的含義。

          再來(lái)看前面的例子,“SELECT * from Users WHERE login = ’’’ or ’’1’’=’’1’ AND password = ’’’ or ’’1’’=’’1’”

          顯然會(huì)得到與“SELECT * from Users WHERE login = ’’ or ’1’=’1’ AND password = ’’ or ’1’=’1’”不同的結(jié)

          果。

          ? 第二:刪除用戶輸入內(nèi)容中的所有連字符,防止攻擊者構(gòu)造出類(lèi)如“SELECT * from Users WHERE

          login = ’mas’ —— AND password =’’”之類(lèi)的查詢,因?yàn)檫@類(lèi)查詢的后半部分已經(jīng)被注釋掉,不再有

          效,攻擊者只要知道一個(gè)合法的用戶登錄名稱,根本不需要知道用戶的密碼就可以順利獲得訪問(wèn)權(quán)限。

          ? 第三:對(duì)于用來(lái)執(zhí)行查詢的數(shù)據(jù)庫(kù)帳戶,限制其權(quán)限。用不同的用戶帳戶執(zhí)行查詢、插入、更新、刪

          除操作。由于隔離了不同帳戶可執(zhí)行的操作,因而也就防止了原本用于執(zhí)行SELECT命令的地方卻被用

          于執(zhí)行INSERT、UPDATE或DELETE命令。

          ? ⑵ 用存儲(chǔ)過(guò)程來(lái)執(zhí)行所有的查詢。SQL參數(shù)的傳遞方式將防止攻擊者利用單引號(hào)和連字符實(shí)施攻擊。

          此外,它還使得數(shù)據(jù)庫(kù)權(quán)限可以限制到只允許特定的存儲(chǔ)過(guò)程執(zhí)行,所有的用戶輸入必須遵從被調(diào)用的

          存儲(chǔ)過(guò)程的安全上下文,這樣就很難再發(fā)生注入式攻擊了。

          ? ⑶ 限制表單或查詢字符串輸入的長(zhǎng)度。如果用戶的登錄名字最多只有10個(gè)字符,那么不要認(rèn)可表單中

          輸入的10個(gè)以上的字符,這將大大增加攻擊者在SQL命令中插入有害代碼的難度。

          ? ⑷ 檢查用戶輸入的合法性,確信輸入的內(nèi)容只包含合法的數(shù)據(jù)。數(shù)據(jù)檢查應(yīng)當(dāng)在客戶端和服務(wù)器端都

          執(zhí)行——之所以要執(zhí)行服務(wù)器端驗(yàn)證,是為了彌補(bǔ)客戶端驗(yàn)證機(jī)制脆弱的安全性。

          ? 在客戶端,攻擊者完全有可能獲得網(wǎng)頁(yè)的源代碼,修改驗(yàn)證合法性的腳本(或者直接刪除腳本),然后將

          非法內(nèi)容通過(guò)修改后的表單提交給服務(wù)器。因此,要保證驗(yàn)證操作確實(shí)已經(jīng)執(zhí)行,唯一的辦法就是在服

          務(wù)器端也執(zhí)行驗(yàn)證。你可以使用許多內(nèi)建的驗(yàn)證對(duì)象,例如RegularExpressionValidator,它們能夠自

          公眾號(hào):DotNet開(kāi)發(fā)跳槽

          動(dòng)生成驗(yàn)證用的客戶端腳本,當(dāng)然你也可以插入服務(wù)器端的方法調(diào)用。如果找不到現(xiàn)成的驗(yàn)證對(duì)象,你

          可以通過(guò)CustomValidator自己創(chuàng)建一個(gè)。

          ? ⑸ 將用戶登錄名稱、密碼等數(shù)據(jù)加密保存。加密用戶輸入的數(shù)據(jù),然后再將它與數(shù)據(jù)庫(kù)中保存的數(shù)據(jù)

          比較,這相當(dāng)于對(duì)用戶輸入

          ? 的數(shù)據(jù)進(jìn)行了“消毒”處理,用戶輸入的數(shù)據(jù)不再對(duì)數(shù)據(jù)庫(kù)有任何特殊的意義,從而也就防止了攻擊者注

          入SQL命令。System.Web.Security.FormsAuthentication類(lèi)有一個(gè)

          HashPasswordForStoringInConfigFile,非常適合于對(duì)輸入數(shù)據(jù)進(jìn)行消毒處理。

          ? ⑹ 檢查提取數(shù)據(jù)的查詢所返回的記錄數(shù)量。如果程序只要求返回一個(gè)記錄,但實(shí)際返回的記錄卻超過(guò)

          一行,那就當(dāng)作出錯(cuò)處理。

          ? (7)使用預(yù)處理語(yǔ)句

          8.你可以用什么來(lái)確保表格里的字段只接受特定范圍里的值?? ? ? ? ? ? ? ??

          master 主要保存系統(tǒng)級(jí)的信息,比如本數(shù)據(jù)庫(kù)實(shí)例都有哪些數(shù)據(jù)庫(kù) ,都有哪些賬號(hào)等,需備份;

          model 模板,每創(chuàng)建一個(gè)數(shù)據(jù)庫(kù) ,都會(huì)根據(jù)這個(gè)庫(kù)的結(jié)構(gòu)來(lái)創(chuàng)建,如果改過(guò)此庫(kù),建議備份;

          msdb 保存計(jì)劃任務(wù),作業(yè)之類(lèi)的信息,需備份,否則會(huì)丟失作業(yè)和備份計(jì)劃;

          tempdb 用戶對(duì)sqlserver操作時(shí)產(chǎn)生的臨時(shí)數(shù)據(jù)依賴于此庫(kù),最常見(jiàn)的是臨時(shí)表,不許備份;

          9.有哪些操作會(huì)使用到TempDB;如果TempDB異常變大,可能的原

          因是什么,該如何處理;

          ?

          每個(gè)sqlserver運(yùn)行時(shí)所產(chǎn)生的臨時(shí)數(shù)據(jù)都會(huì)用到tempdb,最常見(jiàn)的是執(zhí)行sql腳本需要返回的記錄集;

          異常變大的原因是執(zhí)行的操作返回的記錄集過(guò)大造成,找出該語(yǔ)句優(yōu)化,減少數(shù)據(jù)范圍,或者分批操作

          這些數(shù)據(jù)

          10.Index有哪些類(lèi)型,它們的區(qū)別和實(shí)現(xiàn)原理是什么,索引有啥優(yōu)點(diǎn)

          和缺點(diǎn);如何為SQL語(yǔ)句創(chuàng)建合適的索引,索引創(chuàng)建時(shí)有哪些需要,注

          意的項(xiàng),如何查看你創(chuàng)建的索引是否被使用;如何維護(hù)索引;索引損

          壞如何檢查,怎么修復(fù);T-SQL有更好的索引存在,但是運(yùn)行,時(shí)并沒(méi)

          有使用該索引,原因可能是什么;

          ?

          聚集索引,非聚集索引;聚集索引只能有一個(gè),非聚集可有多個(gè),數(shù)據(jù)依賴于聚集索引來(lái)保存,如果沒(méi)

          有聚集索引,數(shù)據(jù)是一個(gè)亂序的堆;

          優(yōu)點(diǎn):合適的索引可有效提高查詢效率;缺點(diǎn):過(guò)多的索引,在insert、update 和 delete 的時(shí)候增加

          索引的維護(hù)成本,降低并發(fā)量;

          一般索引的創(chuàng)建要依賴于 where 和 order by 這兩個(gè)關(guān)鍵字,執(zhí)行計(jì)劃可以看出是否用到了索引;

          還沒(méi)遇到過(guò)索引損壞的情況,如果損壞,重建之;

          用不到索引可能是索引碎片過(guò)多 ,可進(jìn)行碎片整理,若不行可加強(qiáng)制索引with(index( 索引名 ))

          11.Job信息我們可以通過(guò)哪些表獲??;系統(tǒng)正在運(yùn)行的語(yǔ)句可以通過(guò)

          哪些視圖獲取;如何獲取某個(gè)T-SQL語(yǔ)句的IO、Time等信息;

          ?

          sql2000下是通過(guò) master.dbo.sysjobs 來(lái)查看作業(yè)信息;系統(tǒng)正在運(yùn)行的語(yǔ)句可通過(guò)?

          master.dbo.sysprocesses 結(jié)合 dbcc inputbuffer 來(lái)查看,IO,在sql2000下我本人都是通過(guò)profiler

          看reads,duration,sql2005下有了動(dòng)態(tài)視圖(dmv);

          公眾號(hào):DotNet開(kāi)發(fā)跳槽


          版權(quán)申明:本文來(lái)源于網(wǎng)友收集或網(wǎng)友提供,如果有侵權(quán),請(qǐng)轉(zhuǎn)告版主或者留言,本公眾號(hào)立即刪除。

          右下角,您點(diǎn)一下在看圖片070245fd9bda77dd4d8d07876482d22a.webp

          小微工資漲1毛

          商務(wù)合作QQ:185601686



          瀏覽 159
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩一级视频在线 | 中文字幕日韩一级 | 亚洲 日韩 欧美 国产 | 97人妻精品一区二区三区香蕉 | 最新一区二区 |