樹型資料結構SQL語句的寫法

2021-08-29 11:42:54 字數 3020 閱讀 9266

在乙個關聯式資料庫中,可以表現分等級的資訊。

建立的表結構如下:

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...