一、實驗目的
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。
智者樂水,仁者樂山,幸福之人關注“理工科日記”
獲取原文文檔請關注“理工科日記”,回覆數據庫獲取。