資料庫課程設計學生信息管理系統
『壹』 急求一份資料庫課程設計
合肥經濟技術職業學院
電子信息系
課程設計報告
課程:資料庫課程設計
題目:學生管理系統
班級:09計 用
成員:
指導老師:
日期:
目錄
第一章 前言 3
1.1 課題簡介 3
1.2 設計目的 3
1.3 需求分析 4
第二章 資料庫實例的分析及應用 4
2.1 題目和E-R圖 4
2.2 資料庫的實現 5
2.3 資料庫結構屬性 8
2.3.1主鍵(主鍵約束PRIMARYKEY;索引設置) 8
2.3.2資料庫的默認值和規則 13
2.3.3 視圖和存儲過程 15
2.3.4 觸發器 17
第三章 總結報告 19
參考文獻 19
第一章 前言
1.1 課題簡介
資料庫技術是計算機科學技術發展最快,應用最為廣泛的技術之一。其在計算機設計,人工智慧,電子商務,企業管理,科學計算等諸多領域均得到了廣泛的應用,已經成為計算機信息系統和應用的核心技術和重要基礎。
本文主要介紹學生成績管理系統的資料庫設計,從需求分析到資料庫的運行與維護都進行詳細的敘述。本系統是利用SQL開發出來的。通過SQL建立學生成績管理系統,大大方便和簡化了數據的查詢和處理,管理員可以通過SQL語言對表內數據進行添加,刪除,修改,查詢等操作,還可以建立多用戶,對其使用許可權進行分配和回收。隨著數據處理的不斷進步和計算機網路的迅速發展,使資料庫應用系統不僅在功能而且在結構上都有了深刻的變化,而且運用在生活的每一個方面。通過學習關系代數,關系演算,函數依賴,關系模式分解,關系模式的規范化讓我們建立了扎實的關系資料庫理論基礎。而在掌握基本理論的基礎上掌握關系資料庫的設計方法,掌握現代信息系統的開發方法也顯得尤為必要。目前在關系資料庫中用得最多的SQL資料庫,開發資料庫的語言工具多數用C++.。所以對於計算機專業的學生來說掌握資料庫應用的基本技術,熟悉編程語言與SQL資料庫的結合運用是我們計算機專業學生之必備本領。本次課程設計是以學生信息管理系統為模擬模型,運用C++編程語言結合SQL資料庫所開發系統。
1.2 設計目的
隨著學生數量的日益增多,學校對學生的管理要求也越來越高,為了使信息技術與學生信息更好的結合在一起以及使學生成績的管理更加系統化,數字化,因此我們設計了該學生信息管理系統。運用基於E-R模型的資料庫設計方法和關系規范化理論做指導完成從系統的分析到設計直至系統的最終實現,開發學生成績管理系統,完成學生成績管理系統的全部功能。首先做好需求分析,並完成數據流圖,其次做概念分析,利用實體聯系的方法將需求分析的用戶需求抽象為信息結構,得到E-R圖,然後就是邏輯結構設計,將E-R圖轉換為計算機系統所支持的邏輯模型。最後利用SQL完成具體的實例。
1.3 需求分析
1、問題的提出:為了高效率的完成學生的管理,決定開發學生管理系統。
2、需完成的功能:
(1)能錄入、修改、查詢、輸出學生的檔案信息,這些信息包括學生的成績、課程、個人信息等。
(2)觸發器,索引,約束,規則,默認值,,視圖,存儲過程的建立及使用。
第二章 資料庫實例的分析及應用
2.1 題目和E-R圖
隨著學生數量的日益增多,學校對學生的管理要求也越來越高,為了使信息技術與學生信息更好的結合在一起以及使學生成績的管理更加系統化,數字化,因此我們設計了該學生信息管理系統。以下是次學生信息管理系統的E-R圖,進一步詳細的說明資料庫的結構以及用途。實體和屬性的定義:
學生表(學生學號,姓名,班級編號)
班級表(班級編號,班級名稱,系部編號)
系部表(系部編號,系部名)
教師表(教師名,課程編號,系部編號)
課程表(課程編號,課程名,學分,教師,系部號)
下面是E-R圖,用來進一步說明資料庫的作用和用途:
2.2 資料庫的實現
運用SQL Server 2000數據設計表格的物理結構如下:
班級表:
學生表:
系部表:
課程表:
教師表:
各表關系圖:
設計表格的具體填入數據是:
班級表:
學生表:
教師表:
系部表:
課程表:
2.3 資料庫結構屬性
2.3.1主鍵(主鍵約束PRIMARYKEY;索引設置)
1.索引與書目錄相似,可以快速找到指定內容。索引通過記錄表中的關鍵值來指向表中的記錄,這樣資料庫就不用掃描而能定位到相關的記錄。以下是對各表進行索引的實現。
學生表的設置如圖:
班級表的設計如下:
教師表的設計如下:
課程表的設計如下:
系部表的設置如下:
2.約束定義了關於允許什麼數據進入資料庫的規則,是分配給表或表中某列的一個屬性。使用約束的目的在於防止列中出現非法的數據,可以自動維護資料庫的數據完整性。下面是用企業管理器對class表實現的主鍵約束:
2.3.2資料庫的默認值和規則
1.使用默認可以實現當用戶在向數據表中插入新紀錄時,如果沒有給出某列的輸入值,則由SQL Server自動為該列輸入默認值。下面是對class表進行實現默認的功能:
實現默認值:
2.規則也是實現數據完整性的方法之一,作用與CHECK約束類似,在向表的某列插入或更新數據時,用它來限制輸入值的取值范圍。下面我們運用對Course表進行規則的實現:
2.3.3 視圖和存儲過程
1.視圖的作用相當於一個虛擬表,是用戶查看資料庫表中數據的一種方式使用戶通過他能夠以需要的方式瀏覽表中的部分或全部數據,而數據的物理存放位置仍然在資料庫的表中。我們通過在企業管理器中創建視圖管理視圖應用視圖,更加形象具體的說明了視圖的作用。
添加表格到視圖:
添加數據並運行:
運行結果,具體視圖呈現:
2.存儲過程是一組編譯在單個執行計劃中的Transact-SQL語句,它將一些固定的操作集中起來交給SQL-Server資料庫伺服器完成,以實現某個任務。首先我們在查詢管理器中創建存儲過程:
並且執行存儲過程:
在企業管理器中也可以體現出存儲過程:
2.3.4 觸發器
觸發器的作用是強制執行業務規則。SQL Server主要提供了兩種機制來強制業務規則和數據完整性:約束和觸發器。觸發器在指定的表中數據發生變化時被調用以響應INSERT、UPDATE或DELETE事件。觸發器可以查詢其他表,並可以包含復雜的語句。SQL Server將觸發器和觸發它的語句作為可在觸發器內回滾的單個事物對待,如果檢測到嚴重錯誤,則整個事物即自動回滾。首先我們在查詢管理器中新建觸發器:
新建觸發器:
管理觸發器:
第三章 總結報告
這次的課程設計真的做起來困難重重,深刻體會到做一個軟體,裡面需要的很多知識我們沒有接觸過,去圖書館找書的時候發現,我們學的僅僅是皮毛,還有很多東西需要我們去發掘,就算是借一本書看完它,我們還是會發現還有很多知識沒有吃透,這需要我們不斷的實踐,不斷地自學習,不斷地發現問題去思考問題。
經過不斷地測試,不斷地改進,其中還是發現了不少問題,第一次做這些工作,沒有任何經驗,甚至無從下手,還是很謝謝老師和同學的幫忙,從中也學到了一些代碼的寫法,為什麼要這樣寫,通過和同學的討論,找到一些書本上沒有的方法,如何數據綁定等等,怎樣從資料庫中將數據提取出來放到一個文本框或者標簽內,這些東西是組成界面的東西,雖然小,但是可以體現整個軟體的水平,其實並不需要建多少資料庫的表,寫多少復雜的存儲過程,是不是用了資料庫函數,觸發器等等,但是至少要弄明白這些東西如果操作,清晰思路才能將功能分清晰。
經過一段時間的學習與實踐,學生信息管理系統基本上開發好了。該系統具備了:添加、修改、刪除、瀏覽、查詢、輸出日程信息,實現了根據用戶需求查看日程等功能。作為一個個人日程管理系統,本系統所提供的功能的確太少了一些,僅僅只實現了一些基本的功能,有很多地方還有待擴展和改良。
人如果沒有自信,沒有目標,沒有信心就不可能把事情做好,當其他人都在迷茫的時候,自己一定要堅信目標,大學畢業出去即是面臨找工作,從學習這個專業,到以後做這方面的工作都需要不斷地去學習去實踐,這次實踐可以給我們敲一個警鍾,我們面臨畢業,面臨擇業,需要這些實踐經驗,在困難面前要勇於嘗試,這是這次課程設計給我的最大感想。在此特別感謝老師的辛苦指導和教育!
參考文獻
黃維通編《SQL Server2000 簡明教程》
徐人鳳 曾建華編《SQL Server2000資料庫及應用》
『貳』 java程序設計課程設計 學生信息管理系統 要求:使用圖形用戶界面用資料庫建立1或
import java.awt.*;
import java.awt.event.*;
public class DengLuJieMian extends Frame implements ActionListener
{
Label username=new Label("用戶名:");//使用文本創建一個用戶名標簽
TextField t1=new TextField();//創建一個文本框對象
Label password=new Label("密碼:");//創建一個密碼標簽
TextField t2=new TextField();
Button b1=new Button("登陸");//創建登陸按鈕
Button b2=new Button("取消");//創建取消按鈕
public DengLuJieMian()
{
this.setTitle("學生信息管理系統");//設置窗口標題
this.setLayout(null);//設置窗口布局管理器
username.setBounds(50,40,60,20);//設置姓名標簽的初始位置
this.add(username);// 將姓名標簽組件添加到容器
t1.setBounds(120,40,80,20);// 設置文本框的初始位置
this.add(t1);// 將文本框組件添加到容器
password.setBounds(50,100,60,20);//密碼標簽的初始位置
this.add(password);//將密碼標簽組件添加到容器
t2.setBounds(120,100,80,20);//設置密碼標簽的初始位置
this.add(t2);//將密碼標簽組件添加到容器
b1.setBounds(50,150,60,20);//設置登陸按鈕的初始位置
this.add(b1);//將登陸按鈕組件添加到容器
b2.setBounds(120,150,60,20);//設置取消按鈕的初始位置
this.add(b2);// 將取消按鈕組件添加到容器
b1.addActionListener(this);//給登陸按鈕添加監聽器
b2.addActionListener(this);// 給取消按鈕添加監聽器
this.setVisible(true);//設置窗口的可見性
this.setSize(300,200);//設置窗口的大小
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});//通過內部類重寫關閉窗體的方法
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==b1)//處理登陸事件
{
String name=t1.getText();
String pass=t2.getText();
if(name!=null&&pass.equals("000123"))//判斷語句
{
new StudentJieMian();
}
}
}
public static void main(String args[])//主函數
{
new DengLuJieMian();
}
}
以下方法實現了學生界面設計
import java.awt.*;
import java.awt.event.*;
class StudentJieMian extends Frame implements ActionListener
{
MenuBar m=new MenuBar();//創建菜單欄
Menu m1=new Menu("信息");//創建菜單「信息」
MenuItem m11=new MenuItem("插入");//創建「插入」的菜單項
MenuItem m12=new MenuItem("查詢");
Menu m2=new Menu("成績");//創建菜單「成績」
MenuItem m21=new MenuItem("查詢");
public StudentJieMian()
{
this.setTitle("學生界面");//設置窗口標題
this.setLayout(new CardLayout());//設置窗口布局管理器
this.setMenuBar(m);//將菜單欄組件添加到容器
m.add(m1);//將信息菜單放入菜單欄
m.add(m2);
m1.add(m11);//將「插入」菜單項添加到「信息」菜單
m1.add(m12); //將「查詢」菜單項添加到「信息」菜單
m2.add(m21); //將「查詢」菜單項添加到「成績」菜單
m11.addActionListener(this); //給「插入」菜單項添加監聽器
m12.addActionListener(this); //給「查詢」菜單項添加監聽器
m21.addActionListener(this); //給「查詢」菜單項添加監聽器
this.setVisible(true); //設置窗口的可見性
this.setSize(300,200); //設置窗口的大小
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);//關閉窗口
}
});
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==m11) //處理「添加信息」事件
{
new AddStudent();
}
if(e.getSource()==m12) //處理「查詢信息」事件
{
new SelectStudent();
}
if(e.getSource()==m21) //處理「查詢成績」事件
{
new ChengJiStudent();
}
}
public static void main(String args[])
{ new StudentJieMian(); //創建一個對象 }
『叄』 誰可以幫忙做下這個題目呀 資料庫課程設計
資料庫課程設計報告
計網0831資料庫課程設計
1、數據的導入和導出今天是資料庫實習的第一天,對於我們來說資料庫雖然是今年剛剛學過的課程,但是我們已經考試完一段時間了,所以也很久沒有翻書本了,很多知識在剛剛做的時候還是很陌生的,不得不翻一下書本,下面就是在第一天實習中所產生的問題報告和分析結果。
在做實訓前,老師先給我們講了資料庫如何導入EXCL表,在老師的指導下我們學會了,為創建表提供了方便。
首先我們是建立了一個新的KCSJ資料庫,建立的數據語句如下:
用SQL語句在D:\KCSJ下創建課程設計資料庫(KCSJ)
(一)CREATE DATABASE KCSJ
ON
(NAME=KCSJ_DATA,
FILENAME='D:\KCSJ_DATA.MDF')
LOG ON
(NAME=KCSJ_LOG,
FILENAME='D:\KCSJ_LOG.LDF')
將KCSJ.XLS文件中的數據導入KCSJ資料庫中。導入後在資料庫中將生成以下五個基本表:
學生(學號,姓名,性別,年齡,入學成績,班級,籍貫)
成績(學號,課程號,成績)
課程(課程號,課程名,教師名)
三角形(a,b,c,s)
迴文數(A1,A2)
其中:a> 學生、成績、課程、三角形、迴文數是表的名字。
b> 學號、姓名、性別、班級、籍貫、課程名和教師名為字元型,長度分別為10 、10、2、6、8、20、10;
c> 入學成績為整型。
d> 年齡、課程號和成績為整型或微整型。
e> A1為整型;A2為字元型,長度為2。
f> a、b、c為float類型,代表三角形的三邊,s為float類型,代表三角形的面積。
在導入資料庫中KCSJ.XLS文件的數據導入的時候是在所有任務--導入數據—數據源為excel97-2000- 文件位置—導入表中的數據—修改類型和長度 最後確定。
用企業管理器創建資料庫(JW0831),將KCSJ資料庫中的五個表導入該資料庫中。
打開所有任務 導入數據源 選擇KSCJ 資料庫 下一步 再選擇jw0831資料庫 選擇所有 確定 就可以將KCSJ資料庫中的五個表導入該資料庫中。
簡單的結構化查詢
--(1)查詢學生的詳細記錄
select*from 學生
--(2)查詢學生表中前兩個班級(班級名稱不能重復)
select top 2 班級 from 學生
group by 班級
在做本題的時候,由於想的比較復雜,外加題意有點模糊,所以轉了很大一個圈,並在老師的側外指導下通過group by分組才把本題做了出來。
--(3)顯示把 成績表中各科學生的成績加 20 分後的信息
select*from 成績
where 成績='成績'+20
在做本題的時候,由於題意理解錯誤,所以我先用updata語句來進行更新,但是在做到其它題的時候,聽到老師在指導其它同學的時候,把題意一說,我才恍然大悟,自己的方向又錯了。然後又重新思考,接著就做出了上面的答案。
--(4)查詢來自「寧波」 學生的學號、姓名、籍貫
select 學號,姓名,籍貫 from 學生
where 籍貫='寧波'
--(5)查詢選修4號課程且考試成績在70分以上的學生的學號以及所選修的課程號和成績,顯示前3條結果記錄
select top 3*from 成績
where 成績>=70 and 課程號='4'
--(6)查詢入學成績在 300-400 分之內的學生的詳細情況,並按入學成績降序排序 ( 用兩種方法完成 )
select * from 學生
where 300<入學成績 and 入學成績<400 order by 入學成績 desc
select * from 學生
where 入學成績 between 300 and 400 order by 入學成績 desc
--(7)統計學生表中的學生人數
select count(*)from 學生
對於今天的題目做的多了,忽然發現很多題的類型都差不多,都是運用基本的書本知識,然後融會貫通,舉一反三,然後不費吹灰之力就做出來了,我說的不費吹灰之力是簡單的,但是有些還是費了好大一番功夫的。
--(8)查詢學生表中姓李,姓名列包含兩個字的學生的基本情況
select * from 學生
where 姓名 like '李_'
--(9)查詢名字中第 2 個字為『北'的學生的基本信息
select * from 學生
where 姓名 like '_北%
在做這幾道題的時候,我解決了並也明白了—和%得區別和用途
--(10)查詢選修 4 號課程,成績在 80-90 分之間的學生學號和成績
select*from 成績
where 80<=成績 and 成績<90 and 課程號='4'
--(11)查詢 JW0831 班和 JW0551 班學生的姓名、性別及班級(用謂詞查詢 in )
select 姓名,性別,班級 from 學生 where 班級 in('JW0831','JW0551')
group by 姓名,性別,班級
對於本道題拿到的時候,還是愣了一下的,因為我忽然不知道什麼是,對於用謂詞查詢 in,自己不會用,在翻書翻了一遍並且詢問了同學才發現如何去用它。
--(12)查詢缺少成績的學生的學號和相應的課程號
select 學號,課程號 from 成績
where 成績 is NULL
--(13)統計選修了4號課程學生人數
SELECT COUNT(*)AS'人數' FROM 成績 where 課程號='4'
--(14)查詢JW0831班家在河北學生的學號、姓名、性別
select 學號,姓名,性別 from 學生
where 籍貫='河北'and 班級='JW0831'
--(15)檢索劉志生老師所授課程的課程號和課程名。
select 課程號,課程名 from 課程
where 教師名='劉志生'
---(16)檢索年齡大於23歲的男學生的學號和姓名。
select 學號,姓名 from 學生
where 性別='男' and 年齡>23
--(17)查詢學生表中姓李的學生的基本情況
select *from 學生
where 姓名 like '李%'
--(18) 統計學生表中所有學生「入學成績」的平均分、最高分、最低分
select AVG(入學成績) as'平均成績',max(入學成績) as'最高分',min(入學成績) as'最低分'from 學生
--(19)查詢選修了1號或者3號課程,成績及格的學生的學號和成績
select 學號,成績 from 成績
where 成績>=60 and 課程號 in (1,3)
--(20)統計學生表中所有男女生人數
SELECT 性別, COUNT(性別)AS'人數' FROM 學生
group by 性別
對於今天的題除了自己不太熟悉課本知識和同學討論出來的那些分析外,對於其他的題已經沒有什麼問題了,因為我把今天的題做完之後,把報告寫完的同時,對於明天的題我也進行了一番思考,並且還幫助其他同學解決了一些不會的問題。
星期二 天氣 冷 心情 good
3、復雜的結構化查詢
--(1)檢索至少選修劉志生老師所授課程中一門課程的女學生姓名。
select 學生.學號,姓名,性別,課程.課程號 from 學生,成績,課程
where 性別='女' and 課程.課程號 in(select 課程號 from 課程 where 教師名='劉志生')and 學生.學號=成績.學號
and 課程.課程號=成績.課程號
對於今天的課程設計不是像昨天一樣那麼簡單了,簡直是提高了一個很大的層次,簡直是一步三晃啊!不容易啊!就像本題一樣,在查詢的時候要用一個子查詢和三個條件才能把它做出來!
--(2)檢索吳計算同學不學的課程的課程號。
select 課程號 from 課程 where 課程號 not in(select 成績.課程號 from 成績,學生where 姓名='吳計算' and 成績.學號=學生.學號)
在本題中,用的方法還真是一波三折啊!因為如果要查不學的課程,要先查出他學的課程,然後再排掉學過的!充分運用了not in這個語法
--(3)檢索至少選修四門課程的學生學號。
select 學號, count(成績.學號)as '門數' from 成績,課程 where 成績.課程號=課程.課程號
group by 成績.學號
having count(成績.學號)>=4
對於本題的用的是count做統計這個數據語句,外加可以用在group by 語句後的having條件語句。通過本題的聯系,可以很好的運用count 和having語句
--(4)檢索全部學生都選修的課程的課程號與課程名。
select 課程.課程名 ,課程.課程號 from 成績,課程
where 成績.課程號=課程.課程號
group by 課程.課程名,課程.課程號
having count(成績.學號) in (select count(學生.學號)from 學生)
--(5)檢索選修課程包含劉志生老師所授課的學生學號。
select 學號 from 成績,課程
where 教師名='劉志生'and 成績.課程號=課程.課程號
--(6)統計有學生選修的課程門數。
select 學號, count(成績.學號)as '門數' from 成績,課程 where 成績.課程號=課程.課程號
group by 成績.學號
--(7)求選修4號課程的學生的平均年齡。
select AVG(年齡)as'平均年齡',成績.課程號 from 學生,成績
where 課程號='4' and 學生.學號=成績.學號
group by 成績.課程號
--(8)求劉志生老師所授課程的每門課程的學生平均成績。
select avg(成績.成績)as'平均成績',課程.課程號 from 成績,課程
where 教師名='劉志生' and 成績.課程號=課程.課程號
group by 課程.課程號
--(9)統計每門課程的學生選修人數(超過6人的課程才統計)。要求輸出課程號和選修人數,查詢結果按人數降序排列,若人數相同,按課程號升序排列。
select 成績.課程號, count(成績.學號)as '人數' from 成績,課程
where 成績.課程號=課程.課程號
group by 成績.課程號
having count(成績.學號)>=6
order by count(成績.學號) asc
--(10)檢索學號比陸力利同學大,而年齡比他小的學生姓名。
select 學號,姓名 from 學生
where 學號>(select 學號 from 學生 where 姓名='陸力利') and 年齡<(select 年齡 from 學生 where 姓名='陸力利'
--(11)求年齡大於女同學平均年齡的男學生姓名和年齡。
select 姓名,年齡 from 學生
where 性別='男'and 年齡>(select avg(年齡)as'平均年齡'from 學生 where 性別='女')
--(12)統計學生人數超過 5人的班級名稱和對應的人數
select 班級,count(學生.學號)as '人數'from 學生
group by 班級
having count(學生.學號)>=5
--(13)檢索課程號和選修人數,查詢結果按人數升序排列,若人數相同,按課程號降序排列。
select 成績.課程號, count(成績.學號)as '人數' from 成績,課程
where 成績.課程號=課程.課程號
group by 成績.課程號
order by count(成績.學號) asc,成績.課程號 desc
這道題運用很多知識點,不但用了count 統計 還用了 group by 分組 外加排序
--(14)查詢選修課程學生的學號、姓名、所選課程號、取得的成績
select 學生.學號,學生.姓名,成績.課程號,成績.成績 from 學生,成績
where 學生.學號=成績.學號
--(15)查詢學生的學號、課程號和成績等級
select 學號,課程號,成績,(
CASE
WHEN 成績>=90 and 成績<=100 THEN 'A'
WHEN 成績>=80 and 成績<90 THEN 'B'
WHEN 成績>=70 and 成績<80 THEN 'C'
WHEN 成績>=60 and 成績<70 THEN 'D'
ELSE 'E'
END ) as 等級
from 成績
本題運用了一個新的知識點,這個知識點是在老師的ppt課件上找到的,利用這個語句何以很好很方便的為管理系統中的成績分等級,所以在本體中一定要記住本語句的語法如:case when……and then ……else end
今天小結,通過今天一天的課程設計,我覺得我收獲了很多,因為它讓我以前學的不太好的知識點全部都鞏固了一遍,尤其是成績、課程、學生這些表與表的鏈接,每次不是這里連不上就是那裡連不上,但是現在不但可以連上了,還可以幫助其他同學檢查出來錯誤,真是一筆不小的收獲,雖然今天做的題比較難,但是每一次在自己的努力下做出來都會有不小的成就感……
3、復雜的結構化查詢
星期三 天氣 冷 心情 good
外面飄著雪花,美好的一天又已經開始了!實習已經到了一半,離回家的日子也近了很多,所以心情也是越實習越好了!今天的工作當然也完成的比較順利!雖然有的還挺難的!但是相信自己一定就會成功!嘿嘿……看看自己的勞動成果就知道了!
3、復雜的結構化查詢
--(16)查詢選修了英語的學生的姓名和成績;
select 學生.姓名,成績.成績 from 成績,學生,課程
where 課程.課程名='英語'and 學生.學號=成績.學號 and 課程.課程號=成績.課程號
group by 學生.姓名,成績.成績
--(17)分別統計每個班級的男女人數(要求顯示出班級、性別、對應的人數)
SELECT 班級, 性別, COUNT(性別)AS'人數' FROM 學生
group by 班級,性別
--(18)求年齡大於所有女同學年齡的男學生姓名和年齡。
select 姓名,年齡 from 學生
where 性別='男'and 年齡>(select max(年齡) from 學生 where 性別='女')
group by 姓名,年齡
--(19)計算選修了1號課程的學生的平均成績(要求顯示出課程號和對應的平均成績)
select 課程號,avg(成績)as'平均成績'from 成績
where 課程號='1'
group by 課程號
--(20)查詢選修課程學生的學號、姓名、所選課程名、取得的成績
select 學生.學號,姓名,課程.課程名,成績.成績 from 學生,成績,課程
where 學生.學號=成績.學號 and 課程.課程號=成績.課程號
--(21)查詢學生的學號、姓名、性別及所選修各門課程的成績(要求每位學生用一個數據行顯示這些信息)
SELECT 學生.學號, 學生.姓名,學生.性別,
(select 成績 from 成績 where 課程號='1' and 學生.學號=學號) as '數學',
(select 成績 from 成績 where 課程號='2' and 學生.學號=學號) as '英語',
(select 成績 from 成績 where 課程號='3' and 學生.學號=學號) as '計算機基礎',
(select 成績 from 成績 where 課程號='4' and 學生.學號=學號) as '資料庫',
(select 成績 from 成績 where 課程號='5' and 學生.學號=學號) as '政治',
(select 成績 from 成績 where 課程號='6' and 學生.學號=學號) as '體育'
FROM 學生 INNER JOIN 成績 ON 學生.學號=成績.學號
GROUP BY 學生.學號, 學生.姓名,學生.性別
--(22)查詢李路路所學的課程名和對應的成績,並按照成績升序排列。
select 姓名,課程名,成績 from 學生,課程,成績
where 姓名='李路路'and 課程.課程號=成績.課程號 and 學生.學號=成績.學號
order by 成績
--(23)查詢平均成績大於 75 分的課程,要求顯示課程名和平均成績。
select 課程名,avg(成績)as'平均成績' from 課程,成績
where 課程.課程號=成績.課程號
group by 課程名
having avg(成績)>=75
--(24)查詢所選課程平均成績前三名的那些學生的姓名和平均成績。
select top 3 學生.學號,姓名,avg(成績.成績)as'平均成績'from 成績,學生 where 學生.學號=成績.學號 group by 學生.學號,姓名 order by avg(成績.成績) desc
--(25)查詢和李工業在同一個班級的學號和姓名
select 學號,姓名 from 學生
where 班級 in (select 班級 from 學生 where 姓名='李工業')
--(26)查詢JW0831班中入學成績比李里高的學生的姓名
select 姓名 from 學生
where 班級='JW0831' and 入學成績>(select 入學成績 from 學生 where 姓名='李里')
--(27)在學生表中查詢高於入學成績平均分的學生學號、姓名、班級、入學成績
select 學號,姓名,班級,入學成績 from 學生
where 入學成績>(select avg(入學成績)as'平均成績'from 學生)
--(28)查詢沒有選修課程的學生的學號和姓名
select 學生.學號,學生.姓名 from 學生
where 學號 not in(select 學號 from 成績 group by 學號 )
--(29)查詢選修了 5(含5) 門以上課程的學生的姓名。
select 姓名 from 學生,成績,課程 where 成績.課程號=課程.課程號 and 學生.學號=成績.學號
group by 成績.學號,姓名
having count(成績.學號)>=5
--(30)查找同名同姓的學生信息。
select a1.* from 學生 a1,學生 a2
where a1.姓名=a2.姓名 and a1.學號<>a2.學號
星期四 天氣 冷 心情 good
數據管理
--(1)利用學生表創建一個新表(不含數據):優秀(學號,姓名,性別),
--然後在學生表中檢索每一門課程成績都大於等於80分的學生學號、姓名和性別,
--並把檢索到的值送往優秀表中。
select 學號,姓名,性別 into 優秀 from 學生
where 5>6
insert into 優秀 select 學號,姓名,性別 from 學生 where 學號 in (select 學號 from 成績 group by 學號 having min(成績)>=80 )
--(2)把李路路同學的選課和成績全部刪去。
delete from 成績
where 成績 in(select 成績 from 學生,成績 where 學生.學號=成績.學號 and 姓名='李路路')
--(3)把低於總平均成績的女同學成績提高5%。
UPDATE 成績 SET 成績=成績*(1+0.05) WHERE 成績<(select avg(成績.成績)as'平均成績'from 成績) and 學號 in(select 學號 from 學生 where 性別='女')
--(4)把選修數學課不及格的成績全改為空值。
UPDATE 成績 SET 成績=null WHERE 成績<60 AND 課程號=(select 課程號 from 課程 where 課程名='數學')
--(5)在成績表修改4號課程的成績,若成績小於等於75分時提高5%,若成績大於75分時提高4%(用兩個UPDATE語句實現)。
UPDATE 成績 SET 成績=成績*0.5 WHERE 成績<=75 and 課程號='4'
UPDATE 成績 SET 成績=成績*0.4 WHERE 成績>75 and 課程號='4'
--(6)將選修4號課程且成績沒有及格的學生的成績調整為 60 分。
UPDATE 成績 SET 成績=60 WHERE 成績<60 AND 課程號='4'
自定義函數的使用
編寫一函數(hws),判斷一個整數是否為迴文數,若是函數值為「是」,否則為「否」,利用該函數判斷迴文數基本表中A1列的整數是否為迴文數,若是,則A2列的值為「是」,否則為「否」。
create function hws(@A1 int)
returns char(2)
as
begin
declare @y int,@r int,@c char(2),@z int
select @y=0,@z=@A1
while @A1!=0
select @r=@A1%10,@y=@y*10+@r,@A1=@A1/10
if @y=@z
set @c='是'
else
set @c='否'
return @c
end
update 迴文數 set A2=dbo.hws(A1)。
星期五 天氣 冷 心情 good
游標的使用
利用游標可以訪問單獨數據行的特點,逐一對三角形基本表中的數據行(三條邊)進行處理,求三角形的面積。
Declare yb cursor
For
Select*from 三角形
Declare @a float,@b float,@c float,@p float,@s float
Open yb
Fetch next from yb into @a,@b,@c,@s
While @@fetch_status=0
Begin
If @a+@b>@c and @a+@c>@b and @b+@c>@a
select @p=(@a+@b+@c)/2.0,@s=round(sqrt(@p*(@p-@a)*(@p-@b)*(@p-@c)),2)
else
set @s=null
update 三角形 set s=@s where current of yb
fetch next from yb into @a,@b,@c,@s
end
close yb
deallocate yb
心得體會
時光匆匆,一個星期的實習已經接近尾聲了,對於本次的實習心情就是輕松加愉快,收獲也是碩果累累,在老師的安排下,實習的過程是根據每天老師給的任務,按時完成作業然後再把報告寫完根據規劃每天都有條不絮的干著自己的事情,對於我是一個不會安排時間的人,生活中重來沒有規劃,所以事情每次幹完不是緊一陣就是松一陣的,所以通過這次實習中在老師的安排下,自己也懂得了安排時間的重要性,也從中吸取到了一些經驗。
在本次實習中我不僅把本學期學習的資料庫基本知識進行了點到點的復習,也把它進行了鞏固,在原來沒有學好的地方通過本次的實習學的比以前學的更好,不僅如此,我們在做課程設計的時候還學會了獨自的思考和協作,有些知識點我們運用的不是很好,但是後面再老實的幫助和在同學的探討下,最後都把它解決了出來。除此之外,我也感覺到實習並不是因為完成任務而實習,它是為了讓我們更好的掌握知識,並把知識運用到生活中去的,就像藝術一樣,源於生活,而應用於生活一樣。資料庫的學習,也是為了以後生活中方便自己方便他人而學習的。
由於每天緊張的課程,一路都是匆匆來匆匆去,所以一個班同學的交流也是很少的,通過實習所以同學之間交流的機會也就比較多了一點,比才的感覺也因此增進了不少,以上就是本次在實習中所得到的心得,至於沒有感受到的,將在以後的生活中再次的吸取生活中的經驗。來進行學習中的總結。