数据库原理与应用实验报告
实验1实验报告
1. 实验目的及要求
熟悉SQL的数据定义语言,能够熟练地使用SQL语句来创建和更改基本表,创建和取消索引。对数据库进行单表查询、连接查询、嵌套查询、集合查询和统计查询。
2. 实验内容
?
?
?
?
? 在SSMS环境中使用SQL语言创建数据库 使用CREATE语句创建基本表。 更改基本表的定义: 增加列,删除列,修改列的数据类型。 创建表的升、降序索引。 删除基本表的约束、基本表的索引或基本表。
3. 实验步骤
1) 用SQL语言创建数据库
2) 用CREATE语句创建基本表
3) 向表中添加元组
4) 修改基本表
5) 删除基本表
6) 建立引索
7) 删除引索
4. 实验结果
1) 用SQL语言创建数据库
在SSMS环境中使用SQL语言创建数据库student_Mis:
CREATE DATABASE student_Mis
ON
(
1
NAME=student_Data
FILENAME='c:\program files\microsoft sql
server\student-Mis-data.mdf',
SIZE=10,
MAXSIZE=50,
FILEGROWTH=5
)
LOG ON
(
NAME='student_Log',
FILENAME='c:\program files\microsoft sql server\student-Mis- log.ldf',
SIZE=5MB,
MAXSIZE=25MB,
FILEGROWTH=5MB
)
2)用CREATE语句创建基本表
用SQL语言创建系别编号对照表Depts,其中Dno为系别编号,Dname为系别名称。 创建Depts
create table Depts
(
Dno char(5) primary key,
Dname char(20) not null,
)
3)向表中添加元组
将一个系别元组(D01,自动化)插入到基本表Depts中
INSERT
INTO Depts
VALUES(‘D01’,‘自动化’)
4)修改基本表
创建基本表Students
create table Students
(
Sno char(5) primary key,
Sname char(20) not null,
Ssex char(2),
Sage int,
Dno char(5),
CONSTRAINT un_Dno Sname UNIQE (Sname)
)
将Sname(年龄)的数据类型改为SMALLINT型。
2
ALTER TABLE Students ALTER COLUMN Sage SMALLINT 删除Sname(姓名)必须去唯一值的约束
ALTER TABLE Students DROP CONSTRAINTun_Sname
5)删除基本表
删除Student表
DROP TABLE Student
primarykey(Sno,Pno,Jno),
constraint S_SPJ foreignkey(Sno)references jiangxue_S, constraint P_SPJ foreignkey(Pno)references jiangxue_P, constraint J_SPJ foreignkey(Jno)references jiangxue_J )
6)建立引索
为学生选课数据库中的Students按Dno(系别号)升序建唯一引索 CREATE UNIQUE INDEX Stu_Dno ON Students(Dno)
7)删除引索
删除基本表Reports上的Rep_SCno引索
DROP INDEXReports.Rep_SCno
5、实验结果
(1)运行结果大概相符于预期。
(2)实验取得了前所未有的成功。
6、评价分析及心得体会
(1).熟悉环境很重要。
(2).熟练的编写代码很难。
(3).要特别注意细节,注意各个项的属性类别。
3
第二篇:实验一 SQL基础实验报告
湖南第一师范学院信息科学与工程系实验报告
课程名称:ORACLE数据库系统及应用 成绩评定: 实验项目名称: 实验一:SQL语言基础 指导教师: 洪伟
学生姓名: 彭艳 学号:09403090220 专业班级: 09计科2班
实验项目类型: 设计 实验地点:科A301 实验时间: 2011 年 10 月 8 日
一、实验目的与要求:
1、掌握SQL的各种DDL语言;
2、掌握SQL的各种DML语言;
3、掌握SQL的各种复杂查询。
二、实验环境:(硬件环境、软件环境)
1.硬件环境:奔Ⅳ PC。
2.软件环境:Windows2000 操作系统,Oracle 9i。
三、实验内容:(原理、操作步骤、程序代码等)
任务:
1、 建立一个表(表名自定),表结构与EMP表相同,没有任何记录。
2、 用INSERT语句向该新建立的表中插入5条记录,并提交。
3、 扩大该表的记录数到30条,并使雇员号不重复;每个雇员都有所属部门,雇员在同一部门
的经理是同一人。
4、 建立一个与DEPT表结构和记录完全相同的单相表,并与1建立的新表建立参照完整性约束。
5、 对在‘NEW YORK’工作的雇员加工资,每人加500。
6、 如果雇员姓名与部门名称中有一个或一个以上相同的字母,则该雇员的COMM增加400。
7、 删除部门号为40的记录,并删除该部门的所有成员。
8、 在雇员表中新增列性别SEX,字符型。
9、 试着删除新表中的某一列。
10、 建立一个视图myview,视图包括新表中的empno,ename,sal,danme。
11、 在新雇员表中建立ename的唯一索引。
12、 从新雇员表中查找姓名以J开头的所有雇员的姓名。
13、 查询工作是CLERK的所有人的姓名、工资与部门名、部门地址。
14、 查询新雇员表中所有的工资大于2000块的雇员姓名与他的经理名。
15、 查询新雇员表中工资高于JONES的所有雇员姓名、工作和工资。
16、 列出没有对应部门表信息的所有雇员的姓名、工作以及部门号。
17、 查询工资在2000~3000之间的雇员所在部门的所有人员信息。
18、 查询工资最高的员工。
19、 查询所有81年7月1日以前来的员工姓名、工资与所属部门的名字。
20、 查询在CHICAGO工作的经理MANAGER和销售员SALESMAN的姓名与工资。
21、 查询就职时间超过30年的员工名单。
22、 查询公司中按年份月份统计各地的录用职工数量。
1
23、 查询工资排第一至三位的员工信息。
24、 查询所有年薪在50000以上的所有员工信息。
25、 查询与JONES的部门与岗位相同的所有雇员。
具体操作步骤及程序代码为: 1.create table emp1(empno number(4),ename varchar2(10),job varchar2(10),mgr number(4), hiredate date,sal number(7,2),comm number(7,2),deptno number(2)); 2.insert into emp1(empno,ename,job,mgr,hiredate,sal,comm,deptno)
values('1','A','manager','','22-12月-03','7000','','40');
3.insert into emp1(empno,ename,job,mgr,hiredate,sal,comm,deptno)
select * from emp;
4. alter table my_dept add( constraint s1 primary key(deptno)); alter table my_emp add(constraint s2 foreign key(deptno) references dept(deptno));
5. update emp set sal=sal+500
where deptno in(
select deptno from dept where loc='NEW YORK');
6. update emp set comm=nvl(comm,0)+400
where ename <>(
select translate(emp.ename,dname,'*') from dept);
7. delete from emp where deptno='40';
8. alter table emp add sex char(4);
9. delete from emp1 where empno='1';
10. create view myview as select empno,ename,sal,deptno from emp1;
11. create index ename on emp(ename);
12. select ename from emp where ename like 'J%';
13. select ename,sal,emp.deptno,loc from emp,dept
where emp.deptno = dept.deptno and emp.job='CLERK' ;
14. select e1.ename,e2.ename manager from emp e1,emp e2
where e1.sal+nvl(e1.comm,0)>2000 and e1.mgr=e2.empno;
2
15. select ename,job,sal from emp
where sal+nvl(comm,0)>(select sal+nvl(comm,0) from emp
where ename='JONES');
16.select ename,job,deptno from emp
where deptno not in(select deptno
from dept);
17.select * from emp where deptno in(
select deptno from emp where sal+nvl(comm,0)>2000and sal+nvl(comm,0)<3000);
18.select ename,job from emp where sal+nvl(comm,0)=(
select max(sal+nvl(comm,0)) from emp);
19. select ename,sal,dname from emp,dept
Where emp.deptno=dept.deptno and
hiredate<=to_date('1981-07-01','yyyy-mm-dd');
20.select ename,job,sal from emp where job in('MANAGER','SALESMAN') and deptno in(select deptno from dept
where loc='CHICAGO');
21.select ename from emp where add_months(hiredate,360)<sysdate;
22. select to_char(hiredate,'yyyy-mm'),loc,count(*) from emp,dept
where emp.deptno=dept.deptno group by to_char(hiredate,'yyyy-mm'),loc;
23. select * from ( select row_number() over(order by sal desc) rk, emp.* from scott.emp) where rk <= 3;
24.select * from emp where (sal*12+nvl(comm,0))>50000;
25.select * from emp e1 where deptno=(select deptno
from emp e2 where e2.ename='JONES') and job=(select job
from emp e3 where e3.ename='JONES') and ename<>'JONES';
四、实验体会(实验中碰到的问题及解决方法等)
这次实验基础还是用的上个学期的,不过有些函数还是用的这个学期学的,这个学期又新学了很多知识,对以后数据库方面又有了一定的帮助。
3