在乙個關聯式資料庫中,可以表現分等級的資訊。
建立的表結構如下:
create table employee (
emp_id number (4) constraint emp_pk primary key,
fname varchar2 (15) not null,
lname varchar2 (15) not null,
dept_id number (2) not null,
manager_emp_id number (4) constraint emp_fk references employee(emp_id),
salary number (7,2) not null,
hire_date date not null,
job_id number (3)
);
如果manager_emp_id 欄位為空則表明這條記錄為根結點。
簡單的分級查詢:
找出根結點,執行如下語句:
select emp_id, lname, dept_id, manager_emp_id, salary, hire_date
from employee
where manager_emp_id is null;
找出結點的父結點,本例中就是顯示每個雇員的經理姓名,執行如下語句:
select e.lname "employee", m.lname "manager"
from employee e, employee m
where e.manager_emp_id = m.emp_id;
找出所有的頁節點,本例中就是找出所有的普通雇員,使用如下語句:
select emp_id, lname, dept_id, manager_emp_id, salary, hire_date
from employee e
where emp_id not in
(select manager_emp_id from employee
where manager_emp_id is not null);
能完成同樣功能的語句如下:
select emp_id, lname, dept_id, manager_emp_id, salary, hire_datefrom employee ewhere not exists(select emp_id from employee e1 where e.emp_id = e1.manager_emp_id);
複雜的查詢:oralce提供對於ansi sql的一些擴充套件。
start with........connect by 子句
proir 操作符
level偽列
語法如下:
start with connection1 connect by connection2
start with connection1 指定根元素。能滿足connection1認為是根元素。它可以包函子查詢。
connect by connection2指定父行與子行的關係,connection2必須包函prior操作符,用來確定父行裡的列,connection2不能包函子查詢。
查詢父結點與其子結點的結果,使用如下語句:
select lname, emp_id, manager_emp_id
from employee
start with manager_emp_id is null
connect by prior emp_id = manager_emp_id
level偽列--返回每行屬於哪一層,使用如下語句:select level, lname, emp_id, manager_emp_id
from employee
start with manager_emp_id is null
connect by manager_emp_id = prior emp_id;
如何檢查員工a是否可以管理員工b,由於a可能不是b的主管經理,所以我們不能直接通過manager_emp_id來判斷,可以使用如下語句:
select emp_id, lname, dept_id, manager_emp_id, salary, hire_date
from employee
where lname = 'smith'
start with lname = 'jones'
connect by manager_emp_id = prior emp_id
列出員工及他管理的員工的工資總數:
select t2.lname, t2.salary,
(select sum(t1.salary) from employee t1
start with t1.lname = t2.lname
connect by t1.manager_emp_id = prior t1.emp_id) sum_salary
from employee t2;
資料結構(承) 樹型結構(一)
樹的定義 具有n n 0 個節點的有限非空集合,且有且只有乙個特定的節點成為根。節點 節點表示樹中的元素,包括資料項及若干指向子樹的分支。節點的度 節點所擁有的子樹的個數稱為該節點的度 degree 樹的度 樹中各節點度的最大值成為樹的度。葉節點 度為0的節點稱為葉節點。分支節點 度不為0的節點成為...
幾種SQL語句的寫法
1.一張表中有使用者資訊表user user id,nickname 另外一張表聯絡人表contact user id,friend id 現在要找出聯絡人的資訊 1 selectu1.nicknameasmyselft,u2.nicknameasfriendfromcontact cinnerjo...
巧用SQL中的WITH(樹型結構資料的查詢)
如果表中存放的資料是樹形結構,當知道某乙個節點的值時,同時想取得它所有子節點的資料。表結構 表中存放的是部門組織結構,bmn cd部門,ssk kaiso lv是階層,bmn mkj部門名稱,joi kaiso lv上位階層,joi bmn cd上位部門。檢索sql with moduals bmn...