快速高效的oracle多表查询技巧(oracle查询多张表)
在平时使用oracle数据库操作过程中,有时会碰到若干表之间进行多表查询的情形,既要满足查询数据的要求,又要有效的查询语句,在节约查询效率的同时,还要考虑对SQL管理上的问题,下面就介绍快速高效的oracle多表查询技巧。
首先,应遵守索引原则,在查询语句中使用索引,但并非所有表都适用索引原则,只有表中冗余度高的字段才推荐创建索引,以提高查询效现。如创建表:
“`SQL
CREATE TABLE student (
id number NOT NULL PRIMARY KEY,
name varchar2(16) NOT NULL,
sex char(1) NOT NULL,
grade number NOT NULL);
这张表可以建立一个名为grade的字段索引,例如,查询语句:
```SQLSELECT name,sex
FROM studentWHERE grade=3
应该创建grade的索引,如:
“`SQL
CREATE INDEX student_grade_index on student (grade);
其次,尽可能多使用表的结构特性,在多表查询中,可以根据表之间的关系来增强查询语句的效率。例如:
三张表分别是:
```SQL -- 学生表
CREATE TABLE student ( id number NOT NULL PRIMARY KEY,
name varchar2(16) NOT NULL, sex char(1) NOT NULL,
grade number NOT NULL );
-- 课程表 CREATE TABLE courses (
id number NOT NULL PRIMARY KEY, name varchar2(16) NOT NULL,
teacher varchar2(16) NOT NULL );
-- 选课表 CREATE TABLE classtable (
classid number NOT NULL, sid number NOT NULL,
cid number NOT NULL );
分别表示学生表、课程表、选课表,如果我要查询某学生选的全部科目,可以用下面的查询语句:
“`SQL
SELECT c.name
FROM courses c, classtable l, student s
WHERE c.id = l.cid AND s.id = l.sid
AND s.name = ‘Tom’
最后,可以使用如下限定几种技巧,包括子查询、联合查询等,减少查询语句的长度,提高查询效率。
比如,上面查询某学生选的全部科目的语句,可以改为:
```SQLSELECT c.name
FROM courses cWHERE c.id IN (
SELECT cid FROM classtable l
WHERE sid IN ( SELECT id
FROM student WHERE name = 'Tom'
))
以上就是快速高效的oracle多表查询技巧,运用以上方法得以有效的提高查询效率,提升工作效率。