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

數據庫---實驗三 嵌套查詢和視圖操作,---嵌套

編輯:Oracle教程

數據庫---實驗三 嵌套查詢和視圖操作,---嵌套


(一)	嵌套查詢
1.	求選修了’MA’的學號和姓名。
SQL> select sno,sname from student where sno in(select sno from sc where cno=(select cno from course where cname='數學'));
2.	查詢與劉明在同一個系學習的學生。
SQL> select * from student where sdept=(select sdept from student where sname='劉明');
3.	求選修1號課程的成績高於劉晨的成績(指劉明選修的所有的課程的成績)的學生學號及成績。
   SQL> select  sno,grade from sc where cno='1' and grade>all(select grade from sc where sno=(select sno from student where sname='劉明'));
4.	求其他系中比計算機系某一學生年齡小的學生(即年齡小於計算機系年齡最大者的學生)。
   SQL> select * from student where sdept!='CS' and sage<any(select sage from student where sdept='CS');
5.	求其他系中比計算機系學生年齡都小的學生姓名及年齡。
   SQL> select sname,sage from student where sdept!='CS' and sage<all(select sage from student where sdept='CS');
6.	求沒有選修3號課程的學生姓名。
   SQL> select sname from student where sno not in(select sno from sc where cno='3');
7.	查詢選修了全部課程的學生姓名。
       SQL> select sname from student where not exists(select * from course where not exists (select * from sc where sno=student.sno and cno=course.cno));
SQL語言中沒有全稱量詞∨(,all)。但是可以把帶有全稱量詞的謂詞轉換為等價的帶有存在量詞的謂詞。(∨x)P≡∟(exists x(∟P))
試做:查詢所有學生都選修的課程名
SQL> select cname from course where not exists(select * from student where not exists(select * from sc where sc.sno=student.sno and sc.cno=course.cno));
8.	求至少選修了學號為“20070002”的學生所選修全部課程的學生學號和姓名。
       SQL> select sno,sname from student where sno in(select distinct sno from sc scx where not exists(select * from sc scy where   scy.sno='20070002' and not exists(select * from sc scz where scz.sno=scx.sno and scz.cno=scy.cno)));
9.	求選修課程超過2門的學生的學號和姓名。
      SQL> select sno,sname from student where sno in(select sno from sc group by sno having count(*)>=2);

二、數據更新
1.插入數據
1)向Student表中插入2行數據,1行為你的信息,另一行自定。
 insert into student(sno,sname,ssex,sage,sdept) values(20143985,'陳健軍','男',20,'CS');
insert into student(sno,sname,ssex,sage,sdept) values(20144065,'徐誠武','男',20,'CS');
截圖如下:
 
2)向Course表中插入數據,1行為本門課程的信息,另一行自定。
SQL> insert into course(cno,cname,cpno,ccredit) values(8,'數據庫系統概論',5,5);
SQL> insert into course(cno,cname,cpno,ccredit) values(9,'JAVA',7,6);
截圖如下
  
3)向SC表中插入數據,插入你的這門課程的選課信息。
SQL> insert into sc(sno,cno,grade) values(20143985,5,98);
截圖如下:
 
2.修改數據
1)將姓劉的同學刪除。
  SQL> delete from student where sname like '劉%';
截圖如下:
 
2)將’CS’系同學的選課信息中的成績置0。
 SQL> update sc set grade=0 where sno in(select sno from student where sdept='CS');
截圖如下:
 
3.刪除數據
1)刪除和’李佳’在同一個系的學生的信息。
SQL> delete from student where sdept=(select sdept from student where sname='李佳');
截圖如下:

 
2)刪除’CS’系同學的選課信息。
SQL> delete from sc where sno in(select sno from student where sdept='CS');
截圖如下:
 

 

實驗分析:

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

1、在嵌套查詢時,我感覺有點混亂,不知道怎麼寫,然後我後來一步步分析,先寫好一個小的查詢作為另一個查詢的查詢條件,一步步編寫,查詢就完成了。

2、在寫關於exists的嵌套查詢時,我感覺很難,查閱相關的資料後,明白了除法經常用exists實現。一般像至少、包括這樣的題意時,關系代數要用除法實現,然後除法在sql語句中可以轉化為兩重not  exists實現。

在本次實驗中感覺收獲很多,很開心。

 

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