当前位置:文档之家› 数据库查询视图

数据库查询视图

第二章数据的查询的视图
实验指导书
实验目标:
查询语句的编写和视图的创建。

第一部分练习指导(50分钟)
联系1:测试ROWID和ROWNUM伪列
问题:
用户表没有建立主键约束而插入了重复的记录,为了解决数据冗余问题,必须删除表中的重复记录,用户应用程序之、只关心查询结果集中的一部分,需要限制查询返回的行数。

分析:
Oracle 的RowID伪列可以唯一地标识表中的一行,可以利用ROWID删除表中重复的记录。

ROWNUM伪列返回查询结果集中行的序号,可以通过ROWNUM限制查询返回的行数。

解决方案:
(1)启动 SQL *Plus,并登录到数据库。

(3)测试ROWID伪列。

可以看到每个行的ROWID值都是不同的。

现在删除第三行。

在次执行查询语句,就可以看到第三条记录已经被删除。

由此可见,即使不定义主键,Oracle也可以唯一区分表中的行,因为ROWID可以当作表的主键。

(4)测试ROWNUM伪列。

上述命令返回两条记录。

可以看出,使用ROWNUM 伪列可以实现类似SQL SERVER 中的TOP N功能。

练习2:使用select语句创建表
问题:
假如scott用户下的表emp要做比较大的调整。

Select语句可以与其它表中的重要的记录做一个副本。

分析:
Select 语句可检索存储在数据库中的数据。

Select 语句还可以与其它的DDL 和DML语句一起使用来执行各种操作,如创建表、插入记录和指定列的别名等。

解决方案:
(1)创建表emp表的副本,但不包含表中的记录。

(2)使用select 语句选择记录并插入到另一个表中。

练习3: 使用子查询
问题
编写sql语句,查询出工资比blake高的员工的信息。

解决方案
(1)先查询出blake的工资。

(2)利用where条件筛选出比blake的工资高的员工的信息。

(3)在sql提示符下输入一下命令,查看结果。

select * from emp where sal > (select sal from emp where ename='BLAKE');
第二部分练习(50分钟)
1.使用上一次练习中创建的三个表,查询出所有数学考试成绩都在60分以上的学生的名字和所在班级。

分析:
(1)在成绩表中查询出数学成绩在60分以上的学生。

(2)利用where语句在学生信息表中筛选出这些学上的信息。

2.利用学生信息表创建一个视图,只显示学生的姓名和年龄。

3.创建一个视图,显示学生的姓名和平均成绩,并按照分数升序排列。

提示:使用 A VG 函数和 ORDER BY 子句.
4. 编写语句以显示vendor_master表中vencode,venname 和venadd列,如果veradd列问空,则该语句显示venadd1,否则显示veradd2.
提示:使用NVL2函数
第三部分作业
1.按照第二部分练习1的要求创建一个视图。

2.编写一个sql语句,查询出所有平均分数在70和80分之间的学生信息。

3.编写一个sql语句,查询出某一个班所有课程的平均分数。

编写语句以显示order_master表中的订单的orderno,同时要显示系统日期与该订单的del_date的月份数差值,将该值四舍五入显示月份数。

相关主题