SQL面試72題


SQL面試72題


SQL面試72題

大家好,這一期呢,我們來看一下sql的面試題。

第1題,什麼是sql?

結構化查詢語言。用來創建和訪問數據庫從而對軟件應用提供支持。

第2題,什麼是表?

表是一些記錄的集合,表被認為是一個單一的數據空間。

第3題,有幾種類型的語句?

Ddl數據定義語言,dml數據管理語言,dcl數據控制語言。

第4題,介紹一下distinct。

Distinct 跟 select,語句結合使用的, 以避免出現指定的重複的列記錄。

select distinct columnnames from tablename;

第5題, 有哪些不同的clauses?

Where, 為了定義條件來過濾數據的。

Group by, 通過指定的條件來對數據進行分組.

Having, 跟group by結合使用, 用來過濾數據.

Order by用來排序。

Using, 跟Join結合使用,可以用on來替代.

第6題, 為什麼使用constraints? 在創建數據庫的時候,需要用哪些constraints?

Constraints用來對錶的記錄設定規則。如果相關的記錄不符合規則,就會被終止操作。

有5種主要的constraints。Not null, unique, primary key, foreign key, check.

第7題,有幾種不同的join?

Inner join, left join, right join, full join.

Inner join, 就是隻要有一個列能夠匹配, 就簡單的返回兩個table中所有的對應行。

select columnnames from tablename1 inner join tablename2 on columnname1=columnname2

Left join也就是left outer join。當有一個列能夠匹配時就返回左邊表中所有的行。

select columnnames from tablename1 left join tablename2 on columnname1=columnname2

Right join也就是right outer join,當有列匹配時,返回右邊表格中所有的行。

select columnnames from tablename1 right join tablename2 on columnname1=columnname2

Full join也就是full outer join, 當有匹配時, 會返回左邊表格和右邊表格任意情況下的行組合。

第8題,什麼是transaction及其控制?

Transaction包含了一系列的任務操作。這些操作可能是創建更新刪除等等操作,是作為一個特定的結果來表現的。要麼成功,要麼不成功。

有4種控制,一種是commit,也就是提交。一種是rollback,也就是回調。再一種是set transaction,對這個事務設定一個名字。再一種是save point。這個控制是用來設定某個點用來回退的。

第9題,事務的屬性是什麼?

Atomicity, Consistency, Isolation, Durability.

第10題,有哪些直接可以調用的arregate函數?

Avg, count, max, min, sum, first, last.

第11題, 有哪些scalar函數?

ucase, lcase, mid, format, len, round.

第12題,什麼是trigger?

Trigger相當於stored procedure, 它是用來對某些動作出反應的機制。

create trigger name before|after event on tablename for each row | statememt execute procedure functionname arguments

第13題,什麼是view?

view是個虛擬表,它包含多行多列,這些數據來自於一個或者多個表格。

create view viewname as select columname from tablename where condition

第14題, 如何更新view?

使用create和replace來更新view。

create or replace view viewname as select columname from tablename where condition

第15題, 解釋一下權限是怎麼工作的?

Grant和revoke分別是給予權限和去除權限。

包括如下動作,select, insert,update, delete, all等等。

gant privilegename on objectname to username or public or rolename with grant option

revoke privilegenane on objectname from username or public or rolename

第16題, 有幾種類型的privileges?

有兩種System privilege和object privilege。

System privilege主要做的工作有alter any index, alter any cache group, create, alter, delete table, create, alter,delete view等等。

對象privilege包含,execute, insert, update, delete. select, flush, load, index, references等操作。

第17題,什麼是sql injection?

這是一種攻擊數據庫的技術,是在數據庫的查詢語句中嵌套,惡意破壞性的sql語句。當這些語句被執行時會對數據庫的數據造成破壞。

第18題, 什麼是sql的sandbox?

Safe access sandbox.

External access sandbox.

Unsafe access sandbox.

第19題, Sql和pl/sql有什麼區別?

Sql是結構化查詢語言, pl/sql是procedural concepts編程語言。

第20題, Nvl函數的作用是什麼?

Nvl是為了把空值轉換成真正的值。

第21題, 什麼是carteslan product?

兩個表相乘。兩個表的數據進行疊加。一個表有5個行,另一個表有6個行。最後的結果就是30行。

第22題, Sql和my sql的區別是什麼?

Sql是結構化查詢語言,my sql是一個關係型數據庫。

第23題, Subquery是什麼意思?

子查詢是一個查詢嵌入在另一個查詢裡面。

第24題, 使用子查詢時有多少比較的運算符?

In, any和all。

第25題, Clustered索引和非clustered索引有什麼區別?

一張表只有一個clustered索引,可以有多個非clustered索引。

clustered索引,要快於非clustered索引。

Clustered索引會存儲數據在表和視圖當中。而非clustered索引不會。

第26題, Delete和truncate的區別是什麼?

Delete是dml,truncate是ddl。

Delete是用來刪除一行或者多行。Truncate是用來刪除一個表中的所有行。

我們可以用where跟delete結合使用。Truncate不可以。

第27題, Drop跟truncate的區別是什麼?

truncate是刪除表中所有的行,drop是刪除整張表。這兩個操作都不可以回撤。

第28題, 寫出一行語句顯示學生表中學生名字以k開頭的所有學生。

select * from student where studentname like 'k%'

第29題, 嵌套查詢和關聯查詢有什麼區別嗎?

在一個子查詢中再套另外一個字查詢成為嵌套查詢。如果查詢的輸出依賴於父查詢表的話,這個查詢稱為關聯子查詢。

select adminid(select firstname+' '+lastname from emplyee where empid=emp.adminid) as empadminid from employee

第30題, 什麼是Normalization, 有幾種形式?

Normalization是指避免數據冗餘而使用的機制。

有4種,

第1範式是避免在表中出現重複的列。

第2範式遵循第1範式並且建立表之間的關聯。

第3範式遵循第2範式,並且去除了跟主鍵不相關的列。

第4範式遵循第3範式,並且不定義多值依賴。

第31題,什麼是關係?有幾種關係?

關係是指多表在數據庫中的關聯。

有4種關係。

1對1,多對一,多對多,一對多。

第32題, 什麼是stored procedures? 如何使用?

Stored procedure是一系列的sql語句,可以被當做函數來執行操作數據庫。stored procedure用來減輕網絡負擔並提高性能。

create procedure procedurename (parameters) as begin

sql statements in stored procedures to update/retrieve records

end

第33題, 關係型數據庫的一些基本屬性是什麼?

每一列要有唯一的名字。

錶行的順序和列的順序無關緊要。

所有的值是原子性的,每一行都是唯一的。

第34題,什麼叫嵌套trigger?

Trigger可以在滿足一些條件的時候用來做數據的修改。

在triggers裡面含有另外的trigger,我們稱之為嵌套的trigger。

第35題, 什麼是cursor?

Cursor相當於是一個指針來訪問數據庫的對象, 它是以行為單位的。

使用cursor的步驟如下, 聲明cursor, 打開 cursor, 獲取行數據, 處理行, 關掉cursor, 釋放cursor。

第36題, 什麼是collation?

Collation是一系列的規則用來檢查數據是如何排序的. 比如字符串數據是通過字符串的順序,字符串的大小寫敏感等等來排序的。

第37題, 在數據庫測試中,我們需要檢查什麼?

數據庫的鏈接。

Constraint檢查。

數據域的大小。

通過dml操作進行數據獲取和處理。

存儲過程。

Functional flow。

第38題, 什麼是數據庫的白盒測試?

數據庫的一致性和ACID屬性。

數據庫的triggers和邏輯視圖。

Decision覆蓋,條件覆蓋和語句覆蓋。

數據庫表, 數據模型, 數據定義。

參照完整性規則。

第39題, 什麼是數據庫的黑盒測試?

數據mapping。

數據存儲和獲取。

使用黑盒技術。

第40題, 什麼是數據庫的索引?

數據庫的索引是為了快速的獲取數據。

create index indexname on tablename (columnname )

第41題, 如何在表中添加一條記錄?

insert into tablename values(...)

第42題, 如何在表中添加一列?

alter table tablename add (columnname)

第43題, 如何使用delete語句?

delete from tablename where (...)

第44題, Commit的作用是什麼?

Commit是為了提交所有dml語句的修改。

第45題,什麼是主鍵?

主鍵是表中每一行的標識。

第46題,什麼是外鍵?

在本表中關聯另外一張表的主鍵稱之為這個表的外鍵。

第47題,什麼是check constraint?

是用來限制某一列的數據和數據的類型。

第48題,布爾數據域的可能值有哪些?

-1 true, 0 false.

第49題, 什麼是identity?

Identity是數據庫自動生成的數字值來標識主鍵列, 我們可以定義一個起始值。

第50題, 如何隨機的從表中取行?

select * from tablename sample 10

第51題, Sql server缺省的TCP/ip端口是什麼?

1433.

第52題, 寫一個語句返回不同名字。

select distinct name from tablename

第53題, 如何在輸出中改變列的名稱?

select columnname as newname from tablename;

第54題, Select語句中可能使用的clauses的排列順序。

select,from,where,group by, having, order by.

第55題, 學生表中有名字和分數兩個列,如何獲取前三名?

select name, marks from student s1 where 3 <= (select count (*) from students s2 where s1.marks=s2.marks)

第56題, sql語句的註釋。

使用兩個的hyphens.

第57題, 什麼是rowID?

在表的每一個行中都存在這麼一個虛擬的列,他有18個字符的長度。

第58題, 說一下union, minus, union all和intersect。

minus返回所有第1個查詢中不同的行。

union返回任意查詢中不同的行。

union all 返回任意查詢中所有的行,包括重複的行。

intersect返回兩個查詢相結合的不同的行。

第59題, Unique和primary key區別有哪些?

一個表中只允許有一個primary key,但是可以有多個unique key。

Primary key不可以為空,uniquekey 可以可以為空。

第60題, 什麼是 composite primary key?

有多個列生成的primary key稱之為composite primary key.

第61題, 什麼叫查詢優化?

是指數據庫系統,對多個查詢進行比較,會選擇其中代價最小的那個查詢。

第62題, 什麼是case function?

If then else類型的邏輯。他會根據這些條件判斷而返回不同的結果表達式。

第63題, 什麼是臨時表?

臨時表用來臨時存儲數據的存儲結構。

第64題,Rename和alias的區別是什麼?

Rename是改名。Alias是別名,它不會修改列名稱。

第65題, 視圖的優勢在哪裡?

視圖可以限定訪問表格的列。

視圖可以訪問多個表格。

第66題, 用戶之間可以給予的權限有哪些?

Select, connect, resources.

第67題, 什麼是Schema?

Schema是一個用戶的數據庫對象的集合。

第68題, 視圖是否包含數據?

視圖不包含數據,視圖是一個虛擬結構。

第69題, 一個視圖可以從另一個視圖中創建嗎?

可以,一個視圖可以從另一個視圖中創建。

第70題, Having clause和where clause的區別是什麼?

兩者都是指定查詢條件的,但是having只能用select語句中,典型的用途跟group by相結合的時候。

第71題, 局部臨時表和全局臨時表的區別是什麼?

局部臨時表只會存在於語句運行的時候。

全局臨時表會存在於數據庫當中,但是如果連接關閉的話,它也會消失。

第72題,什麼是cte?

Cte也就是common table expression,它是包含一個語句的臨時結果集的表達式。


分享到:


相關文章: