第一篇:數據庫實驗4要求
2018年4月27日星期五
實驗四:
SQL數據查詢實驗
學號
1615070316
姓名
汪旭
實驗目的:
(1)熟練掌握SQL Server 管理器環境中交互式SQL語言的應用(2)理解并熟練掌握SQL查詢語句各子句的功能作用及其應用方法(3)能夠靈活應用SQL查詢語句實現數據查詢,包括簡單查詢、帶函數的查詢、分組查詢、排序查詢等。
(4)能夠靈活應用SQL查詢語句實現復雜的數據查詢,包括多表連接查詢、嵌套的查詢、謂詞演算查詢等。
實驗要求:(1)查詢全部男生的學號和姓名。
SELECT S#,SNAME FROM S WHERE SSEX='男'
(2)找出1997年1月1日以后出生的所有女同學的學號和姓名。
SELECT S#,SNAME FROM S
WHERE SSEX='女' AND SBIRTHIN>1997-1-1
(3)查詢學生關系S中姓李的學生的學號和姓名。
SELECT S#,SNAME FROM S WHERE SNAME LIKE'李%'
(4)查詢所有學生所學課程的最高分、最低分和平均分。
SELECT MAX(GRADE)最高分,MIN(GRADE)最低分,AVG(GRADE)平均分 FROM SC 2018年4月27日星期五
(5)找出學習了課程號為‘C401001’和‘C402002’的學生的學號和姓名。.(6)找出至少有4名學生學習的課程的課程號。
(7)找出至少學習了‘張國慶’教師所講的一門課程的所有學生的學號、姓名和專業代碼(8)按出生日期的升序找出‘計算機科學’專業的學生的學號、姓名和出生日期(9)找出沒有學習‘計算機網絡’課程的所有學生的學號、姓名和專業名稱
(10)找出至少學習了‘計算機網絡’和‘數據結構’兩門課程的學生的學號和姓名。(11)找出至少有3名同學選修的,并以C403開頭的課程號的平均分數。
第二篇:VB實驗4要求
一、實習目的1.理解數組的概念、分類,數組定義方法;
2.掌握數組的操作(賦值、運算、輸出)的基本方法;
3.掌握與數組有關的算法;
4.理解自定義數據類型;
5.了解控件數組。
二、實習內容
(1)統計某門課6個學生成績高于平均分的人數
(2)某門課n個學生中,將高于平均分的成績輸出
(3)將1010101010這10個數存放到數組中
(4)用array函數給數組賦值并將數組元素值輸出
(5)輸入多名學生的一門課程成績(成績用數組存放,要求成績用文本框輸入),統計0-
59、60-69、70-79、80-89、90-100個分數段人數。
(6)用比較交換法對10個學生成績實現從低到高排序
(7)例5-8(用選擇法做排序)
(8)例5-9(對于一組數,鍵盤輸入一個數,用順序查找法找出該數在數組中的位置)
(9)有一個數列,前兩項為1,從第三項開始,每一項都是前兩項之和,輸出該數列的前30項
(10)打印楊輝三角形
(11)P145頁第2題(有一個m行n列二位數組,找出其中最大元素所在的行和列,并輸出其值及行號和列號。)
(12)P147 第10題(求m行n列的矩陣四周元素之和,元素值可以隨機產生,m、n從鍵盤輸入。)
(13)147頁第11題
第三篇:數據庫實驗
實驗1.1 使用SQL Server工具(Microsoft SQL Server Management Studio Express)管理數據庫 實驗內容:
(1)使用SSMS(SQL Server Management Studio)加入實驗數據庫。(2)使用SSMS可視化建立、修改和刪除數據庫、表。(3)使用SSMS對數據庫進行備份和恢復。
(4)使用SSMS對表進行查詢、插入、修改、刪除。實驗步驟:
(1)加入School數據庫。(2)建立Test數據庫。
(3)在數據庫中建立人員表PERSON(P#,Pname,Page)。更改表設置P#為主鍵,增加屬性Ptype(類型是CHAR,長度是10)。
(4)用SSMS的查詢功能(新建查詢)對PERSON表進行查詢、插入、修改、刪除等操作:首先插入兩條記錄;修改第二條記錄;刪除第二條記錄。(5)備份Test數據庫。(6)刪除表PERSON。(7)恢復Test數據庫。(8)刪除Test數據庫。
第四篇:數據庫實驗
3.實驗步驟
在學生選課數據庫中實現其查詢操作,寫出T-SQL語句(注:學生選課數據庫為前三次實驗課所建立的數
據庫)
一、簡單查詢實驗
(1)查詢選修了課程的學生學號。
(2)查詢選修課程號為0101的學生學號和成績,并要求對查詢結果按成績降序排列,如果成績相同則按
學號升序排列。
(3)查詢選修課程號為0101的成績在80~90分之間的學生學號和成績,并將成績乘以系數0.8輸出。
二、連接查詢實驗
(1)查詢每個學生的情況以及他(她)所選修的課程。
(2)查詢選修離散散學課程且成績為90分以上的學生學號、姓名及成績。
(3)查詢每一門課的間接先行課(即先行課的先行課)
三、嵌套查詢操作
(1)查詢0101課程的成績高于張林的學生學號和成績。
(2)查詢其他系中年齡小于計算機系年齡最大者的學生。
(3)查詢同王洪敏“數據庫原理”課程分數相同的學生的學號。
(4)查詢選修了全部課程的學生的姓名。
(5)查詢與學號為09001103的學生所選修的全部課程相同的學生學號和姓名。
(6)查詢至少選修了學號為09001103的學生所選修的全部課程的學生學號和姓名。
四、組合查詢和分組查詢
(1)查找選修“計算機基礎”課程的學生成績比此課程的平均成績大的學生學號、成績。
(2)查詢年齡大于女同學平均年齡的男同學姓名和年齡。
(3)列出各系學生的總人數,并按人數進行降序排列。
(5)查詢選修計算機基礎和離散數學的學生學號和平均成績。
4、要求
請按題號依次作答,完成在word文檔中,寫明班級學號姓名,于周日之于周日之前發至xcf7@163.com,獨立完成,嚴禁抄
第五篇:數據庫實驗答案
實驗四
五、實驗方法和步驟:
1.向數據庫的USERS表空間添加一個大小為10M的數據文件userdata02.dbf。
Alter tablespace users add datafile ‘c:oracleoradataorcluserdata02.dbf’ size 10M;2.向數據庫的TEMP表空間添加一個大小為5N的臨時數據文件temp02.dbf。
Alter tablespace temp add tempfile’c:oracleoradataorcltemp02.dbf’ size 5M;3.修改userdata02.dbf為自動增長方式,每次增長512k,沒有限制大小。
Alter database datafile ‘c:oracleoradataorcluserdata02.dbf’ autoextend on next 512k maxsize unlimited;
4.取消userdata02.dbf的自動增長方式。
Alter database datafile ‘c:oracleoradataorcluserdata02.dbf’ autoextend off;5.將userdata02.dbf大小設置為8MB。
Alter database datafile ‘c:oracleoradataorcluserdata02.dbf’ resize 8M;6.將userdata02.dbf設置為脫機。
Alter database datafile ‘c:oracleoradataorcluserdata02.dbf’ offline;7.將userdata02設置為聯機。
Alter database datafile ‘c:oracleoradataorcluserdata02.dbf’ online;8.改變userdata02的名稱。
(1)alter tablespace users offline;
(2)將userdata02.dbf重命名為userdata002.dbf;(3)alter tablesace users rename datafile ‘c:oracleoradataorcluserdata02.dbf’,‘c:oracleoradataorcluserdata002.dbf’;(4)alter tablespace users online;
9.查詢數據文件信息(包括數據文件動態信息;數據文件詳細信息;臨時數據文件信息)。(1)select name,file#,status,checkpoint_change# from V$DATAFILE;
(2)select tablespace_name,bytes,autoextensible,file_name from DBA_DATA_FILES;(3)select tablespace_name,file_name,autoextensible from DBA_TEMP_FILES;
實驗五 表空間、段、區、塊的管理
五、實驗方法和步驟:
1.編輯一個腳本文件TEST,腳本文件內容為創建一個永久性的Student表空間,區自動擴展,段采用手動管理方式,并執行腳本文件。
Create tablespace student datafile ‘c:oracleoradataora404orcltbs1_1.dbf’ 2.為數據庫的student表空間添加一個大小為10MB的新的數據文件。
Alter tablespace student add datafile ‘c:oracleoradataora404orcltbs1_2.dbf’ size 10M 3.創建一個臨時表空間mytemp,并為臨時表空間添加一個大小為10MB的臨時數據文件。
Create temporary tablespace mytemp tempfile ‘c:oracleoradataora404orcltemp1_1.dbf’ size 20M extent management local uniform size 16M;
Alter tablespace mytemp add tempfile c:oracleoradataora404orltemp1_2.dbf’ size 10M 4.將student表空間新添加的數據文件的大小改為20MB。
Alter database datafile c:oracleoradataora404orcltbs1_2.dbf’ resize 20M 5.將studnet表空間設置為offline;再設置為online。Alter tablespace student offline;Alter tablespace student online;6.將student表空間設置為只讀狀態。Alter tablespace student read only;7.為student表空間創建一個回退段。
Create rollback segment student_roll tablespace student;8.刪除student表空間及其所有內容。
Drop tablespace student including contents;9.查詢表空間基本信息。
Select tablespace_name, extent_management,a llocation_type, contents from DBA_TABLESPACE;10.查詢表空間數據文件信息。
Select file_name, blocks, tablespace_name from DBA_DATA_FILES;11.統計表空間空閑空間信息。
SELECT TABLESAPCE_NAME “TABLESPACE”, FILE_ID, COUNT(*)“PIECES”, MAX(BLOCKS)“MAXIMUM”, MIN(BLOCKS)“MINIMUM”, AVG(BLOCKS)“AVERAGE”, SUM(BLOCKS)“TOTAL” FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME, FILE_ID;
12.查詢表空間空閑空間大小。
SELECT TABLESPACE_NAME, SUM(BYTES)FREE_SPACES FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME;
13.查詢scott用戶emp表的某個員工元組的物理地址(ROWID)。SELECT ROWID, EMPNO FROM SCOTT.EMP WHERE EMPNO=7369;
實驗六 模式對象管理—基礎表
五、實驗方法和步驟:
1、創建一個表
目標:創建一個名為STUDENT的表,該表有ID(學號)、NAME(姓名)、SEX(性別)、COURSE(課程)、SCORE(成績)字段,并保存在USER01表空間。
(1)在SQL*PLUS中執行使用CREATE TABLE語句在某一表空間中創建STUDENTS表,并通過INSERT、SELECT、UPDATE、DELETE語句對表進行操作,各舉一例。(2)通過OEM控制臺新的表,并查看新表情況。Create table student(Id number primary key, Name varchar2(20), Sex char(1),Course varchar2(20), Score number(5,2))tablespace users
Insert into student(id)values(1);Select id from student;
Update student set id=2 where id=1;Delete from student where id=2;
2、創建一個臨時表
目標:創建一個名為TEMP01的事務級別臨時表,該表有ID(學號)、NAME(姓名)字段,并保存在temp表空間中。
Create global temporary table temp01(id number(2)primary key, name varchar(20))on commit delete rows;
3、修改表
目標:修改STUDENTS表的存儲參數;為表分配新的存儲空間;添加一個新的列;設置列為無用狀態(UNUSED)。
(1)在SQL*PLUS中執行ALTER TABLE語句修改STUDENTS表的存儲參數(修改pctfree和pctused分別為20和40)。
Alter table student pctfree 20;Alter table student ptused 40;
(2)在SQL*PLUS中執行ALTER TABLE語句在STUDENTS表分配大小為400KB的新區。Alter table student allocate extent(size 400k);
(3)在SQL*PLUS中執行ALTER TABLE語句在STUDENTS表新增加一個AGE列,列的類型為NUMBER(2)。Alter table student add(age number(2));
(4)在SQL*PLUS中執行ALTER TABLE語句在將STUDENTS表中的AGE設置為無用狀態。Alter table student set unused(age);
4、截斷表
目標:刪除表STUDENTS中的所有記錄。
(1)在SQL*PLUS中執行TRUNCATE TABLE語句刪除STUDENTS表中的所有記錄。Truncate table student;
(2)在SQL*PLUS中執行SELECT語句查看STUDENTS表中的內容。Select * from student;
5、查詢ORACLE數據庫的模式對象信息
目標:使用管理工具(SQL*PLUS或OEM)獲得有關數據庫模式對象的有關信息。
(1)用SCOTT帳戶登錄SQL*PLUS,顯示用戶,并通過用戶視圖USER_TABLES、USER_VIEWS、USER_INDEXS、USER_OBJECTS、USER_TRIGGERS、USER_SEQUENCES等模式對象信息。Show user
Select table_name from user_tables;Select view_name from user_views;Select index_name from user_indexes;Select object_name from user_objects;Select trigger_name from user_triggers;Select sequence_name from user_sequence;
(2)使用SCOTT帳戶登錄數據庫,在OME控制臺中查看SCOTT用戶的各種模式對象信息。
6、給表student表的nane列添加一個唯一值約束,并刪除該約束 Alter table student add constraint p_uk unique(name);Alter table student drop drop constraint p_uk;
實驗七 模式對象管理—視圖
五、實驗方法和步驟:
1、創建基礎表BOOKS,包含BOOK_ID,數字型,BOOK_NAME,可變長50位,AUTHOR,可變長20位,PRESS可變長50位,Price數字型,PUBLISH_DATE,日期型;并插入10條數據。Create table books(Book_id number primary key, Book_name varchar2(50)not null, Author varchar2(20), Press varchar2(50), Price number, Publishdate date);
2、關系視圖
(1)建立關系視圖V_BOOKS,包含書名、作者、出版社。Create view v_books as
Select book_id 編號,author 作者,press 出版社
from books;(2)查看視圖定義。
Select text from user_views where view_name=’VW_BOOKS’;(3)查看視圖內容。
Select * from vw_books;
(4)修改視圖,增加一個列出版日期。
Create or replace view VW_BOOKS As
select book_id 編號,author 作者,press 出版社,publishdate 出版日期
from books;(5)向基礎表增加一個屬性列“價格”,數字型。查看視圖的可用性狀態。
alter table boks add price int;
Select object_name,status from user_objects where object_name=’VW_BOOKS’ and object_type=’VIEW’;
(6)重新編譯V_BOOKS視圖。再查看視圖的可用性狀態
alter view vw_books compile
Select object_name,status from user_objects where object_name=’VW_BOOKS’ and object_type=’VIEW’;(7)刪除該視圖。
drop view vw_books;
3、內嵌視圖
(1)查詢價格由高到低處于前三位的書本信息,注意采用內嵌視圖的方式實現。
select * from
(select book_id,book_name ,price from books
order by price desc)where rownum<=3;
(2)利用內嵌視圖將所有書籍的價格增加10元。
update(select price from books)set price=price+10
實驗十 PL/SQL程序結構
五、實驗方法和步驟:
1.在SQL*Plus中使用PL/SQL塊處理EMP表中職工號7788的職工,如果工資小于5000那么把工資更改為5000。
(1)首先采用SCOTT用戶登錄;(2)查詢7788員工的工資是多少;
(3)定義聲明塊和執行塊,修改該員工工資;(4)再查詢該員工工資是多少; SQL>DECLARE
X NUMBER(7,2);BEGIN
SELECT sal INTO x FROM emp WHERE empno = 7788;
IF x < 5000
THEN UPDATE emp SET sal = 5000 WHERE empno = 7788;END IF;END;
2.利用三種循環控制結構向表中插入150條記錄。(1)創建一張表,用來記錄循環指針的值;
Create table temp_table(num_col number, info_col char(10));(2)利用LOOP循環向表中插入前50條記錄; DECLARE
v_counter BINARY_INTEGER :=1;BEGIN
LOOP
INSERT INTO temp_table values(v_counter,’loop index’);
v_counter := v_counter+1;
EXIT WHEN v_counter>50;
END LOOP;END;
(3)利用WHILE循環向表中插入51-100條記錄; DECLARE
v_counter BINARY_INTEGER :=1;BEGIN
WHILE v_counter<100 LOOP
INSERT INTO temp_table values(v_counter,’loop index’);
v_counter := v_counter+1;
END LOOP;END;
(4)利用FOR循環向表中插入101-150條記錄; DECLARE
v_counter BINARY_INTEGER :=1;BEGIN FOR v_counter IN 101..150 LOOP
INSERT INTO temp_table values(v_counter,’loop index’);
END LOOP;END;
(5)查看表中的信息。
SLELECT * FROM TEMP_TABL
實驗十一 游標
五、實驗方法和步驟:
1.聲明顯式游標
聲明一個游標用來讀取基表EMP中部門號是20且工作為分析員的職工: DECLARE Cursor c1 IS
SELECT ename, sal, hiredate FROM emp WHERE deptno = 20 AND job = 'ANALYST';v_ename VARCHAR2(10);v_sal NUMBER(7,2);v_hiredate date;begin OPEN c1;
FETCH c1 INTO v_ename, v_sal, v_hiredate;CLOSE c1;end;
2.游標的應用
(1)利用游標修改數據,如果EMP中部門號是20,工作為分析員的職工工資小于5000,更改為5000: DECLARE CURSOR c1 IS
SELECT empno, sal, hiredate, rowid
FROM emp WHERE deptno = 20 AND job = 'ANALYST' FOR UPDATE OF sal;emp_record c1%ROWTYPE;BEGIN OPEN c1;LOOP
FETCH c1 INTO emp_record;EXIT WHEN c1%NOTFOUND;IF emp_record.sal <5000 THEN
UPDATE emp set sal = 5000 where empno = emp_record.empno;END IF;END LOOP;CLOSE c1;END;
(2)利用游標,如果部門是SALES,地址不是DALLAS的,地址更改為DALLAS;如果部門不是SALES,地址不是NEW YORK的,地址更改為NEW YORK: DECLARE CURSOR c1 IS SELECT dname, loc FROM dept FOR UPDATE OF loc;Dept_rec c1%ROWTYPE;BEGIN OPEN c1;LOOP
FETCH c1 INTO dept_rec;EXIT WHEN c1%NOTFOUND;
IF dept_rec.dname = 'SALES' AND dept_rec.loc!= 'DALLAS'
THEN UPDATE dept SET LOC = 'DALLAS' WHERE CURRENT OF C1;ELSE IF DEPT_REC.DNAME!= 'SALES' AND DEPT_REC.LOC!= 'NEW YORK' THEN UPDATE dept SET LOC = 'NEW YORK' WHERE CURRENT OF C1;END IF;END LOOP;CLOSE c1;END;
實驗十二 存儲過程和函數
1.編寫一個存儲過程,用它顯示scott.dept、scott.emp表中各部門的名稱、員工總
數以及員工的工資總和和平均工資。
set serverout on;
create or replace procedure outputEMP as begin declare
cursor cEMP is
select dname,count(*),avg(sal),sum(sal)
from scott.emp,scott.dept
where scott.emp.deptno=scott.dept.deptno
group by dname;
d_name varchar2(14);
count_EMP number;
sum_sal number(7,2);
avg_sal number(7,2);
begin
open cEMP;
fetch cEMP into d_name,count_EMP,avg_sal,sum_sal;
while cEMP %found loop
dbms_output.put_line(d_name||','||count_EMP||','||avg_sal||','||sum_sal);
fetch cEMP into d_name,count_EMP,avg_sal,sum_sal;
end loop;
close cEMP;
end;
end outputEMP;2.編寫一個函數,用它計算0到指定數字(作為函數輸入參數)之間的整數和。set sertverout on;
create or replace function get_sum(maxNUM number)return number as begin
declare sumNUM number;
i number;
begin
sumNUM:=0;
i:=maxNum;
while i>0 loop
sumNUM:=sumNUM+i;
i:=i-1;
end loop;
return sumNUM;
end;end get_sum;
實驗十三 觸發器
1.編寫一個觸發器,用它把數據庫系統的關閉事件記錄到一個表(表結構自己設計)內。Create table shutdown_log(shut_user varchar2(20),shut_time date,shut_action varchar2(20));
create or replace trigger shutdown_record before shutdown on database begin
insert into shutdown_log values(user,sysdate,'關閉數據庫');end;
2.編寫一個行觸發器,把emp表增、刪、改操作前后員工的姓名和工資前后變化情況顯示處理。create or replace trigger trg_emp_dml_row
Before insert or update or delete on scott.emp
For each row
Begin
If inserting then
Dbms_output.put_line(:new.empno||’ ’||:new.ename);
Elsif updating then
Dbms_output.put_line(:old.sal||’ ’||:new.sal);
Else
Dbms_output.put_line(:old.empno||’ ’||:old.ename);
End if;
End trg_emp_dml_row;