程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 數據庫---實驗二 數據查詢,---數據查詢

數據庫---實驗二 數據查詢,---數據查詢

編輯:MySQL綜合教程

數據庫---實驗二 數據查詢,---數據查詢


 

(一)多表連接查詢
i.    查詢每個選課學生的學生姓名、課程號和分數。(2表連接)
SQL> select student.sname,sc.cno,sc.grade from student,sc where student.sno=sc.sno;
ii.    求學生的學號、姓名、選修課程的課程名及成績。(3表連接)
SQL> select student.sno,student.sname,course.cname,sc.grade from student,course,sc where student.sno=sc.sno and sc.cno=course.cno;
iii.    求選修課程號為1或課程號為2的學生姓名和學號。
SQL> select distinct student.sname,student.sno from student,sc where student.sno=sc.sno and (sc.cno=1 or sc.cno=2);
iv.    查詢每一門課程的間接先行課的課程號。
SQL> select first.cno,second.cpno from course first,course second where first.cpno=second.cno;
v.    查詢與’劉晨’在同一個系學習的學生。
SQL> select * from student where sdept=(select sdept from student where sname='李佳');
vi.    查詢選修了課程名為’C語言’的學生學號和姓名。
SQL> select student.sno,student.sname from student,sc,course where student.sno=sc.sno and sc.cno=course.cno and course.cname='PASCAL語言';
vii.    查詢平均成績在80分以上的學生學號和平均成績。
SQL> select sno,avg(grade) avg_grade from sc group by sno having avg(grade)>=80;
viii.    查詢選修了1門且平均分在85分以下課程的學生的學號。
SQL> select distinct sc.sno from student,sc where student.sno=sc.sno and cno in (select cno from sc group by cno having avg(grade)<85);
ix.    以學生為主體顯示學生的信息及其選課的信息。
        SQL> select * from student,sc where student.sno=sc.sno(+);
x.    對學生表和選課表做自然連接,並輸出結果。
SQL> select student.sno,student.sname,student.ssex,student.sage,student.sdept,sc.cno,sc.grade from student,sc where student.sno=sc.sno;
xi.    輸出學號大於’ 劉晨’的學生的姓名和學號。
SQL> select sname,sno from student where sno>(select sno from student where sname='劉明');
xii.    查詢數學系的學生每個人所選課程的平均成績。
SQL> select sc.sno,avg(sc.grade) from (select sno from student where sdept='MA')S,sc where S.sno=sc.sno group by sc.sno;
xiii.    查詢選修2號課程且成績高於“20070001”號學生成績(2號課程的成績)的所有學生記錄。
      SQL> select student.* from student,sc where student.sno=sc.sno and sc.cno=2 and sc.grade>(select grade from sc where cno=2 and sno='20070001');

(二)選做(使用from子句,通過inner join,left join,right join,cross join完成多表連接查詢)
1.    以學生為主體顯示學生的信息及其選課的信息。
SQL> select * from student left join sc on student.sno=sc.sno;
2.    查詢選修了2號課程的學生姓名。
SQL> select student.sname from student inner join sc on student.sno=sc.sno and sc.cno=2;
3.    學生表和課程表做笛卡爾積。
       SQL> select * from student cross join course;

(三)思考題:
1.Where子句中能否用聚集函數作為條件表達式。
答:不能。
2.多表連接查詢中如果顯示的某一屬性不止一個表中出現,應如何處理。
        答:應該用表名加上點,再加上屬性名表示。

 

實驗分析與討論:

      在本次數據庫試驗中,我完成了實驗要求。本次實驗內容是關於多表的連接查詢及投影、選擇條件。在課堂上,老師講授了多表連接查詢的相關知識,我也用筆練習寫了sql語句,但是感覺印象還不是很深刻,有些不太理解。在實驗課中我練習了sql語句,對課堂上所學的知識有了更深的理解,收獲很多。實驗中,我遇到了一些問題,通過查詢資料和老師同學幫助最終解決了。遇到的問題如下:

      1、在多表查詢時,我不太清楚怎麼為表取別名,在實驗中,我查詢資料明白了在一個查詢得到的表後可以直接加上別名。

      2、在做第二題時,我對外連接不太清楚,通過一個個測試,了解了inner join,

left join, right join和cross join的用法。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved