MySQL數(shù)據(jù)庫系統(tǒng)原理與應(yīng)用章節(jié)練習(xí)題及答案_第1頁
MySQL數(shù)據(jù)庫系統(tǒng)原理與應(yīng)用章節(jié)練習(xí)題及答案_第2頁
MySQL數(shù)據(jù)庫系統(tǒng)原理與應(yīng)用章節(jié)練習(xí)題及答案_第3頁
MySQL數(shù)據(jù)庫系統(tǒng)原理與應(yīng)用章節(jié)練習(xí)題及答案_第4頁
MySQL數(shù)據(jù)庫系統(tǒng)原理與應(yīng)用章節(jié)練習(xí)題及答案_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

習(xí)題1

1.什么是數(shù)據(jù)?什么是信息?什么是數(shù)據(jù)處理?

數(shù)據(jù)是指存儲(chǔ)在某一種媒體上的能夠識(shí)別的物理符號(hào),用來記錄事物的情況,用類型和值

來表征。不同的數(shù)據(jù)類型,記錄的事物性質(zhì)不同。

信息是經(jīng)過加工處理的有用的數(shù)據(jù)。數(shù)據(jù)只有經(jīng)過提煉和抽象變成有用的數(shù)據(jù)才能成為

信息。信息仍以數(shù)據(jù)的形式表現(xiàn)。

數(shù)據(jù)處理是指將數(shù)據(jù)加工轉(zhuǎn)換成信息的過程。數(shù)據(jù)處理也叫信息處理。通過處理數(shù)據(jù)可

以獲得信息,通過分析和篩選信息可以產(chǎn)生決策。

2.什么是數(shù)據(jù)庫管理系統(tǒng)?什么是數(shù)據(jù)庫?什么是數(shù)據(jù)庫應(yīng)用系統(tǒng)?什么是數(shù)據(jù)庫系

統(tǒng)?

數(shù)據(jù)庫管理系統(tǒng)(DatabaseManagementsystem,簡稱DBMS)是用戶和操作系統(tǒng)之間的數(shù)

據(jù)管理軟件,用于管理和組織數(shù)據(jù)庫的創(chuàng)建、訪問、操作和維護(hù)。

數(shù)據(jù)庫(Database,簡稱DB)是指長期存儲(chǔ)在計(jì)算機(jī)內(nèi)的,按一定數(shù)據(jù)模型組織、存儲(chǔ)、

管理、可共享的數(shù)據(jù)集合,它包含了數(shù)據(jù)的結(jié)構(gòu)、關(guān)系和約束等信息。

數(shù)據(jù)庫應(yīng)用系統(tǒng)是基于數(shù)據(jù)庫的應(yīng)用軟件系統(tǒng),通過對數(shù)據(jù)庫的操作和管理來實(shí)現(xiàn)特定

的業(yè)務(wù)功能。

數(shù)據(jù)庫系統(tǒng)(Databasesystem,簡稱DBS)是由數(shù)據(jù)庫、數(shù)據(jù)庫管理系統(tǒng)和數(shù)據(jù)庫應(yīng)用系統(tǒng)

組成的集成系統(tǒng),它是由硬件、軟件、數(shù)據(jù)和人員組合起來為用戶提供信息服務(wù)的系統(tǒng),是

存儲(chǔ)介質(zhì)、處理對象和管理系統(tǒng)的集合體。

3.什么是數(shù)據(jù)庫系統(tǒng)的三級(jí)模式結(jié)構(gòu)?并畫圖表示。

數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)是按三級(jí)結(jié)構(gòu)、二級(jí)映象來組織的,以滿足不同層次的用戶對數(shù)據(jù)的

需求。這個(gè)結(jié)構(gòu)稱為數(shù)據(jù)庫的體系結(jié)構(gòu),也稱三級(jí)模式結(jié)構(gòu)。這種結(jié)構(gòu)是從數(shù)據(jù)庫管理系統(tǒng)的

角度來看的,是數(shù)據(jù)庫系統(tǒng)內(nèi)部的體系結(jié)構(gòu)。三級(jí)模式(外模式、模式、內(nèi)模式)是對數(shù)據(jù)的三

個(gè)抽象級(jí)別,二級(jí)映象在DBMS內(nèi)部實(shí)現(xiàn)這三個(gè)抽象層次的聯(lián)系和轉(zhuǎn)換。

4.信息有哪三種世界?分別具有什么特點(diǎn)?它們之間有什么聯(lián)系?

信息分為現(xiàn)實(shí)世界、信息世界、U算機(jī)世界。

信息的現(xiàn)實(shí)世界是指人們要管理的客觀存在的各種事物、事務(wù)之間的相互聯(lián)系及事物的

發(fā)生、變化過程。它客觀存在而不依賴于人們的思想。

信息世界是現(xiàn)實(shí)世界在人們頭腦中的反映,人們用思維,以現(xiàn)實(shí)世界為基礎(chǔ)作進(jìn)一步的抽

象,對事物進(jìn)行選擇、命名、分類等抽象工作之后,并用文字符號(hào)表示出來,就形成了信息世界。

計(jì)算機(jī)世界是將信息世界中的信息經(jīng)過人們的抽象和組織,按照特定的數(shù)據(jù)結(jié)構(gòu),即數(shù)據(jù)

模型,將數(shù)據(jù)存儲(chǔ)在計(jì)算機(jī)中。

信息的三種世界之間是可以進(jìn)行轉(zhuǎn)換的。人們常常首先將現(xiàn)實(shí)世界中客觀存在的事物或

對象抽象為某一種信息結(jié)構(gòu),這種結(jié)構(gòu)并不依賴于計(jì)算機(jī)系統(tǒng),是人們認(rèn)識(shí)的概念模型。然后再

將概念模型轉(zhuǎn)換為計(jì)算機(jī)上某一具體的DBMS支持的數(shù)據(jù)模型。

5.解釋概念模型中常用的概念:實(shí)體、屬性、碼、域、實(shí)體型、實(shí)體集、聯(lián)系。

實(shí)體:客觀存在并且可以互相區(qū)別的事物稱為實(shí)體。

屬性:實(shí)體所具有的某一特征稱為屬性。

碼:能在一個(gè)實(shí)體集中惟一標(biāo)識(shí)一個(gè)實(shí)體的屬性稱為碼。

域:某個(gè)(些)屬性的取值范圍稱為該屬性的域。

實(shí)體型:用實(shí)體名及其屬性名集合來抽象和刻畫的同類實(shí)體,稱為實(shí)體型。

實(shí)體集:同類型的實(shí)體集合稱為實(shí)體集。

聯(lián)系:聯(lián)系在信息世界中反映為實(shí)體(型)內(nèi)部的聯(lián)系和實(shí)體(型)之間的聯(lián)系。

?91?

習(xí)題2

1.簡述關(guān)系模型的完整性規(guī)則。

關(guān)系模型的完整性規(guī)則是對關(guān)系的某種約束條件。關(guān)系模型中可以有三類完整性約束:

實(shí)體完整性、參照完整性和用戶定義的完整性。其中實(shí)體完整性和參照完整性是關(guān)系模型必

須滿足的完整性約束條件,被稱做是關(guān)系的兩個(gè)不變性,應(yīng)該由關(guān)系系統(tǒng)自動(dòng)支持。

2.關(guān)系具有什么特點(diǎn)?

通常將關(guān)系模型成為關(guān)系或表,一個(gè)關(guān)系對應(yīng)一張二維表。

3.什么是關(guān)系規(guī)范化?美系規(guī)范化的目的是什么?關(guān)系規(guī)范化的基本方法是什么?INF至

BCNF,它們之間的關(guān)系是什么?

一個(gè)低一級(jí)范式的關(guān)系模式,通過分解可以轉(zhuǎn)換為若干個(gè)高一級(jí)范式的關(guān)系模式,這種過

程稱為關(guān)系的規(guī)范化。

關(guān)系的規(guī)范化主要目的是解決數(shù)據(jù)庫中數(shù)據(jù)冗余、插入異常、刪除異常和更新異常等數(shù)

據(jù)存儲(chǔ)問題。

關(guān)系規(guī)范化的基本方法是逐步消除關(guān)系模式中不合適的數(shù)據(jù)依賴,使關(guān)系模式達(dá)到某種

程度的分離,也就是說,不要將若干事物混在一起,而要彼此分開,用個(gè)關(guān)系表示一事或一

物,所以,規(guī)范化的過程也被認(rèn)為是“單一化”的過程。

從第一范式至BCNF,它們之間的關(guān)系是BCNFq3NFG2NFqiNFo從第一范式到第二范式,

消除了非主屬性對碼的部分函數(shù)依賴;從第二范式到第三范式,消除了非主屬性對碼的傳遞

函數(shù)依賴;從第三范式到BCNF,消除了關(guān)系中冗余的碼。

4.指出下列關(guān)系各屬于第幾范式。

1)學(xué)生(學(xué)號(hào),姓名,課程號(hào),成績);

2)學(xué)生(學(xué)號(hào),姓名,性別);

3)學(xué)生(學(xué)號(hào),姓名,院系名,院系地址);

4)員工(員工編號(hào),基本工資,崗位級(jí)別,崗位工資,獎(jiǎng)金,工資總額);

5)供應(yīng)商(供應(yīng)商編號(hào),零件號(hào),零件名,單價(jià),數(shù)量)。

答:

1)學(xué)生(學(xué)號(hào),姓名,課程號(hào),成績);

該關(guān)系屬于第二范式。因?yàn)閷W(xué)生的成績是依賴于學(xué)生和課程的關(guān)系,不是學(xué)生的屬性,

所以需要將其拆分成兩個(gè)關(guān)系:學(xué)生(學(xué)號(hào),姓名)和成績(學(xué)號(hào),課程號(hào),成績)。

2)學(xué)生(學(xué)號(hào),姓名,性別);

該關(guān)系屬于第一范式。每個(gè)屬性都是原子的,沒有重復(fù)的屬性。

3)學(xué)生(學(xué)號(hào),姓名,院系名,院系地址);

習(xí)題3

1.通過系統(tǒng)服務(wù)管理器啟動(dòng)或停止MySQL服務(wù)。

1)打開命令提示符或終端窗口,以管理員身份運(yùn)行。

2)輸入以下命令啟動(dòng)MySQL服務(wù):

在Windows上,輸入netstartmysql

如果MySQL服務(wù)已經(jīng)在運(yùn)行,可以使用以下命令停止MySQL服務(wù):

3)在Windows上,輸入netstopmysql。

2.通過MySQL的命令行客戶端程序先登錄MySQL服務(wù)器,再退出MySQL。

要通過MySQL的命令行客戶端程序登錄MySQL服務(wù)器并退出,可以按照以下步驟進(jìn)行

操作:

1)打開命令提示符或終端窗口。

2)輸入以下命令以登錄MySQL服務(wù)器:

mysql-u用戶名-p

其中,“用戶名”是你在MySQL服務(wù)器上的用戶名。執(zhí)行該命令后,系統(tǒng)會(huì)提示你輸入

密碼。

3)輸入密碼并按下回車鍵。如果密碼正確,你將成功登錄到MySQL服務(wù)器,并且命令

行提示符會(huì)變?yōu)閙ysql>o

4)在MySQL服務(wù)器上執(zhí)行你需要的操作,例如執(zhí)行SQL查詢、創(chuàng)建數(shù)據(jù)庫等。

5)當(dāng)你完成操作后,可以使用以下命令退出MySQL客戶端程序:

exit

或者按下Ctrl+D組合鍵。

3.在命令提示符窗口中,如何以管理員身份登錄MySQL服務(wù)器,使用什么命令?

使用以下命令:

mysql-uroot-p

其中,root是MySQL服務(wù)器上的管理員賬戶名。執(zhí)行該命令后,系統(tǒng)會(huì)提示你輸入密

碼,

習(xí)題4

1.使用MySQLCommandLineClient登錄MySQL服務(wù)器,先用SQL語句創(chuàng)建book數(shù)據(jù)

庫,再查看MySQL系統(tǒng)中還存在哪些數(shù)據(jù)庫,查看支持的存儲(chǔ)引擎類型。

I)打開命令提示符或終端窗口。

2)輸入以下命令以登錄MySQL服務(wù)器:

mysql-u用戶名-p

其中,“用戶名”是你在MySQL服務(wù)器上的用戶名。執(zhí)行該命令后,系統(tǒng)會(huì)提示你輸入

密沼。

3)輸入密碼并按下回車鍵。如果密碼正確,你將成功登錄到MySQL服務(wù)器,并且命令

行提示符會(huì)變?yōu)椤癿ysql>"。

4)使用以下SQL語句創(chuàng)建名為book的數(shù)據(jù)庫:

CREATEDATABASEbook;

5)使用以下SQL語句查看MySQL系統(tǒng)中存在的數(shù)據(jù)庫:

SHOWDATABASES;

6)使用以下SQL語句查看支持的存儲(chǔ)引擎類型:

SHOWENGINES;

2.在NavicatforMySQL中,先使用SQL語句創(chuàng)建salary_managemen數(shù)據(jù)庫,再使用

菜單方式刪除salary_managemen數(shù)據(jù)庫。

CREATEDATABASEsalary_managemen;

?6?

習(xí)題5

有一個(gè)員工工資管理數(shù)據(jù)庫salary_managemen,包括三個(gè)表:部門表department>員工

表employee和工資表salary,這三個(gè)表的結(jié)構(gòu)見表5-8、表5-9和表5-10。

表5-8部門表department的結(jié)構(gòu)

歹IJ名數(shù)據(jù)類型約束說明

部門編號(hào)定長字符串,長度為2主犍,非空值部門編號(hào):2位數(shù)字

部門名變長字符串,長度為2。非空值部門名:2U個(gè)字符

負(fù)責(zé)人變長字符串,長度為I0空值部門負(fù)責(zé)人:I0個(gè)字符

人數(shù)整數(shù)類型空值部門人數(shù)INT

表5-9員工表employee的結(jié)構(gòu)

列名數(shù)據(jù)類型約束說明

部門編號(hào)定長字符串,長度為2非空值部門編號(hào)

員工編號(hào)定長字符串,長度為4主鍵,非空值員工編號(hào),4位數(shù)字

姓名變長字符串,長度為10非空值姓名

性別定長字符串,長度為】非空值件別

續(xù)表

歹U名數(shù)據(jù)類型約束說明

生日DATE生日

入職時(shí)間DATE入職時(shí)間

離職時(shí)間DATE離職時(shí)間

在職狀態(tài)定長字符串,長度為2在職狀態(tài):在職、離職、休假

表5-10工資表salary的結(jié)構(gòu)

歹IJ名數(shù)據(jù)類型約束說明

部門編號(hào)定長字符串,長度為2非空值部門編號(hào)

員工編號(hào)定長字符串,長度為4非空值員工編號(hào)

姓名變長字符串,長度為10非空值姓名

年月標(biāo)識(shí)DATE非空值年月標(biāo)識(shí)

基本工資DECIMAL(10,2)崗位工資

績效工資DECIMAL(10,2)績效工資

補(bǔ)貼DECIMAL(10.2)補(bǔ)貼

扣款DECIMAU10.2)扣款

應(yīng)發(fā)工資DECIMAL/10.2)應(yīng)發(fā)工資

社保代扣DECIMALS0,2)社保代扣

實(shí)發(fā)工資DECIMAL(10,2)結(jié)算實(shí)發(fā)

1.用SQL語句創(chuàng)建數(shù)據(jù)庫salary_managcmcno

CREATEDATABASEsalary_managemen;

2.用SQL語句創(chuàng)建3個(gè)表:部門表department>員工表employee和工資表salary,存

儲(chǔ)引擎和字符編碼均采用默認(rèn)值。

USEsalary_managemen;

DROPTABLEIFEXISTSdepartment;

CREATETABLEdepartment

(

部門編號(hào)CHAR(2)PRIMARYKEYNOTNULL,

部門名VARCHARQO)NOTNULL,

負(fù)責(zé)人VARCHAR(IO),

人數(shù)INT

DROPTABLEIFEXISTSemployee;

CREATETABLEemployee

(

部門編號(hào)CHAR(2)NOTNULL,

員工編號(hào)CHAR(4)PRIMARYKEYNOTNULL,

姓名VARCHAR(IO)NOTNULL,

才生別CHAR(l)NOTNULL,

生日DATE,

入職時(shí)間DATE,

離職時(shí)間DATE,

在職狀態(tài)CHAR(2)

DROPTABLEIFEXISTSsalary;

CREATETABLEsalary

(

部門編號(hào)CHAR(2)NOTNULL,

員工編號(hào)CHAR(4)NOTNULL,

姓名VARCHAR(IO)NOTNULL,

年月標(biāo)識(shí)DATENOTNULL,

基本工資DECIMAL。0,2),

績效工資DECIMAL。0,2),

補(bǔ)貼DECIMAL。0,2),

扣款DECIMAL。0,2),

?8?

應(yīng)發(fā)工資DECIMAL410,2),

社保代扣DECIMAL。0,2),

實(shí)發(fā)工資DECIMAL(10,2)

習(xí)題6

重新定義員工工資管理數(shù)據(jù)庫salary_managemen中的表利聯(lián)系,包括部門表department

員工表employee和工資表salary。這三個(gè)表的結(jié)構(gòu)見表6-3、表6-4和表6-5。

表6-3部門表department的結(jié)構(gòu)

歹IJ名數(shù)據(jù)類型約束說明

部門編號(hào)定長字符串,K度為2主鍵部門編號(hào):2位數(shù)字

部門名變長字符串,長度為20非空值部門名:20個(gè)字符

負(fù)W人變長字符串,長度為10空值部門負(fù)責(zé)人:10個(gè)字符

人數(shù)整數(shù)類型空值部門人數(shù)INT

表6-4員工表employee的結(jié)構(gòu)

歹U名數(shù)據(jù)類型約束說明

部門編號(hào)定長字符串,長度為2外鍵部門編號(hào)

員工編號(hào)定長字符串,長度為4主鍵員工編號(hào):4位數(shù)字

姓名變長字符串,長度為10非空值姓名

性別定長字符串,長度為1非空值,默認(rèn)男性別狀態(tài):男、女

生日DATE檢查約束,生日生日

入職時(shí)間DATE入職時(shí)間

離職時(shí)間DATE檢查約束,離職時(shí)間大于入職時(shí)間離職時(shí)間

在職狀態(tài)定長字符串,長度為2默認(rèn)值約束,默認(rèn)在職在職狀態(tài):在職、離職、休假

表6-5工資表salary的結(jié)構(gòu)

歹U名數(shù)據(jù)類型約束說明

部門編號(hào)定長字符串,長度為2外鍵部門編號(hào)

員工編號(hào)定長字符串,長度為4主鍵員工編號(hào)

姓名變長字符串,氏度為10非空值姓名

年月標(biāo)識(shí)DATE主鍵年月標(biāo)識(shí)

基本工資DECIMAL。0,2)崗位工資

績效工資DECIMAL。0,2)績效工資

補(bǔ)貼DECIMAL(IO,2)補(bǔ)貼

扣款DECIMAL(IO,2)扣款

應(yīng)發(fā)工資DECIMAL(IO,2)應(yīng)發(fā)工資

社保代扣DECIMAL(IO,2)社保代扣

實(shí)發(fā)工資DECIMAL(10.2)結(jié)算實(shí)發(fā)

1.用SQL語句創(chuàng)建數(shù)據(jù)庫salary_managemen

?10?

DROPDATABASEIFEXISTSsalary_managemen;

CREATEDATABASEsalary_managemen;

2.用SQL語句創(chuàng)建上述三個(gè)表,即部門表departments員工表employee和工資表salary,

存儲(chǔ)引擎和字符編碼都采用默認(rèn)值。

USEsalary_managemen;

DROPTABLEIFEXISTSdepartment;

CREATETABLEdepartment

(

部門編號(hào)CHAR(2)PRIMARYKEY,

部門名VARCHAR(20)NOTNULL,

負(fù)責(zé)人VARCHAR(IO),

人數(shù)INT

DROPTABLEIFEXISTSemployee;

CREATETABLEemployee

(

部門編號(hào)CHAR(2)REFERENCESdepartment(部門編號(hào))ONUPDATERESTRICT

ONDELETERESTRICT,

員工編號(hào)CHAR(4)PRIMARYKEY,

姓名VARCHAR(IO)NOTNULL,

性別ENUMC男;女)NOTNULLDEFAULT'男二

生日DATECHECK(生日>,1970-1-I1),#列級(jí)只能引用本列的字段

入職時(shí)間DATE,

離職時(shí)間DATE,

在職狀態(tài)ENUM('在職'離職'休假')NOTNULLDEFAULT'在職',

CONSTRAINTCK_employeeCHECK(離職時(shí)間〉入職時(shí)間)

DROPTABLEIFEXISTSsalary;

CREATETABLEsalary(

部門編號(hào)CHAR(2),

員工編號(hào)CHAR⑷,

姓名VARCHAR(IO)NOTNULL,

年月標(biāo)識(shí)DATE,

基本工資DECIMAL。0,2),

績效工資DECIMAL/10,2),

補(bǔ)貼DECIMAL。0,2),

扣款DECIMALS0,2),

應(yīng)發(fā)工資DECIMAL。0,2),

社保代扣DECIMAL。0,2),

實(shí)發(fā)工資DECIMALS0,2),

CONSTRAINTPK^salaryPRIMARYKEY(員工編號(hào),年月標(biāo)識(shí)),

CONSTRAINTFK_salaryFOREIGNKEY(音B門編號(hào))REFERENCESdepartment(部門

編號(hào))ONUPDATECASCADEONDELETECASCADE

);

3.先顯示salary表的外鍵約束,然后刪除salary表的外鍵約束;再顯示salary表表的創(chuàng)

建語句,最后再添加該表的外鍵約束。

1)在MySQL中,可以使用以下SQL語句來顯示salary表的外鍵約束:

SHOWCREATETABLEsalary;

執(zhí)行以上語句后,將會(huì)顯示salary表的創(chuàng)建語句,其中包含了外鍵約束的定義。

2)刪除salary表的外鍵約束:

ALTERTABLEsalaryDROPFOREIGNKEYFK.salary;

3)再顯示salary表表的創(chuàng)建語句:

SHOWCREATETABLEsalary;

4)添加該表的外鍵約束:

ALTERTABLEsalary

ADDCONSTRAINTFK_salaryFOREIGNKEY(部門編號(hào))REFERENCES

departmenl(部門編號(hào))ONUPDATECASCADEONDELETECASCADE;

?12?

習(xí)題7

1.員工工資管理數(shù)據(jù)庫salary_managemen中3個(gè)表的記錄分別見表7-5、表7-6和表7-7o

表7-5department表中的記錄

部門編號(hào)部門名負(fù)責(zé)人人數(shù)

II人力部劉一5

21研發(fā)部李四60

31市場都周八40

41財(cái)務(wù)部吳九3

表7-6employee表中的記錄

部門編號(hào)員工編號(hào)姓名性別生日入職時(shí)間離職時(shí)間在職狀態(tài)

111132劉一女1998-10-232021-04-10在職

111152除一女1995-09-122020-05-15在職

II1163張三男1992-12-252021-08-012022-04-30離職

212151李匹男1990-07-082020-11-01在職

212175王五男1992-05-072021-03-01在職

212192趙六女1998-06-152021-05-012022-03-31離職

313121孫七女1996-10-142020-08-10在職

313122周八女1998-09-202021-04-01在職

414125吳九女1997-12-282022-06-19在職

414128鄭十女1991-11-192022-08-01在職

表7-7salary表中的記錄

部門編號(hào)員工編號(hào)姓名年月標(biāo)識(shí)基本工資績效工資補(bǔ)貼扣款應(yīng)發(fā)工資社保代扣實(shí)發(fā)工資

II1132劉一2022-05-01300040002000-500

II1152陳二2022-05-013(X)()4(XM)100()-50()

111163張三2022-05-01300040001000-500

212151李四2022-05-01400050003000-500

212175王五2022-05-01400050002000-500

212192趙六2022-05-01400050001000-500

313121孫七2022-05-015(X)06(XX)200()-500

313122周八2022-05-015(X)()6(X)()20()()-50()

414125吳九2022-05-01600070003000-500

414128鄭十2022-05-01600070002000-500

II1132劉一2022-06-01300040003000-500

111152陳二2022-06-01300040001000-500

212151李四2022-06-014(X)05(X)()20()()-50()

212175王五2022-()6-014(X)05(X)()20()()-50()

313121孫七2022-06-01500060003000-600

313122周八2022-06-01500060002000-600

414125吳九2022-06-01600070003000-800

414128鄭十2022-06-01600070002000-800

用SQL語句插入表中所有記錄。

USEsalary_managemen;

INSERTINTOd叩anmem(部門編號(hào),部門名,負(fù)責(zé)人,人數(shù))

VALUES

人力部劉一5),

C21」研發(fā)部/李四:60),

(3市場部:周八140),

('417財(cái)務(wù)部7吳九;3);

INSERTINTOemployee(部門編號(hào),員工編號(hào),姓名,性別,生日,入職時(shí)間,離職時(shí)間,

在職狀態(tài))

VALUES

('1171132','劉一','女','1998-10-23','2021-04-10',NULLJ在職)

('1「,’1152','陳二','女','1995-09-12','2020-05-15',NULL,,在職),

('11','1163','張三','男丁1992-12-25;'2021-08-01','2022-04-30','離職'),

('2'2151「李四「男’1990-07-08','2020-11-0NULL,'在職'),

('21',‘2175’,‘王五','男',’1992-05-07丁2021-03-0「,NULL」在職)

('21丁2192」趙六丁女71998-06-1572021-05-01','2022-03-31丁離職'),

('31,‘3121’,'孫七丁女丁1996-10-14丁2020-0800',NULL,'在職'),

('31丁3122丁周八「女’1998-09-20','2021-04-01',NULLJ在職)

('41,‘4125’,'吳九丁女丁1997?12?28','2022?06?19',NULL,'在職'),

('41',‘4128‘,‘鄭十‘,‘女',’1991-11-19','2022-08-01',NULL,'在職');

INSERTINTOsalary(部門編號(hào),員工編號(hào),姓名,年月標(biāo)識(shí),基本工資,績效工資,補(bǔ)貼,

扣款)

VALUES

('1「,’1132','劉一','2022-05-01','3000','4000','2000','-500'),

('1「,’1152','陳二','2022-05-01','3000',4000','1000','-500'),

('1「,’1163','張三','2022-05-01','3000','4000','1000','-500'),

C2r,'215T,*2022-05-01;'40001,'5000','3000','-500'),

C2T,,2175;'3E5L;,2022-05-01;'4000;'5000',,2000','-500'),

?14?

('21\'2192',A','2022-05-01;'4000','5000','1000','-500'),

OV,3121','2022-05-01;'5000','6000;'2000;'-5001),

⑶,,'3122「周八「2022-05-01丁5000「6000丁2000「-500)

('4「,'4125/吳九'2022-05-01','6000丁7000」3000「500'),

('41',4128','鄭十'2022-05-01','6000丁7000','2000','-500'),

(IT,'1132',^lj—\'2022-06-0r,3000','4000',3000,,,-500,),

('1一,'1152','陳二'2022-06-01','3000','4000','1000','-500'),

(2r,1215r,'2022-06-0r,'4000','5000;2000','-500'),

('21J2175','王五','2022?06?01','4000','5000','2000','-500'),

(3T,13121','2022-06-01;'5000','6000\'SOOO1,'-600'),

(311,,3122','2022-06-01;'50001,'6000;7000','-6001),

('41','4125丁吳九丁2022-06-01'6000丁7000「3000丁-800'),

(14r,4128','2022-06-Or,'6000','7000\^OOO1,'-800');

2.在salary表中,計(jì)算年月標(biāo)識(shí)為2022-05-01的所有記錄,計(jì)算方法如下:

應(yīng)發(fā)工資=基本工資+績效工資+補(bǔ)貼?扣款

假設(shè):社保代扣=(基本工資+績效工資+補(bǔ)貼)*30%

實(shí)發(fā)工資=應(yīng)發(fā)工資?社保代扣

寫出實(shí)現(xiàn)以上功能的SQL語句。

UPDATEsalary

SET應(yīng)發(fā)工資=基本工資+績效工資+補(bǔ)貼-扣款,

社保代扣=(基本工資+績效工資+補(bǔ)貼)*0.30,

實(shí)發(fā)工資=應(yīng)發(fā)工資-社保代扣

WHERE年月標(biāo)識(shí)=,2022-05-01';

習(xí)題8

1.在salary_managemen數(shù)據(jù)庫中,查詢employee表中的所有記錄。

USEsalary_managcmcn;

SELECT*FROMemployee;

2.查詢employee表中的“員工編號(hào)”、“姓名”、“性別”和“生口”列的所有記錄。

SELECT員工編號(hào),姓名,性別,生日FROMemployee;

3.在employee表中查詢“入職時(shí)間”在2021年以前的員工記錄。

SELECT*FROMemployeeWHEREYEAR(入職時(shí)間)<2021;

4.在salary表中,查詢“基本工資”在4000?5000元范圍內(nèi)的員工記錄,并顯示“部

門名”。

SELECTsalary.部門編號(hào),department.部門名,員工編號(hào),姓名,年月標(biāo)識(shí),基本工資,績

效工資,補(bǔ)貼,扣款,應(yīng)發(fā)工資,社保代扣,實(shí)發(fā)工資

FROMsalaryINNERJOINdepartment

ONsalary.部門編號(hào)二deparlmenl.部門編號(hào)

WHERE基本工資BETWEEN4000AND5000;

?16?

習(xí)題9

1.在salary_managemen數(shù)據(jù)庫的department表中,定義“部門編號(hào)”為唯一索引,以

升序排列。然后查看在department表上的索引。

USEsalary_managemen;

CREATEUNIQUEINDEXdep_noONdeparlment(部門編號(hào)ASC);

SHOWINDEXFROMdeparlment;

2.在employee表中,創(chuàng)建“部門編號(hào)”和“員工編號(hào)”的多歹U索弓I。然后查看在employee

表上的索引。

CREATEINDEXdep_empONemployee(部門編號(hào),員工編號(hào));

SHOWINDEXFROMemployee;

習(xí)題10

1.在salary_managemen數(shù)據(jù)庫的employee表中,創(chuàng)建名為view_employee的視圖,要

求該視圖包含employee表上所有列和在職員工的記錄,且要求今后對該視圖數(shù)據(jù)的修改都必

須符合這個(gè)條件。

USEsalary_managemen;

DROPVIEWIFEXISTSview_employee;

CREATEVIEWview_employee

ASSELECT*FROMemployeeWHERE在職狀態(tài)二'在職,

WITHCHECKOPTION;

2.使用view_employee觀圖統(tǒng)計(jì)每個(gè)部門的員工人數(shù)。

SELECT部門編號(hào),COUNT(*)人數(shù)FROMview_employee

GROUPBY部門編號(hào);

?18?

習(xí)題11

1.在salary_managemen數(shù)據(jù)庫中,創(chuàng)建自定義函數(shù),給定姓名,并返回該員工編號(hào)。

USEsalary_managcmcn;

CREATEFUNCTIONfu_gel_id(nameCHAR(IO))

RETURNSCHAR(4)#返回的員工編號(hào)的字符串寬度

DETERMINISTIC

BEGIN

DECLAREemp_idCHAR(4);#返回的員工編號(hào)

SELECT員工編號(hào)INTOemp.idFROMemployeeWHERE姓名二name;

IFemp_idISNULLTHEN

RETURN'沒有該員工';

ELSE

RETURNemp_id;#返|§1字符串

ENDIF;

END

SELECTfu_get」d('張三

2.創(chuàng)建自定義函數(shù),給定部門編號(hào),并返回該部門的部門名、負(fù)責(zé)人和人數(shù)。

CREATEFUNCTIONfu_get_dep(dep_idCHAR(2))

RETURNSCHAR(50)#返回的部門信息字符串的寬度

DETERMINISTIC

BEGIN

DECLAREdep.messageCHAR(50);#返回的部門信息

DECLAREdep_name,dep_headCHAR(20);

DECLAREdep_noINT;

SELECT部門名,負(fù)責(zé)人,人數(shù)INTOdep_name,dep_head,dep_noFROMdepartment

WHERE部門編號(hào):dep_id;

IFdep_nameISNULLTHEN

RETURN'沒有該部門';

ELSE

SETdep_message=CONCAT(dep_id,dep_name,'負(fù)責(zé)人:',dep_head,,人

數(shù):\dep_no);#連接字符串并賦值

RETURNdep_message;#返回的部門信息字符串

ENDIF;

END;

SELECTfu_get_dep('31');

習(xí)題12

1.在salary_managemen數(shù)據(jù)庫中,創(chuàng)建存儲(chǔ)過程,給定員工編號(hào),查詢其全部工資記

錄,

CREATEPROCEDUREpr_id(INemp_idCHAR(4))

READSSQLDATA

COMMEN「給定員工編號(hào),查詢其全部工資記錄,

BEGIN

SELECT*FROMsalaryWHERE員工編號(hào)一emp_id;

END;

CALLpr_id('1152');

2.創(chuàng)建存儲(chǔ)過程,給定部門編號(hào),在employee表中統(tǒng)計(jì)該部門在職人數(shù)并顯示。

CREATEPROCEDUREpr_emp(INdep_idCHAR(2),OUTdep_noINT)

DETERMINISTIC

BEGIN

SELECTCOUNTS)INTOdep_noFROMemployee

WHERE部門編號(hào)二dep_idAND在職狀態(tài)二'在職';

END;

SET@d_id='21';

SET@d_no=();

CALLpr_emp(@d_id,@d_no);

SELECT@d_no;

3.創(chuàng)建存儲(chǔ)過程,在employee表中統(tǒng)計(jì)所有部門的在職人數(shù),并保存到department

表中。

UPDATEdepartment

SET人數(shù)=(

SELECTCOUNT。

FROMemployee

WHEREemployee.部門編號(hào)=department.部門編號(hào)ANDemployee.在職狀態(tài)='在

職,

);

CREATEPROCEDUREpr_calculatcEmployccCount()

BEGIN

UPDATEdepartment

?20?

SET人數(shù)二(

SELECTCOUNT(*)

FROMemployee

WHEREemployee.部門編號(hào)=d叩ailment.部門編號(hào)ANDemployee.在職狀態(tài)

二'在職,

);

END;

這個(gè)存儲(chǔ)過程使用了子查詢來統(tǒng)計(jì)每個(gè)部門的在職人數(shù),并將結(jié)果更新到department表

中的“人數(shù)”字段中。子查詢中的條件是employee表中的“部門編號(hào)”與外部查詢中的

department表中的“部門編號(hào)”相匹配。

CALLpr_calculateEmployeeCount();

SELECT*FROMdepartment;

4.創(chuàng)建存儲(chǔ)過程,計(jì)算所有員工的應(yīng)發(fā)工資、實(shí)發(fā)工資,并保存到salary表中。

CREATEPROCEDUREpr_salary_all()

READSSQLDATA

BEGIN

UPDATEsalarySET應(yīng)發(fā)工資=基本工資+績效工資+補(bǔ)貼-扣款,

社保代扣=(基本工資+績效工資+補(bǔ)貼)*0.30,

實(shí)發(fā)工資=應(yīng)發(fā)工資-社保代扣;

END;

CALLpr_salary_all();

5.創(chuàng)建存儲(chǔ)過程,在這個(gè)存儲(chǔ)過程中創(chuàng)建一個(gè)游標(biāo),在employee表中統(tǒng)計(jì)所有部門的

在職人數(shù),并保存到department表中。

CREATEPROCEDUREpr_calculateEmployeeCount_cur()

BEGIN

DECLAREdepartment_idINT;

DECLAREcmploycc_count1NT;

DECLAREdoneBOOLEANDEFAULTFALSE;

DECLAREcurCURSORFORSELECT部門編號(hào)FROMdepartment;

DECLARECONTINUEHANDLERFORNOTFOUNDSETdone=TRUE;

OPENcur;

read_loop:LOOP

FETCHcurINTOdepartment_id;

IFdoneTHEN

LEAVEread_loop;

ENDIF;

SELECTCOUNT(*)INTOemployee_countFROMemployee

WHERE部門編號(hào)=department_idAND在職狀態(tài)='在職';

UPDATEdepartmentSET人數(shù)=employee_count

WHERE部門編號(hào)=department_id;

ENDLOOP;

CLOSEcur;

END;

這個(gè)存儲(chǔ)過程會(huì)創(chuàng)建一個(gè)游標(biāo),遍歷department表中的每個(gè)部門,然后在employee表中

統(tǒng)計(jì)該部門的在職人數(shù),并將結(jié)果更新到department表中的“人數(shù)”字段中。

CALLpr_calculateEmpIoyeeCount_cur();

SELECT*FROMdepartment;

?22?

習(xí)題13

1.在salary_managemen數(shù)據(jù)庫中的employee表上定義一個(gè)觸發(fā)器tr_employee_delete,

當(dāng)該員工離職時(shí),把該員工的信息添加到被刪除員工記錄的表employee_delete中,然后刪除

employee表中該員工的記錄。

USEsalary_managemen;

-創(chuàng)建被刪除員工記錄的表employee_delete

CREATETABLEIFNOTEXISTSemployee_delete(

department_idCHAR(2),#部門編號(hào)

employee_idCHAR(4),#員工編號(hào)

employee_nameVARCHAR(10),#姓名

employee_sexCHAR(1),#性另1」

employee_birthdayDATE,#生日

entry_dateDATE,#入職時(shí)間

resignation_dateDATE#離職時(shí)間

);

SHOWTRIGGERS;

DROPTRIGGERIFEXISTStr_eniployee_delete;

-創(chuàng)建觸發(fā)器lr_employee_deleie

CREATETRIGGERtr_employee_delete

AFTERDELETEONemployee

FOREACHROW

BEGIN

INSERTINTOemployce_dclete(dcpartmcnt_id,cmployce_id,cmployce_name,

employee_sex,

employee_birthday,enlry_date,resignation_date)

VALUES(OLD.部門編號(hào),OLD.員工編號(hào),OLD.姓名,OLD.性別,OLD.生日,OLD.A

職時(shí)間,CURDATE。);

END;

以上代碼中,首先創(chuàng)建了一個(gè)名為empk)yee_delete的表,用于存儲(chǔ)被刪除員工的信息。

然后創(chuàng)建了一個(gè)名為tr_employee_delete的觸發(fā)器,當(dāng)employee表中的記錄被刪除時(shí),觸發(fā)

器會(huì)將被刪除員工的信息插入到employee_delete表中。

最后,通過執(zhí)行DELETE語句來刪除employee表中指定員工的記錄。指定要?jiǎng)h除的員

工的實(shí)際編號(hào)。

--刪除employee表中的員工記錄,刪除1163號(hào)員工,觸發(fā)執(zhí)行tr_employee_delete

DELETEFROMemployeeWHERE員工編號(hào)=,1163,;

—查看employee表中的記錄

SELECT*FROMemployee;

—查看cmploycc_dclctc表中的記錄

SELECT*FROMemplo)ee_delele;

2.創(chuàng)建事件ev_count,每月1日自動(dòng)計(jì)算每個(gè)部門的員工人數(shù),并更新到department

表中。

—?jiǎng)?chuàng)建事件ev_count

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論