數(shù)據(jù)庫學(xué)習(xí)初步
一、數(shù)據(jù)定義
(一)、基本表操作
先建立school數(shù)據(jù)庫,在school數(shù)據(jù)庫里做以下的操作。
1.建立基本表
1)創(chuàng)建學(xué)生表Student,由以下屬性組成: 學(xué)號SNO(INT型,主碼),姓名SNAME(CHAR型,長度為8,非空唯一),性別SEX(CHAR型,長度為2),所在系DEPTNO(INT型)。
2)創(chuàng)建課程表Course,由以下屬性組成:課程號CNO(INT型),課程名CNAME(CHAR型,長度為20,非空),授課教師編號TNO(INT型),學(xué)分CREDIT(INT型)。其中(CNO,TNO)為主碼。
3)創(chuàng)建學(xué)生選課表SC,由以下屬性組成:學(xué)號SNO,課程CNO,成績GRADE。所有屬性均為INT型,其中(SNO,CNO)為主碼。
4)創(chuàng)建教師表Teacher,由以下屬性組成:教師編號TNO(INT型,主碼),教師姓名TNAME(CHAR型,長度為8,非空),所在系DEPTNO(INT型)。
5)創(chuàng)建系表Dept,由以下屬性:系號DEPTNO(INT型,主碼),系名DNAME(CHAR型,長度為20,非空)。
2.修改基本表
1)在Student表中加入屬性SAGE(INT型)。
2)將Student表中的屬性SAGE類型改為SMALLINT型。
3.刪除基本表
1)在所有操作結(jié)束后刪除STUDENT表。
2)在所有操作結(jié)束后刪除COURSE表。
3)在所有操作結(jié)束后刪除SC表。
4)在所有操作結(jié)束后刪除TEACHER表。
5)在所有操作結(jié)束后刪除DEPT表。
(二)、索引操作
1.建立索引
1)在Student表上建立關(guān)于SNO的唯一索引stusno。
2)在Course表上建立關(guān)于CNO升序的唯一索引coucno。
2.刪除索引
1)刪除Student表上的索引stusno。
2)刪除Course表上的索引coucno。
(三)、視圖操作
1.建立視圖
在插入數(shù)據(jù)的Student基本表上為計算機(jī)科學(xué)與技術(shù)系的學(xué)生記錄建立一個視圖CS_STUDENT。
2.刪除視圖
在操作結(jié)束后刪除視圖CS_STUDENT。
二、數(shù)據(jù)操作
(一)、更新操作
1.插入數(shù)據(jù)
1)向STUDENT表插入下列數(shù)據(jù):
1001,張?zhí)?span lang='EN-US'>,男,10,20
1002,李蘭,女,10,21
1003,陳銘,男,10,21
1004,劉茜,女,20,21
1005,馬朝陽,男,20,22
2)向COURSE表插入下列數(shù)據(jù):
1,數(shù)據(jù)結(jié)構(gòu),101,4
2,數(shù)據(jù)庫,102,4
3,離散數(shù)學(xué),103,4
4,C語言程序設(shè)計,101,2
3)向SC表插入下列數(shù)據(jù):
1001,1,80
1001,2,85
1001,3,78
1002,1,78
1002,2,82
1002,3,86
1003,1,92
1003,3,90
1004,1,87
1004,4,90
1005,1,85
1005,4,92
4)向TEACHER表插入下列數(shù)據(jù):
101,張星,10
102,李珊,10
103,趙天應(yīng),10
104,劉田, 20
5)向DEPT表插入下列數(shù)據(jù):
10,計算機(jī)科學(xué)與技術(shù)
20,信息
2.修改數(shù)據(jù)
將張星老師數(shù)據(jù)結(jié)構(gòu)課的學(xué)生成績?nèi)考?span lang='EN-US'>2分
3.刪除數(shù)據(jù)
刪除馬朝陽同學(xué)的所有選課記錄
(二)、查詢操作
1.單表查詢
1)查詢所有學(xué)生的信息。
2)查詢所有女生的姓名。
3)查詢成績在80到89之間的所有學(xué)生選課記錄,查詢結(jié)果按成績的降序排列。
4)查詢各個系的學(xué)生人數(shù)。
2.連接查詢
查詢信息系年齡在21歲以下(含21歲)的女生姓名及其年齡。
3.嵌套查詢
1)查詢修課總學(xué)分在10學(xué)分以下的學(xué)生姓名。
2)查詢各門課程取得最高成績的學(xué)生姓名及其成績。
3)查詢選修了1001學(xué)生選修的全部課程的學(xué)生學(xué)號。
4)查詢選修了張星老師開設(shè)的全部課程的學(xué)生姓名。
出現(xiàn)的問題及解決方案:
1.在創(chuàng)建基本表時是否可以缺省主碼?
2.對基本表進(jìn)行修改,執(zhí)行ALTER TABLE Student MODIFY Sage SMALLINT顯示執(zhí)行失敗。
自己做的答案:
(一) 基本表操作
建立基本表
1) 建立Student表
命令行操作:
CREATE TABLE Student
( SNO INTNOTNULLPRIMARY KEY,
SNAME CHAR(8)NOTNULL,
SEX CHAR(2)NOTNULL,
DEPTNO INT NOT NULL)
2) 建立Course表
命令行操作:
CREATE TABLE Course
(
CNO INT NOT NULL,
CNAME CHAR(20)NOTNULL,
TNO INT NOT NULL,
CREDIT INT NOT NULL,
PRIMARY KEY(CNO, TNO)
)
3) 建立SC表
命令行操作:
CREATE TABLE SC
(
SNO INT NOT NULL,
CNO INT NOT NULL,
GRAGE INT NOT NULL,
PRIMARY KEY(SNO, CNO)
)
4) 建立Teacher表
命令行操作:
CREATE TABLE Teacher
( TNO INTNOTNULL,
TNAME CHAR(8)NOTNULLPRIMARY KEY,
DEPTNO INT NOT NULL
)
5) 建立Depth表
命令行操作:
CREATETABLE Dept
(
DEPTNO INT NOT NULL PRIMARYKEY,
DNAME CHAR(20)NOTNULL
)
2.修改基本表
1)在Student表中加入屬性SAGE(INT型)。
命令行操作:
ALTER TABLE Student ADD SAGEINT;
2)將Student表中的屬性SAGE類型改為SMALLINT型。
命令行操作:
ALTERTABLEStudentalter column SAGESMALLINT;
3.刪除基本表
1)在所有操作結(jié)束后刪除STUDENT表。
命令行操作:
DROP TABLE Student;
2)在所有操作結(jié)束后刪除COURSE表。
DROP TABLE Course;
3)在所有操作結(jié)束后刪除SC表。
DROP TABLE SC;
4)在所有操作結(jié)束后刪除TEACHER表。
DROP TABLETeacher;
5)在所有操作結(jié)束后刪除DEPT表。
DROP TABLE Dept;
(二)、索引操作
1.建立索引
1)在Student表上建立關(guān)于SNO的唯一索引stusno。
CREATE UNIQUEINDEXstusnoON Student(SNO);
2)在Course表上建立關(guān)于CNO升序的唯一索引coucno。
CREATE UNIQUE INDEX coucno ONCourse(CNO);
2.刪除索引
1)刪除Student表上的索引stusno。
DROP INDEXStudent.stusno;
2)刪除Course表上的索引coucno。
DROP INDEX Course.coucno;
(三)、視圖操作
1.建立視圖
在插入數(shù)據(jù)的Student基本表上為計算機(jī)科學(xué)與技術(shù)系的學(xué)生記錄建立一個視圖CS_STUDENT。
CREATE VIEWCS_STUDENT
AS
SELECT SNO,SNAME,SEX,DEPTNO,SAGE
FROM Student
WHERE DEPTNO=10
WITH CHECK OPTION
2.刪除視圖
在操作結(jié)束后刪除視圖CS_STUDENT。
DROPVIEWCS_STUDENT;
二、數(shù)據(jù)操作
(一)、更新操作
1.插入數(shù)據(jù)
1)向STUDENT表插入下列數(shù)據(jù):
1001,張?zhí)?span>,男,10,20
1002,李蘭,女,10,21
1003,陳銘,男,10,21
1004,劉茜,女,20,21
1005,馬朝陽,男,20,22
命令行操作:
INSERT INTOStudent
VALUES(1001,'張?zhí)?/span>','男',10,20);
INSERT INTOStudent
VALUES(1002,'李蘭','女',10,21);
INSERT INTOStudent
VALUES(1003,'陳銘','男',10,21);
INSERT INTOStudent
VALUES(1004,'劉茜','女',20,21);
INSERT INTOStudent
VALUES(1005,'馬朝陽','男',20,22);
2)向COURSE表插入下列數(shù)據(jù):
1,數(shù)據(jù)結(jié)構(gòu),101,4
2,數(shù)據(jù)庫,102,4
3,離散數(shù)學(xué),103,4
4,C 語言程序設(shè)計,101,2
命令行操作:
INSERT INTOCourse
VALUES(1,'數(shù)據(jù)結(jié)構(gòu)',101,4);
INSERT INTOCourse
VALUES(2,'數(shù)據(jù)庫',102,4);
INSERT INTOCourse
VALUES(3,'離散數(shù)學(xué)',103,4);
INSERT INTOCourse
VALUES(4,'C語言程序設(shè)計',101,2);
3)向SC表插入下列數(shù)據(jù):
1001,1,80
1001,2,85
1001,3,78
1002,1,78
1002,2,82
1002,3,86
1003,1,92
1003,3,90
1004,1,87
1004,4,90
1005,1,85
1005,4,92
命令行操作:
INSERT INTOSC(SNO,CNO,GRAGE)
SELECT 1001,1,80union
SELECT 1001,2,85union
SELECT 1001,3,78union
SELECT 1002,1,78union
SELECT 1002,2,82union
SELECT 1002,3,86union
SELECT 1003,1,92union
SELECT 1003,3,90union
SELECT 1004,1,87union
SELECT 1004,4,90union
SELECT 1005,1,85union
SELECT 1005,4,92
4)向TEACHER表插入下列數(shù)據(jù):
101,張星,10
102,李珊,10
103,趙天應(yīng),10
104,劉田, 20
命令行操作:
INSERT INTOTeacher(TNO,TNAME,DEPTNO)
SELECT 101,'張星',10union
SELECT 102,'李珊',10union
SELECT 103,'趙天應(yīng)',10union
SELECT 104,'劉田', 20
5)向DEPT表插入下列數(shù)據(jù):
10,計算機(jī)科學(xué)與技術(shù)
20,信息
命令行操作:
INSERT INTODept(DEPTNO,DNAME)
SELECT 10,'計算機(jī)科學(xué)與技術(shù)'union
SELECT 20,'信息'
2.修改數(shù)據(jù)
將張星老師數(shù)據(jù)結(jié)構(gòu)課的學(xué)生成績?nèi)考?span>2分
UPDATE SC
SET GRAGE=GRAGE + 2
WHERE CNOIN
(SELECTCNO
FROMCourse
WHERECNAME='數(shù)據(jù)結(jié)構(gòu)'andcnoin
(SELECTcno
FROM Teacher
WHERE TNAME='張星')
)
3.刪除數(shù)據(jù)
刪除馬朝陽同學(xué)的所有選課記錄
DELETE
FROM SC
WHERE SNO =1005
(二)、查詢操作
1.單表查詢
1)查詢所有學(xué)生的信息。
SELECT SNO,SNAME,SEX,DEPTNO,SAGE
FROM Student;
2)查詢所有女生的姓名。
SELECT SNAME
FROM Student
WHERE SEXIN('女');
3)查詢成績在80到89之間的所有學(xué)生選課記錄,查詢結(jié)果按成績的降序排列。
SELECT CNO
FROM SC
WHERE GRAGE BETWEEN 80 AND 89;
4)查詢各個系的學(xué)生人數(shù)。
SELECT DISTINCTDEPTNO
FROM Dept;
2.連接查詢
查詢信息系年齡在21歲以下(含21歲)的女生姓名及其年齡。
SELECT SNAME,SAGE
FROM Student,Dept
WHERE DNAME = '信息'ANDSAGE<> 21 AND SEX= '女';
3.嵌套查詢
1)查詢修課總學(xué)分在10學(xué)分以下的學(xué)生姓名。
SELECT SNAME
FROM Student,Course
WHERE CREDIT 10;
2)查詢各門課程取得最高成績的學(xué)生姓名及其成績。
SELECT SNAME,GRAGE,
FROM Student,SC
WHERE Student.SNO=SC.SNOANDGRAGEIN
(SELECTMAX(GRAGE)
FROM SC
GROUP BYCNO);
3)查詢選修了1001學(xué)生選修的全部課程的學(xué)生學(xué)號。
SELECT DISTINCTSNO
FROM SCSCX
WHERE SNO!= 1001 AND NOT EXISTS
(SELECT*
FROM SCSCY
WHERE SCY.SNO = 1001 AND
NOT EXISTS
(SELECT*
FROM SCSCZ
WHERE SCZ.SNO = SCX.SNOAND
SCZ.CNO= SCY.CNO))
4)查詢選修了張星老師開設(shè)的全部課程的學(xué)生姓名。
SELECT SNAME
FROM Student
WHERE SNOIN
(SELECTSNO
FROMSC
WHERECNOIN
(SELECTCNO
FROM Course
WHERE TNO IN
(SELECTTNO
FROM Teacher
WHERE TNAME='張星')
)
)
出現(xiàn)的問題及解決方案:
1.在創(chuàng)建基本表時是否可以缺省主碼?
解:可以
2.對基本表進(jìn)行修改,執(zhí)行ALTER TABLE Student MODIFY Sage SMALLINT顯示執(zhí)行失敗。
解:將MODIFY更改為alter column就可以解決。