视图内的或位于包含视图的查询中的 ORDERED 伪指令影响连接顺序。
某个视图内的 ORDERED 伪指令仅影响该视图内的表的连接顺序。该视图内的表必须连续地连接。请考虑以下视图和查询:
CREATE VIEW emp_job_view as SELECT {+ORDERED} emp.job_num, job.job_name FROM emp, job WHERE emp.job_num = job.job_num; SELECT * from dept, emp_job_view, project WHERE dept.dept_no = project.dept_num AND emp_job_view.job_num = project.job_num;
ORDERED 伪指令指定 emp 表出现在 job 表之前。该伪指令不影响 dept 和 project 表的顺序。因而,所有可能的连接顺序如下所示:
如果 ORDERED 伪指令出现在包含视图的查询中,那么在该查询中表的连接顺序将与在 SELECT 语句中列出的表的连接顺序相同。视图中的表的连接顺序与其在视图中的排列顺序相同。
在以下的查询中,连接顺序是 dept、project、emp、job:
CREATE VIEW emp_job_view AS SELECT emp.job_num, job.job_name FROM emp, job WHERE emp.job_num = job.job_num; SELECT {+ORDERED} * FROM dept, project, emp_job_view WHERE dept.dept_no = project.dept_num AND emp_job_view.job_num = project.job_num;
当视图无法并入查询时,是该规则的一个例外,如以下示例所示:
CREATE VIEW emp_job_view2 AS SELECT单值 emp.job_num, job.job_name FROM emp,job WHERE emp.job_num = job.job_num;
在此示例中,数据库服务器执行查询并将结果放入临时表中。该查询中的表的顺序是 dept、project、temp_table。