當前位置:首頁 » 編程語言 » sql怎麼查tree
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql怎麼查tree

發布時間: 2022-12-29 13:53:03

Ⅰ 如何看懂pl/sql中的tree

如何看懂pl/sql中的tree
oracle多用戶操作有時候會造成session阻塞,形成了鎖表等問題。可以使用sql語句進行查詢,但用工具更為方便。本文就介紹使用PL/SQL developer工具查看或殺掉oracle的session。

Ⅱ 13.2. Query Tree(查詢樹)是什麼

它是一個 SQL 語句的內部表現形式,這時組成該語句的每個部分都是分別存儲的. 當你用調試級別(debuglevel)4 運行 PostgreSQL 後端並且在 SQL 界面交互地輸入查詢命令時可以看到這些查詢樹. 在 pg_rewrite 系統表裡的規則動作也是以查詢樹的方式存儲的. 不過不是用象調試輸出那樣的格式,但包含的內容是完全一樣的. 讀查詢樹的內容需要一定的經驗, 我開始在規則系統上幹活時曾經歷了一段很困難的時光. 我還記得當初我站在一台咖啡機面前把杯子當做目標列, 水和咖啡粉當作可排列的元素,所有按鈕是資格表達式來想像查詢樹的情景. 因為理解查詢樹的 SQL 表現就足以理解規則系統, 所以這份文檔將不會告訴你如何讀取它們. 這篇文檔可能幫助你學習規則系統和它的命名習慣以便於後面的描述.13.2.1. Query Tree(查詢樹)的成員 當我們讀取這份文檔中查詢樹的SQL 表現時, 我們必須能夠識別該語句被分解後放在查詢樹里的成員. 查詢樹的成員有 命令類型 ( command type ) 這是一個簡單的值, 說明哪條命令 (SELECT,INSERT,UPDATE,DELETE)生成這個分析樹. 范圍表 (range table) 范圍表是一個查詢中使用的關系的列表. 在 SELECT 語句里是在 FORM 關鍵字後面給出的關系. 每個范圍表表示一個表或一個視圖,表明是查詢里哪個成員調用了它. 在查詢樹里,范圍表是用索引而不是用名字引用的, 所以這里不用象在 SQL語句里一樣關心是否有重名問題. 這種情況在引入了規則的范圍表後可能會發生. 本文檔的例子將不討論這種情況. 結果關系(result relation) 這是一個范圍表的索引,用於標識查詢結果前往的表. SELECT 查詢通常沒有結果關系表.特例 SELECT INTO 幾乎等於一個 CREATE TABLE, INSERT ... SELECT 序列,所以這里我們就不單獨討論了. 在INSERT,UPDATE 和 DELETE 查詢里, 結果關系(result relation )是更改發生影響的表(或視圖!任何剩下的欄位(既無給出值,也無預設的) 將由規劃器自動賦予一個常量 NULL 表達式. 在UPDATE 查詢里,它(目標列)描述應該替換舊行的新行. 在規則系統里,它只包含來自查詢的 SET attribute = expression 部分抽取的表達式. 這時,規劃器將通過插入從舊行抽取數據到新 行的表達式的方法處理缺失的欄位. 並且它也會象 在 DELETE 里那樣增加特殊的CTID記錄. 目標列里的每個元素都包含著一個表達式, 它可以為常量,可以為一個指向某個范圍表裡面的關系的一個欄位的變數 ,可以為一個由函數調用,常量,變數,操作符等構成的表達式樹. 條件(qualification) 查詢條件是一個表達式,它非常類似那些包含在目標列里的條目. 這個表達式的值是一個布爾值,通過此值來判斷對最終結果行是否要執操作 (INSERT,UPDATE,DELETE 或 SELECT).它是一個 SQL 語句 的 WHERE 子句. 連接樹 查詢的連接樹顯示了 FROM 子句的結構. 對於象 SELECT FROM a, b, c 這樣的簡單查詢, 連接樹只是一個 FROM 項的簡單列表, 因為我們允許以任意順序連接它們. 但如果使用了 JOIN 表達式 --- 尤其是 outer join 的時候, 我們就必須按照該連接顯示的順序進行連接. 連接樹顯示 JOIN 表達式的結構. 與特定的 JOIN 子句(來自 ON 或者 USING 表達式)相關的限制 做為附加在那些連接樹節點的條件表達式存儲. 事實證明把頂層 WHERE 表達式也當做附加在頂層連接樹項的條件 來存儲是非常方便的.所以實際上連接樹代表 SELECT 語句的 FROM 和 WHERE 子句. 其他(others) 查詢樹的其他部分,像 ORDER BY 子句,我們不準備在這里討論. 規則系統在附加規則時將在那裡(ORDER BY 子句)替換條目, 但是這對於規則系統的基本原理並沒有多大關系.

Ⅲ sql怎麼實現樹查詢

CREATE TABLE T (CID VARCHAR(5),PID VARCHAR(5),CNAME VARCHAR(20))
GO
INSERT INTO T VALUES ('1','0','董事長')
INSERT INTO T VALUES ('2','1','CEO')
INSERT INTO T VALUES ('3','2','銷售經理')
INSERT INTO T VALUES ('4','2','IT經理')
INSERT INTO T VALUES ('5','2','運營經理')
INSERT INTO T VALUES ('6','3','銷售主管')
INSERT INTO T VALUES ('7','4','IT主管')
INSERT INTO T VALUES ('8','5','運營主管 ')
INSERT INTO T VALUES ('9','6','業務員')
INSERT INTO T VALUES ('10','7','程序員')
INSERT INTO T VALUES ('11','8','運營員')
GO

CREATE FUNCTION F(@CID INT)
RETURNS VARCHAR(50)
AS
BEGIN
DECLARE @R VARCHAR(50)
SELECT @R=PID+'.'+CID FROM T WHERE CID=@CID
WHILE EXISTS(SELECT 1 FROM T WHERE CID=(SELECT PID FROM T WHERE CID=@CID))
BEGIN
SELECT @CID=PID FROM T WHERE CID=@CID
SELECT @R=PID+'.'+@R FROM T WHERE CID=@CID
END
RETURN @R
END
GO

SELECT * FROM T WHERE DBO.F(CID) LIKE '%.2.%'
GO
DROP TABLE T
DROP FUNCTION F

提供個大概的思路,具體你還可以優化,把 LIKE裡面的2換成其他CID既可查詢對應的下屬信息

Ⅳ SQL語句查詢出一個父節點下的所有子節點

假如你的表名字是tt,創建下面的存儲過程,使用存儲過程即可查詢。

create proc querytree
@user varchar(100)
as
begin
declare @id int
declare @T_tmp table(id int,username varchar(100),parentid int)
insert into @T_tmp select * from tt where username=@user
while(@@rowcount>0)
begin
insert into @T_tmp select * from tt where parentid in (select id from @T_tmp) and id not in(select id from @T_tmp)
end
select * from @T_tmp where username<>@user
end

Ⅳ SQL 2000 判斷表TREE是否存在,如何存在則刪除

IF EXISTS (SELECT 1
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='BASE TABLE'
AND TABLE_NAME='TREE_ZSX')
Drop table TREE_ZSX;

Ⅵ sql 查詢 tree

很高興回答你的問題
根據你的需求,寫的SQL如下:
select id,LPAD(name,LENGTH(name)+(LEVEL*10),' ')
from table_name
where 1=1 start with fid is null connect by PRIOR id=fid;
根據你的問題補充:
select id from table_name where id not in(
select id
from table_name
where 1=1 start with id=1 connect by PRIOR id=fid);上邊這個sql就查詢出來當id=1的時候,能作為它上級的id,
希望對你有所幫助!

Ⅶ sql怎麼實現樹查詢

表格式如下:

cid pid cname
1 0 董事長
2 1 CEO
3 2 銷售經理
4 2 IT經理
5 2 運營經理
6 3 銷售主管
7 4 IT主管
8 5 運營主管
9 6 業務員
10 7 程序員
11 8 運營員

create function get_detail(
@id int
)returns @re table(id int,level int)
as
begin
declare @l int
set @l=0
insert @re select @id,@l
while @@rowcount>0
begin
set @l=@l+1
insert @re select a.cid,@l
from table_2 a,@re b
where a.pid=b.id and b.level=@l-1
end
return
end
go

--調用(查詢所有的子)
select a.*,level=b.level from table_2 a,get_detail(2)b where a.cid=b.id

Ⅷ 有關sql查詢tree的

根據你的需求,寫的SQL如下:
select id,LPAD(name,LENGTH(name)+(LEVEL*10),' ')
from table_name
where 1=1 start with fid is null connect by PRIOR id=fid;
根據你的問題補充:
select id from table_name where id not in(
select id
from table_name
where 1=1 start with id=1 connect by PRIOR id=fid);上邊這個sql就查詢出來當id=1的時候,能作為它上級的id,
希望對你有所幫助!

Ⅸ sql樹形查詢分級

必須設置好表的parentID,ID第一級設置為0
witht1as(
selecttreelevel=1,parentID,ID,cast(1asvarchar(20))ROWNUMfrom表whereID=0
unionall
selecttreelevel=treelevel+1,t2.parentID,t2.ID,cast(t1.ROWNUM+'.'+cast(row_number()over(orderbyt2.itemid)asvarchar(10))asvarchar(20))ROWNUMfrom表t2joint1ont2.parentID=t1.id

)

select*fromt1orderbyROWNUM

Ⅹ mysql 如何查詢一個帶有樹結構的表的數據

當然這種結構就不要追求什麼效率了。如果要效率高的,只能改表結構。

1:select p2.id from table p1 ,table p2 where p1.id=p2.pid and p1.id=0
2:假設表名是tree
SQL codeselect distinct a.id from tree as a inner join tree as b on (a.pid = b.pid) where b.pid >=0;
select distinct a.id from tree as a inner join tree as b on (a.pid = b.pid) where b.pid >=2;

3.通過程序或資料庫的store procere來實現了。 在mySQL中無法以一句SQL實現。