视图内的或位于包含视图的查询中的 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。