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

數據庫---實驗一 數據定義和單表查詢,---單表

編輯:Oracle教程

數據庫---實驗一 數據定義和單表查詢,---單表


 

一、建立基本表
創建學生表(student)、學生選課表(SC)、課程表(course)
1)·學生表:Student_學號後四位 (Sno, Sname, Ssex, Sdept)其中學號Sno主碼,其中sno為number,sname為varchar2(10),ssex為char(2),sdept為varchar2(10)
    create table Student_3985(
     sno number(4) constraint p1 primary key,
     sname varchar2(10),
     ssex char(2),
     sdept varchar2(10));

2)·課程表:Course_學號後四位(Cno, Cname, Cpno, Ccredit)其中課程號Cno主碼;先行課為外碼參照Course表中Cno字段。其中cno為number,cname為varchar2(10),cpno為number,ccredit為number(2)。
    create table Course_3985(
     cno number(4) constraint p2 primary key,
     cname varchar2(10),
     cpno number(4),
     ccredit number(2),
     constraint q2 foreign key(cpno) references Course_3985(cno));

3)·學生選課表:SC_學號後四位(Sno, Cno, Grade)其中(Sno、Cno)為主碼;Sno為外碼參照Student表中sno字段;Cno為外碼參照Course表中cno字段。
    create table SC_3985(
     sno number(4),
     cno number(4),
     grade number(4),
     constraint p3 primary key(sno,cno),
     constraint q3 foreign key(sno) references Student_3985(sno),
     constraint q4 foreign key(cno) references Course_3985(cno));

二.修改基本表
1)在Student表中加入屬性Sage(number型)。
  SQL> alter table Student_3985 add sage number(4);

2)修改某個表的屬性的數據類型。
     SQL> alter table Student_3985 modify sage varchar2(4);

3)給表student的sex列添加一個自定義約束sex只能取’男’,’女’兩個值。
     SQL> alter table Student_3985 add constraint p4 check(ssex in('男','女'));

三、索引操作
1.建立索引
1)在Student表上建立關於Sname的唯一索引stusnam+學號後四位
  SQL> create unique index stusnam_3985 on Student_3985(sname);

2)在SC表上建立關於Sno升序、Cno降序的唯一索引i_sc+學號後四位
     SQL> create unique index i_sc_3985 on SC_3985(sno asc,cno desc);
2.刪除索引
1)刪除Student表上的索引stusnam+學號後四位
 SQL> drop index stusnam_3985;

2)刪除Course表上的索引i_sc+學號後四位
 SQL> drop index i_sc_3985;

四.刪除基本表
1) 刪除基本表Student
2)刪除基本表SC
結果如何,先執行2),在執行1)結果如何。
(1)先刪除Student再刪除SC
SQL> drop table Student_3985;
drop table Student_3985
ORA-02449: 表中的唯一/主鍵被外鍵引用
SQL> drop table SC_3985;
Table dropped
    結果如上,會提示唯一主鍵被外鍵引用,在重新建立相同的表時,會提示如下,必須先刪掉主鍵約束。
ORA-00955: 名稱已由現有對象使用
SQL> alter table Student_3985 drop constraint p1;
(2)先刪除SC再刪除Student
SQL> drop table SC_3985;
Table dropped
SQL> drop table Student_3985;
Table dropped
結果如上,不會有提示產生。

五、單表查詢
運行如下sql代碼:
Create table student as select * from scott.student;
Create table course as select * from scott.course;
Create table sc as select * from scott.sc;
再執行如下的查詢:
1.    求數學系學生的學號和姓名。
 SQL> select sno,sname from student where sdept='MA'; 
2.    求選修了課程的學生學號。
 SQL> select distinct sno from sc where cno is not null;
3.    求選修課程號為‘2’的學生號和成績,並要求對查詢結果按成績的降序排列,如果成績相同按學號的升序排列。
 SQL> select sno,grade from sc where cno=2 order by grade desc,sno asc;
4.    求選修課程號為’2’且成績在80~90之間的學生學號和成績,並將成績乘以0.8輸出。
 SQL> select sno,grade,grade*0.8 avg_grade from sc where cno=2 and grade>=80 and grade<=90;
5.    求數學系或計算機系姓張的學生的信息。
 SQL> select * from student where (sdept='MA' or sdept='CS')and sname like '張%';
6.    求缺少了成績的學生的學號和課程號。
 SQL> select sno,cno from sc where grade is null;
7.    查詢各個課程號與相應的選課人數。
 SQL> select cno,count(*) choose_num from sc group by cno;

 

實驗分析與討論:

     在本次實驗過程中,我完成了實驗要求。本次實驗是關於表的創建與修改及單表查詢,在課堂上老師講授了理論知識,有些地方不是太理解,在本次實驗課上動手實驗,讓我對學的知識更加理解,進一步掌握課上所學。在試驗中遇到了一些問題,如下:

     1、在寫完整性約束時,我會寫主鍵的列級完整性約束,但是不明白多個屬性的完整性約束。我查閱書發現列級完整性約束只針對單個屬性,多個屬性完整性約束只能定義在表級如:constraint p3 primary key(sno,cno);

     2、在添加完整性約束時,一般的都能操作,但是不知道如何添加check 約束,我覺得應該是用alter table 表名constraint 約束名 check(ssex in(‘男’,’女’))

運行果然是這樣。

     3、在第四題刪除表時,會有紅色的字提示,然後再建表(和之前刪除同名的表)時,會提示名稱已由現有對象使用,然後我使用SQL> alter table Student_3985 drop constraint p1; 將p1約束刪掉後就可以建表了。

 

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