實驗名稱:實驗二 數據基本查詢
實驗目的
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;