數據庫上機試驗(三)

     這是第三次上機內容以及結果,本次的程序是基於第二次上機時候的建立好的表格。所有完整代碼在我空間的代碼庫中均存放,可以直接運行。

     

上機實驗五 SELECT語句的使用(二)

一、實習目的

掌握SELECT語句的嵌套使用方法,能適用SQL Server對錶作複雜查詢。

二、實習準備

1.複習SELECT語句較高級格式的使用。

2.瞭解集合函數在分組查詢中的使用規則。

三、實驗內容

使用嵌套查詢和表的連接查詢分別完成以下查詢語句:

(1) 找出與李勇在同一個班級的學生信息。

(2) 找出所有與李勇有相同選修課的學生信息。

(3) 找出年齡介於學生李勇和25歲之間的學生信息。

(4) 找出選修了課程操作系統的學生學號和姓名。

(5) 找出所有沒有選修1號課程的學生姓名。

(6) 找出選修了全部課程的學生姓名。

完成以下查詢:

(1) 查詢選修了3號課程的學生學號及其成績,並按成績的降序排列。

(2) 查詢全體學生信息,要求查詢結果按班級號升序,同一班級學生按年齡降序排列。

(3) 求每個課程號相應的選課人數。

(4) 查詢選修了3門以上課程的學生學號。

 

四、實習報告內容

    1.寫出上述操作的SQL語句。

2.使用存在量詞[NOT] EXISTS的嵌套查詢時,何時外層查詢的WHERE條件爲真,何時爲假?

3.當既能用連接查詢又能用嵌套查詢時,應該選擇哪種比較好?爲什麼?

 

上機實驗六 SQL的存儲操作

一、實習目的

掌握用交互式SQL語句對已建基本表進行存儲操作:修改,刪除,插入,加深對數據的完整性的理解。

二、實習準備

1.複習數據的完整性,在進行數據的修改、刪除、插入時,要注意保證數據的一致性。

2.複習UPDATE、DELETE、INSERT語句與子查詢的結合使用。

三、實習內容

完成以下查詢語句:

(1) 對每個班,求學生的平均年齡,並把結果存入數據庫。

(2) 將01311班的全體學生的成績置零。

(3) 刪除2001級計算機軟件班全體學生的選課記錄。

(4) 學生李勇已退學,從數據庫中刪除有關他的記錄。

四、實習報告內容

1.寫出上述操作的SQL語句。

2.DROP和DELETE命令的本質區別是什麼?


運行代碼:

/*************上機試驗五************************/
/**找出與李勇在同一個班級的學生信息**/
SELECT Sno '學號',Sname '姓名',Ssex '性別',Sage '年齡',Clno '班級'
FROM Student 
WHERE Clno = 
(SELECT Clno 
FROM Student 
WHERE Sname = '李勇');

/**找出所有與李勇有相同選修課的學生信息**/
SELECT * 
FROM Student
 WHERE Sno IN 
(SELECT Sno
FROM Grade 
WHERE Cno IN
(SELECT Cno 
FROM Grade 
WHERE Sno IN
(SELECT Sno
FROM Student
 WHERE Sname='李勇')));
 
/**找出年齡介於學生李勇和25歲之間的學生信息**/
SELECT * 
FROM Student 
WHERE Sage BETWEEN 
(SELECT Sage 
FROM Student 
WHERE Sname = '李勇') AND 25;


/**找出所有沒有選修1號課程的學生姓名**/
SELECT Sname '姓名' 
FROM Student 
WHERE Sno NOT IN
(SELECT Sno 
FROM Grade 
WHERE Cno = '1');

/**找出選修了全部課程的學生姓名**/
SELECT Sname
FROM Student
WHERE NOT EXISTS(SELECT *
         FROM Course
         WHERE NOT EXISTS (SELECT *
                   FROM Grade
                   WHERE Student.Sno=Grade.Sno and Course.Cno=Grade.Cno));
                   
 /**查詢選修了3號課程的學生學號及其成績,並按成績的降序排列**/
 SELECT Sno '學號', Gmark '成績' 
 FROM Grade 
 WHERE Cno = '3' ORDER BY Gmark DESC;


/**查詢全體學生信息,要求查詢結果按班級號升序,同一班級學生按年齡降序排列**/
SELECT * 
FROM Student
ORDER BY Clno,Sage DESC;


/**求每個課程號相應的選課人數**/
SELECT Cno '課程號',COUNT(*) '選課人數'
FROM Grade 
GROUP BY Cno;


/**查詢選修了3門以上課程的學生學號**/
SELECT Sno 
FROM Grade 
GROUP BY Sno HAVING COUNT(*)>3;


/**********上機作業六***************/
/**對每個班,求學生的平均年齡,並把結果存入數據庫**/
/*第一種方法建立新的數據庫*/
DROP TABLE Savage;
CREATE TABLE Savage(
Clno Char(5) NOT NULL,
Avage Smallint
);
INSERT INTO Savage(Clno,Avage)
SELECT Clno,AVG(Sage)
FROM Student
GROUP BY Clno; 
/*第二種方法在Class表中新建一個屬性列*/  /*一直出錯誤,錯在哪了。。。*/
/*ALTER TABLE Class add Avage Smallint;
UPDATE Class 
SET Avage = AVG(Sage)
FROM Class,Student
GROUP BY Clno HAVING Student.Clno =Class.Clno;*/  

/**將01311班的全體學生的成績置零**/
UPDATE Grade
SET Gmark=0
WHERE Sno IN
(SELECT Sno
FROM Student 
WHERE Clno = '01311');


/**刪除2001級計算機軟件班全體學生的選課記錄**/
DELETE 
FROM Grade
WHERE Sno IN
(SELECT Sno 
FROM Student 
WHERE Clno = (
SELECT Clno 
FROM Class 
WHERE Speciality = '計算機軟件' AND Inyear = '2001'));


/**學生李勇已退學,從數據庫中刪除有關他的記錄**/
  /*受影響的表爲Class Grade Student (新建的Savage 表先不考慮)*/
UPDATE Class
SET Number = Number-1
WHERE Clno = 
(SELECT Clno 
FROM Student
WHERE Sname = '李勇');
DELETE
FROM Grade
WHERE Sno = 
(SELECT Sno 
FROM Student 
WHERE Sname = '李勇');
DELETE
FROM Student
WHERE Sname = '李勇';

發佈了23 篇原創文章 · 獲贊 106 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章