【SQL】基礎實驗3——表的管理

 

一、實驗目的

1、掌握使用T-SQL語句實現表的定義,包括創建、修改和刪除操作

2、掌握使用T-SQL語句實現對錶進行約束,包括主鍵約束、檢查約束、默認約束和外鍵約束操作

3、掌握使用T-SQL語句實現表的更新,包括插入、修改和刪除操作

 

二、實驗內容、方法、步驟和結果與分析

(一)表的定義及約束

實驗內容:

1.建立名稱爲“職工”的數據庫,數據庫屬性自定。按以下要求完成各步操作,保存或記錄完成各題功能的Transact-SQL語句。

方法:

Use master

GO

/*創建職工數據庫*/

CREATE DATABASE 職工

ON PRIMARY

(NAME=f1,

FILENAME='D:\sql_data\f1.mdf',

SIZE=3,

MAXSIZE=unlimited,

FILEGROWTH=5%)

LOG ON

(NAME=lg1,

FILENAME='D:\sql_log\lg.ldf',

SIZE=3,

MAXSIZE=10,

FILEGROWTH=1)

GO

步驟及結果:

分析:使用CREATEDATABASE語句創建數據庫,文件組中文件屬性包括文件名(邏輯名和物理名)、初始大小、上限大小、增長速度。

 

實驗內容:

2.使用CREATE TABLE語句在“職工”數據庫中按以下要求創建各表。

(1)“職工基本信息”表:

字段名

職工編號

姓名

性別

出生日期

部門編號

類型及說明

Char(5),主鍵

Char(10),不允許爲空

Char(2)

Datetime

Char(3)

(2)“工資”表:

字段名

職工編號

基本工資

獎金

實發工資

類型及說明

Char(5),主鍵

Money

Money

Money

(3)“部門信息”表:

字段名

部門編號

部門名稱

部門簡介

類型及說明

Char(3),主鍵

Char(20),不允許爲空

Vachar(50)

方法:

Use職工

GO

/*創建職工基本信息表*/

CREATE TABLE 職工基本信息

(

   職工編號 Char(5) PRIMARY KEY,/*主鍵*/

   姓名 Char(10) NOT NULL,/*非空*/

   性別Char(2),

   出生日期 Datetime,

   部門編號 Char(3)

)

/*創建工資表*/

CREATE TABLE 工資

(

   職工編號 Char(5) PRIMARY KEY,

   基本工資 Money,

   獎金 Money,

   實發工資 Money

)

/*創建部門信息表*/

CREATE TABLE 部門信息

(

   部門編號 Char(3) PRIMARY KEY,

   部門名稱 Char(20) NOT NULL,

   部門簡介 Varchar(50)

)

GO

步驟及結果:

分析:在使用數據庫下,使用CREATE TABLE<表名>(列名及相關屬性)語句創建表。

 

實驗內容:

3.使用ALTER TABLE語句向“職工基本信息”表中添加一列,列名稱爲“職稱”,類型爲char,長度爲10。

方法:

USE職工

GO

/*對職工數據庫中職工基本信息表添加職稱列*/

ALTER TABLE 職工基本信息 ADD職稱 Char(10)

GO

步驟及結果:

分析:使用ALTER TABLE<表名>語句聲明需要操作的表,ADD添加列。

 

實驗內容:

4.使用ALTER TABLE語句刪除第3題添加的“職稱”列。

方法:

USE職工

GO

/*對職工數據庫中職工基本信息表刪除職稱列*/

ALTER TABLE 職工基本信息 DROP COLUMN 職稱

GO

步驟及結果:

分析:使用ALTER TABLE<表名>語句聲明需要操作的表,DROP添加列。

 

實驗內容:

5.爲“部門信息”表的部門名稱字段添加一個唯一性約束,以限制部門名稱的唯一性。

方法:

Use職工

GO

/*爲職工數據庫中部門信息表中部門名列,添加一個唯一性約束*/

ALTER TABLE 部門信息

ADD CONSTRAINT IX_部門信息 UNIQUE (部門名稱)

GO

步驟及結果:

分析:使用ADD CONSTRAINT語句添加約束,其中唯一性約束約束名以IX_開頭,且需使用關鍵字UNIQUE。

 

實驗內容:

6.限制“職工基本信息”表的“性別”字段只接受“男”和“女”兩個值。

方法:

Use職工

GO

/*爲職工數據庫中職工信息表中性別名列,添加檢查約束*/

ALTER TABLE 職工基本信息

ADD CONSTRAINT CK_性別 CHECK (性別='男' OR性別='女')

GO

步驟及結果:

分析:檢查性約束約束名以CK_開頭,且需要關鍵字CHECK,可用邏輯表達式來設置約束條件。

 

實驗內容:

7.限制“工資”表的“基本工資”字段的值爲不小於0的數。

方法:

Use職工

GO

/*爲職工數據庫中工資表中基本工資列,添加檢查約束*/

ALTER TABLE 工資

ADD CONSTRAINT CK_基本工資 CHECK (基本工資>0)

GO

步驟及結果:

分析:檢查性約束約束名以CK_開頭,且需要關鍵字CHECK,可用邏輯表達式來設置約束條件。

 

實驗內容:

8.限制“工資”表的“基本工資”和“獎金”字段的默認值爲0。

方法:

Use職工

GO

/*爲職工數據庫中工資表中基本工資列,添加默認約束*/

ALTER TABLE 工資

ADD CONSTRAINT DE_基本工資 DEFAULT 0 FOR基本工資

GO

/*爲職工數據庫中工資表中獎金列,添加默認約束*/

ALTER TABLE 工資

ADD CONSTRAINT DE_獎金 DEFAULT 0 FOR獎金

GO

步驟及結果:

基本工資默認約束:

獎金默認約束:

分析:默認性約束約束名以DE_開頭,並使用DEFAULT(默認值)FOR(約束列)語句。

 

實驗內容:

9.設“職工基本信息”表的“性別”字段默認值爲“男”。

方法:

Use職工

GO

/*爲職工數據庫中職工基本信息表中性別列,添加默認約束*/

ALTER TABLE 職工基本信息

ADD CONSTRAINT DE_性別 DEFAULT '男' FOR 性別

GO

步驟及結果:

分析:默認性約束名以DE_開頭,並使用DEFAULT(默認值)FOR(約束列)語句。

 

實驗內容:

10.創建外部鍵約束,定義職工基本信息表的“部門編號”爲外部鍵,引用“部門信息”表的“部門編號”;定義“工資”表的“職工編號”爲外部鍵,引用“職工基本信息”表的“職工編號”。

方法:

Use職工

GO

ALTER TABLE 基本信息表

ADD CONSTRAINT FK_職工基本信息_部門信息 FOREIGN KEY(部門編號)

REFERENCES部門信息(部門編號)

GO

ALTER TABLE 工資

ADD CONSTRAINT FK_工資_員工編號 FOREIGN KEY(員工編號)

REFERENCES員工基本信息(員工編號)

GO

步驟及結果:

部門信息表外鍵約束:

工資表外鍵約束:

分析:外鍵約束約束名以FK_開頭,且需要外鍵參考,使用FOREIGNKEY(約束列)REFERENCES(外鍵表(外鍵列))語句。

 

實驗內容:

11.刪除第10題創建的外部鍵約束。

方法:

Use職工

GO

/*刪除工資表中引用職工基本信息表中職工編號的外鍵約束*/

ALTER TABLE 工資

DROP CONSTRAINT FK_工資_職工編號

GO

/*刪除職工基本信息表中引用部門信息表中部門編號的外鍵約束*/

ALTER TABLE 職工基本信息

DROP CONSTRAINT FK_職工基本信息_部門信息

GO

步驟及結果:

分析:刪除表的約束使用DROP CONSTRAINT語句。

 

(二)表的更新

繼續使用第(一)題創建的“職工”數據庫,完成以下各題功能,保存或記錄相應的FSQL語句。

實驗內容:

1.用INSERT語句向“職工基本信息”表中插入表6-11所示的4行數據。

表6-11                 “職工基本信息”表中的數據

職工編號

姓名

性別

出生日期

部門編號

10001

王佳

1979年2月1日

001

20001

張欣

1965年5月10日

002

20003

李勇

1976年8月1日

002

10002

劉軍

1973年7月1日

001

方法:

Use職工

GO

/*對職工基本信息表插入數據*/

INSERT INTO 職工基本信息(職工編號,姓名,性別,出生日期,部門編號)

VALUES ('10001','王佳','女','19790201','001')

INSERT INTO 職工基本信息(職工編號,姓名,性別,出生日期,部門編號)

VALUES ('20001','張欣','男','19650510','002')

INSERT INTO 職工基本信息(職工編號,姓名,性別,出生日期,部門編號)

VALUES ('20003','李勇','男','19760801','002')

INSERT INTO 職工基本信息(職工編號,姓名,性別,出生日期,部門編號)

VALUES ('10002','劉軍','男','19730701','001')

GO

步驟及結果:

分析:使用INSERT INTO語句向現有表格中插入數據,每個將要插入的值要與該列屬性相對應;每插入一列數據都得使用INSERT INTO語句聲明。

 

實驗內容:

2.用INSERT語句向“工資”表中插入表6-12所示的兩行數據(即部門編號爲“001”的職工工資信息)。

表6-12                    “臨時工資信息”表

職工編號

基本工資

獎金

10001

2000

2200

10002

2500

3000

方法:

Use職工

GO

/*對工資表插入數據*/

INSERT INTO 工資(職工編號,基本工資,獎金)

VALUES ('10001',2000,2200)

INSERT INTO 工資(職工編號,基本工資,獎金)

VALUES ('10002',2500,3000)

GO

步驟及結果:

分析:表的更新使用INSERT INTO()VALUES()語句插入信息,待插入信息需與待插入列的屬性一一對應。

 

實驗內容:

3.在“職工”數據庫中再創建一張新表,表名爲“臨時工資信息”,其結構和內容見表6-13。

表6-13                    “臨時工資信息”表

職工編號

姓名

基本工資

獎金

20001

張欣

2000

2500

20003

李勇

2200

2000

方法:

Use職工

GO

/*創建臨時工資表*/

CREATE TABLE 臨時工資表

(

   職工編號 Char(5) PRIMARY KEY,/*主鍵*/

   姓名 Char(10) NOT NULL,/*非空*/

   基本工資 Money,

   獎金 Money,

)

GO

/*插入該表相關信息*/

INSERT INTO 臨時工資表(職工編號,姓名,基本工資,獎金)

VALUES ('20001','張欣',2000,2500)

INSERT INTO 臨時工資表(職工編號,姓名,基本工資,獎金)

VALUES ('20003','李勇',2200,2000)

GO

步驟及結果:

創建‘臨時工資表’:

插入相關信息:

分析:表的更新使用INSERT INTO()VALUES()語句插入信息,待插入信息需與待插入列的屬性一一對應。

 

實驗內容:

4.用CREATE TABLE語句在“職工”數據庫中創建一張新表“部門平均年齡”,包含“部門編號”和“平均年齡”兩個字段。

方法:

Use職工

GO

/*創建部門平均年齡表*/

CREATE TABLE 部門平均年齡

(

   部門編號 char(3) PRIMARY KEYNOT NULL,

   平均年齡 int

)

GO

步驟及結果:

分析:在使用數據庫下,使用CREATE TABLE<表名>(列名及相關屬性)語句創建表。

 

實驗內容:

5.使用INSERT語句將每一個部門編號及對應的職工平均年齡添加到以上“部門平均年齡”表中。(提示:在子查詢語句中可以使用“YEAR(GETDATE())-YEAR(出生日期)”求每一個職工的年齡,再對其使用AVG函數求平均)

方法:

Use職工

GO

INSERT INTO 部門平均年齡(部門編號,平均年齡)

SELECT部門編號,AVG(YEAR(GETDATE())-YEAR(職工基本信息.出生日期))

FROM職工基本信息

GROUP BY 部門編號

步驟及結果:

分析:GROUP BY爲分組顯示依據語句,查詢多個屬性值時其間用逗號隔開。

 

實驗內容:

6.用UPDATE語句給“工資”表中所有所屬部門編號爲“001”的職工的獎金增加10%。

方法:

Use職工

GO

UPDATE工資 SET獎金=獎金*1.1 FROM 職工基本信息 WHERE部門編號='001'

GO

步驟及結果:

分析:表的更新使用INSERT插入數據,修改數據則用UPDATE

 

實驗內容:

7.用UPDATE語句求所有職工的實發工資(即計算“工資”表的實發工資一列的值,等於基本工資+獎金)。

方法:

Use職工

GO

/*計算職工的實發工資*/

UPDATE工資 SET實發工資=基本工資+獎金

GO

步驟及結果:

分析:更改表中數據用UPDATE關鍵字。

 

實驗內容:

8.刪除職工編號爲“10001”的職工的工資信息。

方法:

Use職工

GO

/*刪除職工編號爲的職工的工資信息*/

DELETE FROM 工資 WHERE職工編號='10001'

GO

步驟及結果:

分析:刪除表中信息使用DELETE關鍵字,語法爲:DELETE FROM<>WHERE<>。

 

實驗內容:

9.刪除“工資”表中的所屬部門編號爲“001”的所有職工的工資信息。

方法:

Use職工

GO

DELETE工資 FROM職工基本信息 WHERE部門編號='001'

GO

步驟及結果:

分析:表中刪除數據使用DELETE關鍵字,刪除表用DROP,可使用WHERE設置特點的刪除條件。

 

三、實驗小結【對自己而言,通過實驗學到的關鍵技術方法】

1、表是SQL Server數據庫中數據存儲的主要對象,其結構由列的定義決定,並分爲永久表和臨時表兩種;

2、創建表的數據庫都是使用CREATE關鍵字,創建數據庫時應定義相關文件,而創建表時需要定義相關列的屬性(列名、數據類型、是否爲空、默認值等);

3、對錶進行修改時,沒修改一個地方都要有一句ALTER語句,聲明待修改的表;

4、表的約束性分爲:主鍵約束、唯一性約束、檢查約束、默認約束和外鍵約束,分別使用關鍵字:PRIMARY KEY、UNIQUE、CHECK、DEFAULT、ROREING;

5、表的更新包含數據的插入、修改和刪除分別使用關鍵字:INSERT、UPDATE…SET和DELETE。

 

智者樂水,仁者樂山,幸福之人關注理工科日記

獲取原文文檔請關注“理工科日記”,回覆數據庫獲取。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章