數據庫原理及應用上機實驗二

實驗名稱:實驗二 數據基本查詢

 

實驗目的

1.掌握SQL查詢語句的一般格式。

2.掌握簡單數據查詢操作。

3.熟練掌握各種查詢條件的表示。

4.掌握排序和分組操作在SQL語句中的實現。

5.掌握集函數的使用。

 

實驗步驟與調試過程(請用簡單的文字描述)

1.按實驗一步驟先建好數據庫,建好表,並輸入實驗一所給的數據。
2.對各表中的數據進行不同條件的查詢;
包括的運算:投影、選擇、比較運算符、邏輯運算符、字符匹配運算符、匹配列表範圍、算術運算符、內部函數、排序、分組、分組函數使用
(1)查詢全體學生的學號和姓名
(2)查詢全體學生的詳細記錄
(3)查詢軟件學院的學生姓名、年齡、系別
(4)查詢所有選修過課程的學生學號(不重複)
(5)查詢考試不及格的學生學號(不重複)
(6)查詢不是軟件學院、計算機系的學生性別、年齡、系別
(7)查詢年齡18-20歲的學生學號、姓名、系別、年齡;
(8)查詢姓劉的學生情況
(9)查詢姓劉或姓李的學生情況
(10)查詢姓劉且名字爲兩個字的學生情況
(11)查詢1983年以後出生的學生姓名。
(12)創建表 studentgrad(sno,mathgrade,englishigrade,chinesegrade)
計算學生各科總成績並賦予別名
(13)利用內部函數 year()查找軟件學院學生的出生年份
(14)利用字符轉換函數實現字符聯接。
       Select sname + ‘年齡爲’+cast(sage as char(2))+’歲’
       From student
(15)查詢全體學生情況,查詢結果按所在系升序排列,對同一系中的學生按年齡降序排列。
(16)查詢學生總人數。
(17)查詢選修了課程的學生人數。
(18)查詢選修了7號課程的學生總人數和平均成績
(19)查詢選修6號課程學生的最好成績
(20)查詢每個系的系名及學生人數。
(21)查找每門課的選修人數及平均成績
(22)查找沒有先修課的課程情況

 

實驗結果(上傳實驗結果截圖或者簡單文字描述)

1.如果要對一列值設置別名,需要select+ 列名+as+新名字。

2.使用group  by可以把一列或者多列分組,具有相同值的會被分在同一個分組。

3.使用year()函數可以很簡潔算出你想要的那個日期的元組數有多少。

4.使用order by 可以對指定列排序,升序可以直接省略。

 

疑難小結(總結個人在實驗中遇到的問題或者心得體會)

1.在查詢全體學生的學號和姓名時,因爲記錯了語句,一直出錯,調試了好久。
2.在進行步驟的時候,不知道怎麼才能在列之間插入字符,很是迷茫,所以去百度了方法之後,纔會。
3.還有就是在進行實驗的過程中,經常遇到一些小問題,總結來說的話,就是不夠細心和認真,下次再做實驗的時候會改正。

 

實驗詳細操作步驟或程序清單

1、查詢全體學生的學號和姓名
select sno,sname 
from student;

2、查詢全體學生的詳細記錄
select * 
from student;

3、查詢軟件學院的學生姓名、年齡、系別
select sname,sage,sdept
from student
where sdept='MA';

4、查詢所有選修過課程的學生學號(不重複)
select distinct sno 
from sc;
where cno<>'null';

5、查詢考試不及格的學生學號(不重複)
select distinct sno
from sc
where grade<60;

6、查詢不是軟件學院、計算機系的學生性別、年齡、系別

select ssex,sage,sdept
from student 
where sdept not in('CS','MA');

7、查詢年齡18-20歲的學生學號、姓名、系別、年齡

select sno,sname,sdept,sage 
from student
where sage between 18 and 20;

8、查詢姓劉的學生情況
select * 
from student
where sname like '劉%';

9、查詢姓劉或姓李的學生情況
select *
from student
where sname like '劉%' or sname like '李%';

10、查詢姓劉且名字爲兩個字的學生情況
select * 
from student
where sname like '劉_';

11、查詢1983年以後出生的學生姓名
select sname 
from student 
where sage < 2019-1983

12、創建表 studentgrad(sno,mathgrade,englishigrade,chinesegrade)計算學生各科總成績並賦予別名
create table studentgrade(
    Sno char(8) ,
    mathgrade int,
    englishigrade int,
    chinesegrade int
)
select sum(mathgrade+chinesegrade+englishigrade) '學生總成績' 
from studentgrade;

13、利用內部函數 year()查找軟件學院學生的出生年份
select (year(getdate())-student.sage+1) 
from student 
where sdept='MA';

14、利用字符轉換函數實現字符聯接。select sname+‘年齡爲’+cast(sage as char(2))+’歲’ from student
select sname+'年齡爲'+cast(sage as char(2))+'歲'
from student;

15、查詢全體學生情況,查詢結果按所在系升序排列,對同一系中的學生按年齡降序排列
select *
from student 
order by sdept,sage desc;

16、查詢學生總人數
select count(*) 
from student;

17、查詢選修了課程的學生人數
select count(distinct sno) 
from sc;

18、查詢選修了7號課程的學生總人數和平均成績
select count(*),avg(grade)as avggrade 
from student,sc 
where student.sno=sc.sno and sc.cno='7';

19、查詢選修6號課程學生的最好成績
select max(grade) as maxgrade 
from sc
where cno='6';

20、查詢每個系的系名及學生人數
select sdept,count(*) 
from student
group by sdept;

21、查找每門課的選修人數及平均成績
select cno,count(*),avg(grade) as avggrade 
from sc
group by cno;

22、查找沒有先修課的課程情況
select * 
from course 
where cpno is null;

 

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