实验四 SQL综合练习
- 格式:doc
- 大小:42.50 KB
- 文档页数:4
实验四 SQL综合练习
一 实验目的
全面掌握SQL 语句,包括创建表、视图和索引,定义完整性,插入、删除和修改数据,进行数据查询(函数)。
二、实验要求
用ORACLE SQL*PLUS完成实验内容。具体要求:
1、使用save语句保存所写的所有SQL命令,实验结束时,上传到FTP。
文件名为“学号+姓名.sql”;
2、使用spool语句,保存所有操作及结果,实验结束时,上传到FTP。
文件名为“学号+姓名.txt”;
三、实验环境
ORACLE 9i或10G
四、实验内容
(一)、假设已经创建S、C、SC表,并插入下列数据:
创建学生表S:
SQL> CREATE TABLE S
2 (S# CHAR(4) NOT NULL,
3 SNAME CHAR(8) NOT NULL,
4 AGE SMALLINT,
5 SEX CHAR(1),
6 PRIMARY KEY(S#));
创建课程表C:
SQL> CREATE TABLE C
2 (C# CHAR(4),
3 CNAME CHAR(10) NOT NULL,
4 TEACHER CHAR(8),
5 PRIMARY KEY(C#));
创建选课关系表SC:
SQL> CREATE TABLE SC
2 (S# CHAR(4),
3 C# CHAR(4),
4 GRADE SMALLINT,
5 PRIMARY KEY(S#,C#),
6 FOREIGN KEY(S#) REFERENCES S(S#),
7 FOREIGN KEY(C#) REFERENCES C(C#),
8 CHECK(GRADE BETWEEN 0 AND 100));
插入几条S记录:
SQL> INSERT INTO S(S#,SNAME,AGE,SEX) 2 VALUES('S1','LI',19,'M');
SQL> INSERT INTO S(S#,SNAME,AGE,SEX)
2 VALUES('S2','YANG',19,'F');
SQL> INSERT INTO S(S#,SNAME,AGE,SEX)
2 VALUES('S3','ZHANG',18,'F');
插入几条C记录:
SQL> INSERT INTO C(C#,CNAME,TEACHER)
2 VALUES('C1','MATHS','WANG');
SQL> INSERT INTO C(C#,CNAME,TEACHER)
2 VALUES('C2','ENGLISH','ZHAO');
SQL> INSERT INTO C(C#,CNAME,TEACHER)
2 VALUES('C3','COMPUTER','DING');
SQL> INSERT INTO C(C#,CNAME,TEACHER)
2 VALUES('C4','MATHS','YANG');
插入几条SC记录:
SQL> INSERT INTO SC(S#,C#,GRADE)
2 VALUES('S2','C3',90);
SQL> INSERT INTO SC(S#,C#,GRADE)
2 VALUES('S3','C2',91);
SQL> INSERT INTO SC(S#,C#,GRADE)
2 VALUES('S3','C4',80);
完成下列任务:
1、检索选修课程名为MATHS的学生学号和姓名;
2、检索选修课程号为C2或C4的学生学号(区分大小写);
3、检索LIU老师教的课程号和课程名;
4、检索不学C2的学生姓名与年龄;
5、为SC表按学号降序和课程号降序建唯一索引;
6、修改S表,增加SDEPT列(SDEPT表示学生所在的系);
7、创建关于学生学号和平均成绩的视图;
(二)已知公司的员工表EMP1(EID, ENAME, BDATE, SEX, CITY),
部门表DEPT1(DID, DNAME, DCITY),
工作表WORK(EID,DID,STARTDATE,SALARY)。各个字段说明如下:
create table EMP1
(EID VARCHAR2(6) PRIMARY KEY,
ENAME VARCHAR2(10),
BDATE DATE,
SEX VARCHAR2(2),
CITY VARCHAR2(20)
);
Create table DEPT1
(DID VARCHAR2(3) PRIMARY KEY,
DNAME VARCHAR2(20), DCITY VARCHAR2(20)
);
create table WORK
(EID VARCHAR2(6) PRIMARY KEY,
DID VARCHAR2(10),
STARTDATE DATE,
SALARY INT
);
向每个表中插入适当的数据。例如:插入三条部门的数据,分别为每个部门插入两条员工数据
insert into emp1
values ('A0001','jack', TO_DATE ('1979-08-01','YYYY-mm-dd'),'女','上海');
insert into emp1
values('A0002','l刘敏',to_date('1980-08-07','YYYY-mm-dd'),'男','江苏');
insert into dept1
values('B01','研发部','上海');
insert into dept1
values('B02','生产部','湖北');
insert into dept1
values('B03','销售部','上海');
insert into work
values('A0001','B01',to_date('2002-04-06','yyyy-mm-dd'),3000);
insert into work
values('A0002','B02',to_date('2003-5-1','yyyy-mm-dd'),2500);
注:EID——员工编号,最多6个字符。例如A00001(主键)
ENAME——员工姓名,最多10个字符。例如SMITH
BDATE——出生日期,日期型
SEX——员工性别,单个字符。F或者M
CITY——员工居住的城市,最多20个字符。例如:上海
DID——部门编号,最多3个字符。例如 A01 (主键)
DNAME——部门名称,最多20个字符。例如:研发部门
DCITY——部门所在的城市,最多20个字符。例如:上海
STARTDATE——员工到部门上班的日期,日期型
SALARY——员工的工资。整型。
请使用ORACLE的sql*plus 完成下列的操作
1、 列出员工编号以字母P至S开头的所有员工的基本信息。
2、 删除年龄超过60岁的员工。
3、 为工龄超过10年的职工增加10%的工资。
4、 查询拥有最多的员工的部门的基本信息(要求只取出一个部门的信息),如果有多个部门人数一样,那么取出部门编号最小的那个部门的基本信息。
5、 查询部门人数大于5的每个部门的编号,名称,人数。
6、 查询部门人数大于5的每个部门的最高工资,最低工资。