今日頭條—抖音部門測試開發工程師數據庫面試題

今日頭條—抖音部門測試開發工程師數據庫面試題

Class表

圖片發自簡書App


Book表

圖片發自簡書App

--練習

--創建class表(code編碼,name名稱,model班型,book_code教材編碼,state編碼)

create table Class(Code char(20) not null,Name char(40) not null,Model char(40),Book_code char(10) not null,State char(10)

not null,Price char(10) not null)

insert into class values('PX201705001','初一地理強化','精品班','009','1','1180')

insert into class values('PX201705002','初一語文強化','精品班','007','0','1180')

insert into class values('PX201705003','初一數學強化','精品班','006','1','980')

insert into class values('PX201705004','初一英語強化','精品班','003','1','780')

insert into class values('0120176001','張曉明','一對一','','1','15000')

--創建教材表(code編碼,name名稱,suject科目,ver教材版本,desc教材描述)

? create table Book(Code char(20) not null,Name char(40) not null,Subject char(40) not null,Ver char(10) not null,desc char(10)

not null)

? insert into book values('001','新概念1冊','英語','1','你試試?&nbsp')

insert into book values('002','新概念2冊','英語','2','你試試?&lt')

insert into book values('003','新概念3冊','英語','3','你試試?&gt')

insert into book values('004','新

練習題

Class表

Book表

--練習

--創建class表(code編碼,name名稱,model班型,book_code教材編碼,state編碼)

create table Class(Code char(20) not null,Name char(40) not null,Model char(40),Book_code char(10) not null,State char(10)

not null,Price char(10) not null)

insert into class values('PX201705001','初一地理強化','精品班','009','1','1180')

insert into class values('PX201705002','初一語文強化','精品班','007','0','1180')

insert into class values('PX201705003','初一數學強化','精品班','006','1','980')

insert into class values('PX201705004','初一英語強化','精品班','003','1','780')

insert into class values('0120176001','張曉明','一對一','','1','15000')

--創建教材表(code編碼,name名稱,suject科目,ver教材版本,desc教材描述)

? create table Book(Code char(20) not null,Name char(40) not null,Subject char(40) not null,Ver char(10) not null,desc char(10)

not null)

? insert into book values('001','新概念1冊','英語','1','你試試?&nbsp')

insert into book values('002','新概念2冊','英語','2','你試試?&lt')

insert into book values('003','新概念3冊','英語','3','你試試?&gt')

insert into book values('004','新概念4冊','英語','4','你試試?&quot')

insert into book values('005','新概念5冊','英語','5','你試試? 我會的!')

insert into book values('006','初一數學人教版1冊','數學','1','你試試? 哈飛')

insert into book values('007','初一語文人教版1冊','語文','1','你試試?我會的!')

insert into book values('008','初一語文人教版2冊','語文','2','你試“哈飛”?')

insert into book values('009','初一地理人教版1冊','地理','1','你試試<樸新>?')

insert into book values('010','初一生物人教版1冊','生物','1','你試試<樸新>?')

--1 請用1個sql獲取教材科目(subject)都有幾科(要求不重復)?

--考察關鍵字distinct

select distinct subject from book

--2 請用1個sql統計每個科目(subject)的教材共多少本?

--考察分組group by

select subject,count(*) as sum_sujects from book group by subject

--3 請用1個sql獲取有超過3本教材的科目和教材數量?

--考察過濾分組having

select subject,count(*) as sum_subject from book group by subject having count(*) >3

--4 請用1個sql查詢出班級表中所有班級信息和每個班級對應的教材名稱是什么?

--考察內聯結/自然聯結innor join

select class.*,book.name from class inner join book on class.book_code = book.code

select c.*,b.name from class as c,book as b where c.book_code = b.code

--加:請用1個sql查詢出班級表中所有班級信息和每個班級對應的教材名稱是什么?還要沒有教材版本的班級信息

--考察外聯結outer join? 不支持right outer join和full outer join;left outer join 表示從from子句中左邊的表(class表)中選擇所有行

select class.*,book.name from class left outer join book on class.book_code = book.code

--5 請用1個sql語句獲取班級類型(Model)為“精品班”且“教材的版本”為第一版的“有效”班級總價格是多少?

--考察and sum() 表別名

select c.code,c.model,c.book_code,c.state,b.code,b.ver,sum(c.price) as sum_price from class as c,book as b where c.model = '精品班' and c.book_code = b.code and b.ver = '1' and c.state = '1'

--6 請用一個sql把第4題目中班級對應教材為空的班級教材更新關聯成“初一生物人教版1冊”教材

select class.*, book.name from class left outer join book on class.book_code = book.code -- 第四題

--“初一生物人教版1冊”對應book_code = 010,更新之前為空的class表里的book_code為010就行

update class set book_code = '010' where code = '0120176001'

--7 請用一個sql把班級表的price字段進行擴容,改成varchar(20),原本是char(10)

alter table class modify column price varchar(20);

如果是int類型:alter table class modify column price int(20);


8 請用1個sql語句獲取描述desc中包含html轉義字符的記錄(例如: &lt:等)

select * from book where desc like ‘%&%’

轉義字符串的組成

轉義字符串(Escape Sequence),即字符實體(Character Entity)分成三部分:第一部分是一個&符號,英文叫ampersand;第二部分是實體(Entity)名字或者是#加上實體(Entity)編號;第三部分是一個分號。

轉義字符串(Escape Sequence)也稱字符實體(Character Entity)。在HTML中,定義轉義字符串的原因有兩個:第一個原因是像“<”和“>”這類符號已經用來表示HTML標簽,因此就不能直 接當作文本中的符號來使用。為了在HTML文檔中使用這些符號,就需要定義它的轉義字符串。當解釋程序遇到這類字符串時就把它解釋為真實的字符。在輸入轉 義字符串時,要嚴格遵守字母大小寫的規則。第二個原因是,有些字符在ASCII字符集中沒有定義,因此需要使用轉義字符串來表示。

9 請用一個sql語句獲取描述desc中包含三個英文字母連寫記錄

如果是oracle庫,可以用sql:

select * from book where REGEXP_LIKE(desc,'[[:alpha:]]{3}')

正則:

https://www.cnblogs.com/q1104460935/p/7991321.html

如果是mysql庫,可以用sql:但是沒搜出正確答案來

select * from book where desc like '%[a-z][a-z][a-z]%'

10 如果教材數據很多,執行上述查詢速度不是很理想,請說出你對數據庫表(或java代碼方面)的優化建議

這張表可以拆分,拆分成兩張表,書籍詳細信息表,書籍類型表。兩張表都建索引,這樣查詢就快了

1)、在數據庫設計方面:

(1)建立索引;

(2)分區(MySQL,比如按時間分區);

(3)盡量使用固定長度的字段;

(4)限制字段長度;

2)、在數據庫I/O方面:

(1)增加緩沖區;

(2)如果涉及表的級聯,不同的表存儲在不同的磁盤上,以增加I/O速度;

3)、在SQL語句方面:

(1)優化SQL語句,減少比較次數;

(2)限制返回的條目數(MySQL中用limit);

4)、在Java方面:

如果是反復使用的查詢,使用PrepaerdStatement減少查詢次數。

11 請寫出sql語言中truncate和Delect,Drop表操作命令的差別?

相同點:

  1).truncate和不帶where子句的delete、以及drop都會刪除表內的數據。

  2).drop、truncate都是DDL語句(數據定義語言),執行后會自動提交。

不同點:

  1). truncate 和 delete 只刪除數據不刪除表的結構(定義)   drop 語句將刪除表的結構被依賴的約束(constrain)、觸發器(trigger)、索引(index);依賴于該表的存儲過程/函數將保留,但是變為 invalid 狀態。

  2). delete 語句是數據庫操作語言(dml),這個操作會放到 rollback segement 中,事務提交之后才生效;如果有相應的 trigger,執行的時候將被觸發。   truncate、drop 是數據庫定義語言(ddl),操作立即生效,原數據不放到 rollback segment 中,不能回滾,操作不觸發 trigger。

  3).delete 語句不影響表所占用的 extent,高水線(high watermark)保持原位置不動   drop 語句將表所占用的空間全部釋放。   truncate 語句缺省情況下見空間釋放到 minextents個 extent,除非使用reuse storage;truncate 會將高水線復位(回到最開始)。

  4).速度,一般來說: drop> truncate > delete

  5).安全性:小心使用 drop 和 truncate,尤其沒有備份的時候.否則哭都來不及   使用上,想刪除部分數據行用 delete,注意帶上where子句. 回滾段要足夠大.   想刪除表,當然用 drop   想保留表而將所有數據刪除,如果和事務無關,用truncate即可。如果和事務有關,或者想觸發trigger,還是用delete。   如果是整理表內部的碎片,可以用truncate跟上reuse stroage,再重新導入/插入數據。   6).delete是DML語句,不會自動提交。drop/truncate都是DDL語句,執行后會自動提交。

  7)、TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同:二者均刪除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系統和事務日志資源少。DELETE 語句每次刪除一行,并在事務日志中為所刪除的每行記錄一項。TRUNCATE TABLE 通過釋放存儲表數據所用的數據頁來刪除數據,并且只在事務日志中記錄頁的釋放。

  8)、TRUNCATE TABLE 刪除表中的所有行,但表結構及其列、約束、索引等保持不變。新行標識所用的計數值重置為該列的種子。如果想保留標識計數值,請改用 DELETE。如果要刪除表定義及其數據,請使用 DROP TABLE 語句。   9)、對于由 FOREIGN KEY 約束引用的表,不能使用 TRUNCATE TABLE,而應使用不帶 WHERE 子句的 DELETE 語句。由于 TRUNCATE TABLE 不記錄在日志中,所以它不能激活觸發器。 10)、TRUNCATE TABLE 不能用于參與了索引視圖的表

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,362評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,577評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,486評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,852評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,600評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,944評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,944評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,108評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,652評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,385評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,616評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,111評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,798評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,205評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,537評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,334評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,570評論 2 379

推薦閱讀更多精彩內容

  • ORACLE自學教程 --create tabletestone ( id number, --序號usernam...
    落葉寂聊閱讀 1,102評論 0 0
  • 一. Java基礎部分.................................................
    wy_sure閱讀 3,830評論 0 11
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom閱讀 2,718評論 0 3
  • 1杏色和粉色的顏色搭配在一起,溫暖而優雅。 2搭配有層次感。顏色之間相互呼應。 3模特的衣服順應季節。冬天的溫暖感。
    青島金獅殷效娟閱讀 819評論 6 1
  • 月嬋清韻醉千古 秀木別枝守萬年 寂悅淡寧癡情望 風簫湖影心波連
    陽春一枝雪閱讀 240評論 2 11