SQL面試題(一)

SQL 面試題(一)

從baseball數據表中,選出第20到30條數據

本題應該使用 limit 來完成操作

select * from baseball limit 19,11;

or 

select * from baseball limit 11 offset 19;

這兩句的作用是一樣的,都是讀取第2030條數據。由于數據表是從0開始的,所以第20條數據的行號是19。2030條一共有11條數據,故選擇的數據條數是11.

drop、truncate、delete的差別

在SQL中,這三個關鍵詞的作用都是用來刪除,但是存在一些差別

  1. drop用來刪除整個表格,包括表的結構、依賴和數據;truncate和delete用來刪除表格中所有的數據,不刪除表的結構;
  2. truncate用來刪除表格中所有數據,delete可以結合where來使用,刪除選中的數據,若不結合where使用,則也是刪除表格中所有數據;
  3. drop和truncate屬于DDL(data define language數據庫定義語音),操作直接生效,不會放到rollback segment中,故不能回滾;
  4. delete屬于DML(Data Manipulation Language數據庫操作語音),操作會被放到rollback segment中,事務提交后才能生效,也就是需要commit,故可以回滾;
  5. 運行速度上,一般drop > truncate > delete;
  6. 表和索引所占空間。當表被TRUNCATE 后,這個表和索引所占用的空間會恢復到初始大小,而DELETE操作不會減少表或索引所占用的空間。drop語句將表所占用的空間全釋放掉。

操作語句

delete from table_name where colum_name = 'str';
// 可以刪除所有 colum_name = 'str'的行

delete from table_name;
// 可以刪除該表中所有數據,保留表的結構和依賴

drop table table_name;
// 刪除數據表 table_name,包括表結構,依賴和數據,并釋放所占空間

// 在sqlite3中,沒有truncate關鍵詞,可以使用delete或者drop代替truncate進行操作;

drop、delete與truncate分別在什么場景之下使用?

不再需要一張表的時候,用drop
想刪除部分數據行時候,用delete,并且帶上where子句
保留表而刪除所有數據的時候用truncate

表格名稱有空格時,如何修改表格名稱?

可以用單引號將表格名稱括起來,作為一個整體。例如表格名稱為 Titanic Data ,要改名為 titanic

alter table 'Titanic Data' rename to titanic;

用alter來更改表格的名稱。alter是DDL語言,立即生效。

超鍵、候選鍵、主鍵、外鍵分別是什么?

首先,定義如下:

超鍵(super key):在關系中能唯一標識元組的屬性集稱為關系模式的超鍵,超鍵包含候選鍵和主鍵;

候選鍵(candidate key):不含有多余屬性的超鍵稱為候選鍵;候選鍵是可以作為唯一標識的屬性;候選鍵包含主鍵;

主鍵(primary key):用戶選作元組標識的一個候選鍵稱為主鍵,主鍵是從候選鍵中選出來的,是人為定義的。

外鍵(foreign key):如果關系模式其他表的主鍵,可以作為當前表的外鍵,主要用來描述兩個表的關系。

(其中,元組指數據表中的一行,也就是一條記錄。在數據表中,每行是一個元組,每列是一個屬性。)

結合實例的具體解釋:

假設有如下兩個表:
學生(學號,姓名,性別,身份證號,教師編號)
教師(教師編號,姓名,工資)

超鍵:
由超鍵的定義可知,學生表中含有學號或者身份證號的任意組合都為此表的超鍵。如:(學號)、(學號,姓名)、(身份證號,性別)等。

候選鍵:
候選鍵屬于超鍵,它是最小的超鍵,就是說如果再去掉候選鍵中的任何一個屬性它就不再是超鍵了。學生表中的候選鍵為:(學號)、(身份證號)。

主鍵:
主鍵就是候選鍵里面的一個,是人為規定的,例如學生表中,我們通常會讓“學號”做主鍵,教師表中讓“教師編號”做主鍵。

外鍵:
外鍵比較簡單,學生表中的外鍵就是“教師編號”。外鍵主要是用來描述兩個表的關系。

什么是事務?

事務(Transaction)是并發控制的基本單位。所謂的事務,它是一個操作序列,這些操作要么都執行,要么都不執行,它是一個不可分割的工作單位。事務是數據庫維護數據一致性的單位,在每個事務結束時,都能保持數據一致性。

DML的操作都需要事務提交后才能生效,也就是需要commit。
DML是數據庫操作語言 Data Manipulation Language,包括select、insert、update、delete

事務就是一系列的操作語言組成的操作序列,當我們commit之后,就可以運行。

// 選出表中所有的數據
SELECT * FROM table_name;
// 我們可以使用 where 來設置篩選條件,用order by對數據進行排序,用limit來設置需要的數據條數和數據開始的索引,用 distinct 來對數據去重


// 插入一條數據
INSERT INTO table_name VALUES (值1,值2,……);
or 
INSERT INTO table_name (列1,列2,……) VALUES (值1,值2,……);
// 使用方法一時,需要給每列都賦值,使用方法二時,可以選擇需要插入數據的列,以及對應插入的值,主鍵必須要有數據

DELETE FROM table_name WHERE colum_name = ‘str’;
// 刪除colum_name列中,所有等于str的行

DELETE FROM table_name;
// 刪除所有的行

// update用來修改表中的數據
UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值

UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson' ;
// 如果 Lastname 為 'Wilson' 的元組的 FirstName為空,則新添 FirstName值,如果 FirstName 已經有值了,則更新 FirstName 的值

UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing'
WHERE LastName = 'Wilson';
// 此處是設置多列的情況

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Student(Sid,Sname,Sage,Ssex) 學生表Course(Cid,Cname,Tid) 課程表...
    小爐爐閱讀 1,479評論 0 0
  • 轉自 (一)什么是存儲過程?有哪些優缺點? 存儲過程是一些預編譯的SQL語句。 更加直白的理解:存儲過程可以說是一...
    joe1632閱讀 787評論 0 10
  • 設計訪談是設計師與被訪談者面對面討論、這能幫助設計師更好的理解消費者對產品或服務的認知、意見、消費動機以及行為方式...
    Moie閱讀 1,241評論 0 4
  • 下周就要進行合唱節比賽了,走在樓道里,歌聲此起彼伏其中還伴著朗朗讀書聲,總是讓人的心沉靜,讓人的臉上都多了幾絲笑...
    娜木翰閱讀 378評論 0 1
  • 申亞?亞龍灣壹號 領秀一灣山色 尊享獨墅風華 別墅戶型: 167㎡,4+1保姆房3廳7衛 251㎡,5+1保姆房3...
    小吉家大姐閱讀 215評論 0 0