SQL Server筆試準備 Day2

2022-03-02 13:06:20 字數 3918 閱讀 4616

今天著重整理一下sql server的理論基礎

一、各概念的自我理解(參考:

定義都比較長,面試時也不可能記的全,要有理解,試著用一兩句話概括一下各個概念

1、觸發器:一種根據條件(事件)執行的儲存過程,在專案中沒用過,一般業務邏輯用程式來控制,資料庫盡量只使用資料儲存,不進行業務邏輯。

2、儲存過程:一段預編譯的sql語句,因為編譯過,所以執行起來比普通sql快。在專案中主要用於一連串事務性的操作

3、索引:假設一本字典是按拼音排序,目錄有拼音和筆劃。索引就像目錄,聚焦索引就像拼音索引,是物理上有序的,比如我要查l開頭的,就知道大概在字典的中部,一張表只有乙個聚焦索引,一般是主鍵。非聚焦索引就像筆劃目錄,也可以很方便查到相應資料,但物理上是無序的。索引會增加儲存空間和降低資料修改的速度,但一般業務上都是對查詢的速度要求高,對編輯的速度沒那麼敏感,而且現在儲存裝置**低廉,空間不是問題。

4、約束:資料庫有很多約束功能,非空、唯

一、主外來鍵、check、觸發器等。一般除了必要的一些約束,盡量讓資料庫只進行資料的訪問,不進行太多業務上的邏輯處理。因為業務邏輯不斷變化,各專案也可能要共用資料庫。

5、事務:有acid特性(原子性、一致性、隔離性、永續性),

要麼全成功要麼全失敗,一般用於轉賬、出入庫等

6、鎖:鎖定庫、表、字段,有各種鎖(表鎖、行鎖、共享鎖、更新鎖、排它鎖等),比較細,有機會再仔細研究一下。專案中常用到的是with(nolock),這樣不受併發修改的鎖影響,但資料可能不準確。

7、檢視:把多表連線成一張表。專案中如果有固定的多表連線,可以做成檢視,一般還是在程式中處理。

8、游標:像指標一樣對查詢結果集進行一行一行的處理,一行處理完指向下一行。效能比較差,有時逐條處理資料時會用到。ado.net的datareader就是相當於乙個向前唯讀的游標。只不過datareader不過把結果集預先全查出來,所以對大資料效能比較好,而指標是要把結果集先查出來,再對結果集一行行處理(不知理解的對不對)

9、null:declare @i=int; 此時@i的值是null,而不像c#是0。。。有時沒注意會被坑。sql的可空型別對應的c#是,另外,null和''(空字串)是不一樣的,而且只能用 is null來判斷,=null是無效的(但不報錯。。。也是乙個大坑),為了保險,專案中經常用 isnull(xx,'')='' 之類的進行判斷

10、主鍵外來鍵:由於主鍵一般聚焦索引,常用自增長id作主鍵,插入記錄後可用@@identity獲取插入新行的主鍵值。外來鍵一般用於一對多,比如乙個讀者,其名下的借書記錄。

二、各函式

太基本的函式就不列了,整理一些比較常用的

1、newid():獲取guid,配合abs(checksum(newid())),可以在迴圈中獲取隨機數

2、rand():獲取隨機數,但在迴圈中只會產生乙個,要用newid()

3、字串處理函式:參考(

select

ascii('

a') --

97,字元轉成ascii

select

ascii('

1') --

49select

ascii(1) --

49,數字可以不加單引號

select

char(97) --

a,ascii轉成字元

select

str(12,2) --

'12',數字轉字串

select

str(12,1) --

*,不足的以*表示

select

str(12,3) --

' 12',超出的前補0

select

str(12) --

' 12',預設10位

select

ltrim('

a bc

') --

'a bc ',去左端空格

select

rtrim('

a bc

') --

' a bc',去右端空格

select

left('

abc',2) --

abselect

right('

abc',2) --

bcselect

right('

0000'+

'123

',4) --

0123,用於前補0

select

substring('

abcd

',1,2) --

ab,【前一引數】包含第1位,取【後一引數】個

select

substring('

abcd

',5,2) --

'',超過為空

select

substring('

abcd

',-1,2) --

'',負數為空

select

substring('

abcd

',4,2) --

'd',取完為止

select

charindex('

a','

abcd

') --

1,子串出現位置,從1開始

select

charindex('

e','

abcd

') --

0,注意:c#有indexof,js有indexof,找不到都為-1,sql則是為0

select

patindex('

%a%','

abcd

') --

1,子串出現位置,前後必須有百分號

select

patindex('

a','

abcd

') --

0,前後必須有百分號否則返回0

select

quotename('

abc','') --

[abc],返回被特定字元括起來的字串,預設

select

quotename('

abc','

{}') --

select

replicate('

ab',2) --

abab,重複次數

select

replicate('

ab',0) --

'',0為''

select

replicate('

ab',-

2) --

null,負數為null

select

reverse('

abc') --

cba,顛倒順序

select

reverse(12) --

21,顛倒順序

select

replace('

abc','

ab','

ab') --

abcselect

space(1) --

' ',指定長度空白符

select

space(0) --

''select

space(-

1) --

null

select

stuff('

abcd

',1,2,'

x') --

xcdselect

stuff('

abcd

',5,2,'

x') --

null

select

stuff('

abcd

',-1,2,'

x') --

null

select

stuff('

abcd

',2,-

1,'x

') --

null

Cisco 筆試準備

一共70道題,全部是單選題,答對加1分,答錯扣0.5分,不答不加分也不扣分。試題一共分為4部分 第一部分是network,第二部分是os,第三部分跟職位有關,我的是test,第四部分是logic。第一部分 network 以下是別人寫的 network部分,和ccna差不多。osi 7layer m...

c 筆試題準備

1.兩個任意長度的正數相減,這兩個正數可以帶小數點,也可以是整數,請輸出結果。輸入的字串中,不會出現除了數字與小數點以外的其它字元,不會出現多個小數點以及小數點在第乙個字元的位置等非法情況,所以考生的程式中無須考慮輸入的數值字串非法的情況。詳細要求以及約束 1.輸入均為正數,但輸出可能為負數 2.輸...

百度筆試準備

分箱 分箱方法是一種簡單常用的預處理方法,通過考察相鄰資料來確定最終值。所謂 分箱 實際上就是按照屬性值劃分的子區間,如果乙個屬性值處於某個子區間範圍內,就稱把該屬性值放進這個子區間所代表的 箱子 內。把待處理的資料 某列屬性值 按照一定的規則放進一些箱子中,考察每乙個箱子中的資料,採用某種方法分別...