sql Oacle 재 귀적 조회 깊이

☆데이터베이스 의 모든 표 이름,표 의 모든 열 이름 가 져 오기   select name from sysobjects where xtype='u'   select name from syscolumns where id=(select max(id)from sysobjects where xtype='u'and name='표 명')☆재 귀적 조회 데이터 Sql 문장의 재 귀적 조회 SqlServer 2005 와 Oracle 두 버 전 은 이전에 Oracle 을 사 용 했 는데 재 귀적 조회 가 매우 좋다 고 생각 하여 SqlServer 를 연구 했다.Sql 에서 재 귀적 조회 도 지원 합 니 다.예 를 들 어 SqlServer 2005 버 전의 Sql 은 다음 과 같 습 니 다.예 를 들 어 표,id 와 pId 필드,id 는 메 인 키 이 고 pid 는 상위 노드,표 구조 와 데 이 터 를 표시 합 니 다.CREATE TABLE[aa]( [id] [int] NULL, [pid] [int] NULL, [name] [nchar](10))GOINSERT INTO aaa VALUES(1,0,'a')INSERT INTO aaa VALUES(2,0,'b')INSERT INTO aaa VALUES(3,1,'c')INSERT INTO aaa VALUES(4,1,'d')INSERT INTO aaa VALUES(5,2,'e')INSERT INTO aaa VALUES(6,3,'f')INSERT INTO aaa VALUES(7,3,'g')INSERT INTO aaa VALUES(8,4,'h')GO-아래 Sql 은 1 노드 를 조회 하 는 모든 하위 노드 with my 1 as(select*from aaa where id=1 union all select aaa.*from my 1,aaa where my 1.id=aaa.pid)select*from my 1--결 과 는 1 이라는 기록 을 포함 하고 있 습 니 다.포함 하고 싶 지 않 으 면 마지막 으로 추가 할 수 있 습 니 다.where id<>1-아래 Sql 은 8 결점 을 조회 한 모든 부모 결점 with my 1 as(select*from aaa where id=8 union all select aaa.* from my1, aaa where my1.pid = aaa.id)select * from my1;--다음은 1 노드 와 모든 하위 노드 를 재 귀적 으로 삭제 하 는 문구 입 니 다:with my 1 as(select*from aaa where id=1   union all selectaaa.*from my 1,aaa where my 1.id=aaa.pid)delete from aaa where exists(select id from my 1 where my 1.id=aaa.id)Oracle 버 전의 Sql 은 다음 과 같다.Sql 은 다음 과 같 습 니 다.-아래 Sql 은 1 노드 의 모든 하위 노드 를 조회 하 는 것 입 니 다. SELECT * FROM aaa  START WITH id=1CONNECT BY pid=PRIOR id--아래 Sql 은 8 결점 을 조회 하 는 모든 부모 결점 입 니 다. SELECT * FROM aaa  START WITH id=8 CONNECT BY PRIOR pid=id 는 오늘 다른 사람 에 게 재 미 있 는 sql 을 만들어 주 었 고 재 귀적 으로 실현 되 었 다.구체 적 으로 다음 과 같다.만약 에 다음 과 같은 판매 표 가 있다 고 가정 하면 CREATE TABLE[tb](    [qj] [int] NULL,    -- 월 에 본 테스트 는 1 월 부터 시작 되 고 데이터 가 연속 되 는 달 이 라 고 가정 하 며 중간 에 차단 되 지 않 았 다.    [je] [int] NULL,    -- 이 달 판매 실제 금액    [rwe] [int] NULL,    -- 이 달 판매 임무 액    [fld] [float] NULL    -- 이번 달 금액 이 퀘 스 트 액 보다 많 을 때의 이윤 반환 점,이윤 반환 액 은 je*fld)ON[PRIMARY]은 현재 매달 의 이윤 반환 금액 을 계산 해 야 한다.규칙 은 다음 과 같다.1 월 판매 금액 이 퀘 스 트 액 보다 많다.  이윤 반환 액=금액*이윤 반환 점 2 월 판매 금액 이 퀘 스 트 액 보다 크다  이윤 반환 액=(금액-1 월 이윤 반환 액)*이윤 반환 점 3 월 판매 금액 이 퀘 스 트 액 보다 많 음  이윤 반환 액=(금액-1,2 월 이윤 반환 액)*이윤 반환 점 이후 월 순 으로 유추 하여 매출 액 이 퀘 스 트 액 보다 적 을 때 이윤 반환 이 0 구체 적 인 Sql 은 다음 과 같다.text from treeview where parentid=450 union all--재 귀 결과 가 집 중 된 하급 select t.id,t.parentid,t.text from treeview as t inner join cte as c on t.parentid=c.id)select id,parentid,text from cte-------------------------------------------------------------------------------------text from treeview where id=450 union all--재 귀 결과 가 집 중 된 부모 항목 select t.id,t.parentid,t.text from treeview as t inner join cte as c on t.id=c.parentid)select id,parentid,text from cte

좋은 웹페이지 즐겨찾기