Oracle数据库基础教程课后实验实验报告.docx
《Oracle数据库基础教程课后实验实验报告.docx》由会员分享,可在线阅读,更多相关《Oracle数据库基础教程课后实验实验报告.docx(76页珍藏版)》请在冰豆网上搜索。
Oracle数据库基础教程课后实验实验报告
Oracle数据库基础教程实验报告
专业计算机科学与技术
姓名李文成
学号2010
指导老师肖卓宇
实验一创建数据库和表
目的与要求
(1)了解oracle数据库的逻辑结构和物理结构。
(2)了解OracleEnterpriseManager的使用情况。
(3)学习关闭和启动数据库实例的方法。
(4)学会使用SQL语句创建数据库的方法。
(5)学会使用SQL语句删除数据库的方法。
实验准备
首先要了解Oracle数据库的逻辑结构,包括方案对象,数据块、区间、段、和表空间等。
数据库由若干个表空间组成,表空间由表组成,表由段组成,段由区间组成,区间则由数据块组成。
Oracle数据库的物理结构由构成数据库的操作系统文件所决定。
每个Oracle数据库都由3种类型的文件组成:
数据文件、日志文件和控制文件。
这些数据库文件为数据库信息提供真正的物理存储。
EnterpriseManager10g是Oracle10g提供的新的管理工具,简称EM。
使用它可以完成启动、关闭数据库,创建、删除数据库等功能。
只有系统管理员或拥有CREATEDATABASE权限的用户才能创建数据库。
可以在EnterpriseManager中通过图形界面创建数据库,也可以使用CREATEDATABASE语句创建数据库。
实验内容
oracle服务器端的安装
先解压10201_client_win32.zip压缩包,双击setup.exe。
如下图:
稍等之后进入欢迎界面,如下图:
点击下一步
选择“管理员”安装类型,点击下一步:
选择安装的详细目录后点击下一步。
点击安装:
选择执行典型配置:
点击下一步:
完成。
创建数据库使用OEM创建表
图1-1创建Employees表
图1-2成功创建Employees表
图1-3成功删除Employees表
图1-4创建Departments表
图1-5成功创建Departments表
图1-6成功删除Departments表
图1-7创建Salary表
图1-8成功创建Salary表
图1-9成功删除Salary表
在PL/SQL语句创建表
1.创建Employees表
createtableEmployee
(
EmployeeIDchar(6)NOTNULLPRIMARYKEY,
Namechar(10)NOTNULL,
BithdaydateNOTNULL,
Sexnumber
(1)NOTNULL,
Addresschar(20)NULL,
Zipchar(6)NULL,
PhoneNumberchar(12)NULL,
DepartmentIDchar(3)NOTNULLREFERENCESDepartments(DepartmentID)
)tablespaceusers;
图1-10使用SQL语句创建Employees表
2.创建Departments表
createtableDepartments
(
DepartmentIDchar(3)NOTNULLPRIMARYKEY,
Departmentnamechar(20)NOTNULL,
Notevarchar2(100)NULL
)tablespaceusers;
图1-11使用SQL语句创建Departments表
3.创建Salary表
createtableSalary
(
EmployeeIDchar(6)NOTNULLPRIMARYKEY,
InComenumber(8,2)NOTNULL,
OutComenumber(8,2)NOTNULL
)tablespaceusers;
图1-11使用SQL语句创建Salary表
实验二角色和用户管理
目的与要求
(1)了解Oracle数据库用户和角色的概念。
(2)学习使用SQL语句创建Oracle用户。
(3)学习使用SQL语句创建Oracle角色。
(4)学习使用SQL语句指定用户的角色。
实验准备
(1)了解Oracle数据库用户可以分为6种类型,即数据库管
(2)了解角色是对用户的一种分类管理办法,不同权限的用户可以分为不同的角色。
(3)了解使用CREATEROLE语句创建角色的方法。
(4)了解使用DROPROLE语句删除角色的方法。
(5)了解使用GRANT语句指定用户角色的方法。
(6)了解使用CREATEUSER语句创建用户的方法。
(7)了解使用DROPUSER语句删除用户的方法。
实验内容
1.创建用户
在YGGL数据库中创建一个用户manager授予dba角色和sysdba系统权限,他可以替代system系统用户。
Connectsystem/mrlassysdba/*以sysdba身份登录*/
Createusermanager
Profile"default"
Identifiedbymanager
Defaulttablespace"users"
Temporarytablespace"temp"
Accountunlock;
图2-1
图2-2
/*授予权限*/
Grantsysdbato"manager";
Grant"connect"to"manager";
Grant"dba"to"manager";
Alterusermanagergrantconnectthroughsystem;
图2-3
2.创建角色
在YGGL数据库中创建一个角色admin授予dba角色和sysdba系统权限
Createroleadmin
Identifiedby"manager";
Grantsysdbatoadmin;
图2-4
Grantsysopertoadmin;
Grant"connect"toadmin;
Grant"dba"to"admin";
图2-5
3.创建概要文件
在YGGL数据库中创建概要文件YGGL——PROFILE并分配给用户MANAGER。
Createprofileyggl_profilelimit
Composite_limitdefaultfailed_login_attempts3
Password_lock_time20password_grace_time60
Password_life_time30password_reuse_maxunlimited
Password_reuse_time120password_verify_functiondefault;
图2-6
实验三表和视图管理
目的与要求
(1)了解Oracle表和视图的概念。
(2)学习使用SQL语句创建表。
(3)学习使用SELECT语句查询数据。
(4)学习使用SQL语句创建视图。
实验准备
了解表是数据库中最常用的存储单元,它包括所有用户可以访问的数据。
作为关系型数据库,Oracle表由行和列组成。
视图是一个虚拟的表,它在物理上并不存在。
视图可以把表或其他视图的数据按照一定的条件组合起来所以也可以把它看成是一个存储的查询。
视图并不包含数据,它只是从基本表中读取数据。
了解使用CREATETABLE语句创建表的方法。
了解使用SELECT语句查询数据的方法。
了解使用SQL语句创建视图的方法。
实验内容
使用PL/SQL语句,在实验1建立的数据库的三个表Employees、Departments和Salary中分别插入多行数据记录,然后修改和删除一些记录。
使用PL/SQL进行有限制的修改和删除。
使用PL/SQL命令操作数据
(1)使用PL/SQL命令分别向Employees、Departments和Salary表中插入一行记录。
在启动SQL*PLUS窗口中输入以下PL/SQL语句并执行。
INSERTINTOEmployeesVALUES('011112','罗林',TO_DATE('19730626','YYYYMMDD'),1,'解放路100号',210002,4055663,5);
select*fromEmployees;
图3-1
INSERTINTODepartmentsVALUES('2','人力资源部',NULL);
select*fromDepartments;
INSERTINTOSalaryVALUES('011112',1200.09,50);
select*fromSalary;
图3-2
(2)使用PL/SQL命令命令修改表Salary中的某个记录的字段值。
UPDATESalarySETInCome=2890WHEREEmployeeID='011112';
查询修改结果:
select*fromSalary;
图3-3
(3)修改表employees和表departments的记录值,注意完整性。
UPDATEEmployeesSETAddress='中南林业科技大学涉外学院'WHEREEmployeeID='011112';
select*fromEmployees;
UPDATEDepartmentsSETDepartmentname='中情局'WHEREDepartmentID=2;
select*fromDepartments;
图3-5
(4)使用PL/SQL命令修改表Salary中的所有记录的字段值。
UPDATESalarySETInCome=InCome+100;
查询修改结果,与之前的内容对比。
图3-6
(5)使用DELETE语句删除Salary表中一行记录。
查询删除前后对比。
DELETEfromSalaryWhereEmployeeID=’011112’;
图3-7
(6)使用TRANCATETABLE语句删除表中所有行。
TRUNCATETABLESalary;
图3-8
7、SELECT语句的基本使用
(1)对于实验2给出的数据表结构,查询每个雇员的所有数据。
在SQL*PLUS窗口中输入如下的语句并执行:
SELECT*FROMEmployees;
图3-9
用select语句查询department表和salary表所有记录。
select*fromdepartments;
图3-10
select*fromsalary;
图3-11
(2)查询每个雇员的地址和电话。
SELECTAddress,PhoneNumberFromEmployees;
图3-12
用select语句查询department表和salary表一列或若干列。
selectdepartmentid,departmentnamefromdepartments;
图3-13
selectemployeeid,incomefromsalary;
图3-14
(3)查询EmployeeID为000001的雇员的地址和电话。
SELECTAddress,PhoneNumberFromEmployees
WHEREEmployeeID='011112';
selectdepartmentid,departmentnamefromdepartmentswheredepartmentid=1;
selectemployeeid,incomefromsalarywhereemployeeid=000001;
图3-15
(4)查询Employees表中所有女雇员的地址和电话,使用AS子句将结果中各列的标题分别指定为地址和电话。
SELECTAddressAS地址,PhoneNumberAS电话FROMEmployeesWHEREsex=0;
图3-16
(5)计算每个雇员的实际收入。
SELECTEmployeeID,InCome-OutComeAS实际收入FromSalary;
图3-17
(6)找出所有姓王的雇员的部门号。
SELECTDepartmentIDFROMEmployeesWHEREnameLIKE’王%’;
图3-18
找所有地址中含有中山的雇员的豪门及部门号。
SELECTemployeeid,DepartmentIDFROMEmployeesWHEREaddressLIKE'%中山%';
图3-19
(7)找出所有收入在2000元~3000元之间的雇员号码。
SelectEmployeeIDfromSalarywhereIncomebetween2000and3000;
图3-20
找出所有在部门1或部门2工作的雇员的号码。
SelectEmployeeIDfromSalarywheredepartmentid=1ordepartmentid=2;
图3-21
1.子查询的使用
(1)查询在财务部工作的雇员的情况
SELECT*FROMEmployees
WHEREDepartmentID=
(SELECTDepartmentID
fromDepartments
WHEREDepartmentName='财务部'
);
图3-22
用子查询的方法找出所有收入在2500元以下的雇员的情况。
select*fromemployees
whereemployeeidin
(
selectemployeeidfromsalary
whereincome<2500.00
);
图3-23
(2)查找财务部年龄不低于所有研发部雇员年龄的雇员的姓名。
selectNamefromEmployees
whereDepartmentIDIN
(selectdepartmentid
fromdepartments
wheredepartmentName='财务部'
)
ANDBirthday<=ALL
(selectBirthday
fromemployees
wheredepartmentidIN
(selectdepartmentid
fromdepartments
wheredepartmentname='研发部'
)
);
图3-24
用子查询方法查找研发部比所有财务部雇员收入高的雇员姓名。
selectnamefromemployees
whereemployeeid=
(
selectemployeeidfromsalary
where
employeeidin
(selectemployeeidfromEmployees
whereDepartmentIDIN
(selectdepartmentid
fromdepartments
wheredepartmentName='研发部'
)
)
andincome>all
(selectincomefromsalary
whereemployeeidin
(selectemployeeidfromemployees
wheredepartmentidIN
(selectdepartmentid
fromdepartments
wheredepartmentname='财务部'
)
)
)
);
图3-25
查找比所有财务部的雇员收入都高的雇员的姓名。
selectnamefromemployees
whereemployeeidin
(
selectemployeeid
fromsalary
whereincome>all
(
selectincome
fromsalary
whereemployeeidin
(
selectemployeeidfromemployees
wheredepartmentid=
(selectdepartmentid
fromdepartments
wheredepartmentname='财务部'
)
)
)
);
图3-26
用子查询的方法查找所有年龄比研发部雇员年龄都大的雇员的姓名。
selectNamefromEmployees
where
Birthday(selectBirthdayfromemployees
wheredepartmentidIN
(selectdepartmentid
fromdepartments
wheredepartmentname='研发部'
)
);
图3-27
2.连续查询的使用
(1)查询每个雇员的情况以及其薪水的情况。
selectemployees.*,salary.*
fromemployees,salary
whereemployees.employeeid=salary.employeeid;
图3-28
查询每个雇员的情况及工作情况。
selectemployees.*,departments.*
fromemployees,departments
whereemployees.departmentid=departments.departmentid;
图3-29
(2)查询财务部收入在2000元以上的雇员姓名及其薪水详情。
Selectname,income,outcomeFromemployees,salary,departments
Whereemployees.employeeid=salary.employeeid
andEmployees.departmentid=departments.departmentid
andDepartmentname='财务部'
andincome>2000;
图3-30
查询研发部在1966年以前出生的雇员姓名及薪水详情。
Selectname,income,outcomeFromemployees,salary,departments
Whereemployees.employeeid=salary.employeeid
andEmployees.departmentid=departments.departmentid
andDepartmentname='研发部'
andbirthday图3-31
3.数据汇总
(1)求财务部雇员的平均收入。
Selectavg(income)as财务部平均收入
Fromsalary
Whereemployeeidin
(selectemployeeid
Fromemployees
Wheredepartmentid=(
Selectdepartmentid
Fromdepartments
Wheredepartmentname='财务部')
);
图3-32
求财务部雇员的最高收入和最低收入。
Selectmax(income)as财务部最高收入,min(income)as财务部最低收入
Fromsalary
Whereemployeeidin
(selectemployeeid
Fromemployees
Wheredepartmentid=(
Selectdepartmentid
Fromdepartments
Wheredepartmentname='财务部')
);
图3-33
(2)求财务部雇员的平均实际收入。
Selectavg(income)as财务部平均收入
Fromsalary
Whereemployeeidin
(selectemployeeid
Fromemployees
Wheredepartmentid=(
Selectdepartmentid
Fromdepartments
Wheredepartmentname='财务部')
);
图3-34
求财务部雇员的最高和最低实际收入。
Selectmax(income-outcome)as财务部最高实际收入,min(income-outcome)as财务部最低实际收入
Fromsalary
Whereemployeeidin
(selectemployeeid
Fromemployees
Wheredepartmentid=(
Selectdepartmentid
Fromdepartments
Wheredepartmentname='财务部'
)
);
图3-35
(3)求财务部雇员的总人数。
Selectcount(employeeid)as财务部雇员总人数
Fromemployees
Wheredepartmentid=
(selectdepartmentid
Fromdepartments
Wheredepartmentname='财务部');
图3-36
统计财务部收入在2000以上雇员的数量。
Selectcount(employeeid)as财务部收入大于2000的人数
Fromsalary
Whereemployeeidin
(selectemployeeid
Fromemployees
Wheredepartmentid=(