oracle 递归查询-个人总结

Jun 07, 2016 pm 03:18 PM
c leo oracle 個人的 要約する お問い合わせ 再帰 初め

首先,建表: create table T_TEST_WORD( id NUMBER, pid VARCHAR2(20), name VARCHAR2(20)) 插入数据: insert into T_TEST_WORD (id, pid, name)values (1, '-1', '中国');insert into T_TEST_WORD (id, pid, name)values (2, '1', '江苏');insert into T_

首先,建表:

create table T_TEST_WORD
(
  id   NUMBER,
  pid  VARCHAR2(20),
  name VARCHAR2(20)
)
ログイン後にコピー


插入数据:


insert into T_TEST_WORD (id, pid, name)
values (1, '-1', '中国');
insert into T_TEST_WORD (id, pid, name)
values (2, '1', '江苏');
insert into T_TEST_WORD (id, pid, name)
values (3, '1', '浙江');
insert into T_TEST_WORD (id, pid, name)
values (4, '2', '南京');
insert into T_TEST_WORD (id, pid, name)
values (5, '2', '无锡');
insert into T_TEST_WORD (id, pid, name)
values (6, '1', '安徽');
insert into T_TEST_WORD (id, pid, name)
values (7, '4', '雨花台区');
insert into T_TEST_WORD (id, pid, name)
values (8, '-1', '美国');
insert into T_TEST_WORD (id, pid, name)
values (9, '-1', '俄罗斯');
commit;
ログイン後にコピー

查询下表中的数据:

表1

oracle 递归查询-个人总结


其中PID为-1的代表根节点。


开始进行递归查询:

查询结果如下:

表2

oracle 递归查询-个人总结


说明:

select ... from tablename(表名)   where  条件1  start  with  条件2   connect  by  条件3  and  条件4 ...


看下这个语句(由根节点向子节点查询)


select  t.* , level  from T_TEST_WORD  t  start  with pid='-1'  connect  by  prior  id = pid(由根节点向子节点查询)


从T_TEST_WORD表中查询所有记录,从pid=-1的开始查询,且上一次查询记录的id作为本次查询的pid,以上表为例,举例如下:

第一次查询出pid=-1的记录是id为1的那条。

第二次查询时,查询pid=1的(上次查询记录的id是1)记录,可以查询到id为2的那条记录

第三次查询时,查询pid=2的(上次查询记录的id是2)记录,可以查询到id为4的那条记录,以此类推......

由上,查询到了表2的记录。


由树的根节点向子节点查询时,查询节点的顺序是按照树的前序遍历(DLR)进行的(1,2,4,7,5,3,6,8,9),如下图1

图1:

oracle 递归查询-个人总结

(比较丑的图,凑合看吧,嘻嘻)

注意:那个level要有start  with  ......  connect  by ......  才有效哦,不然会报错的。


再看这句(由子节点向根节点查询)

select t.* ,level from T_TEST_WORD t start with pid='2' connect by  id = prior pid
ログイン後にコピー

从pid=2的开始(向上)查询,且上一次查询记录的pid作为本次查询的id


oracle 递归查询-个人总结


prior挨着谁,就将谁作为本次查询的某某关键字,比如connect by  id = prior pid,就是将上次的pid作为本次查询的id。

注意,level是伪列,查询数据所对应的级,或者说深度吧。


小菜的总结,有问题请指出,谢谢咯!


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Oracleデータベースをインポートする方法 Oracleデータベースをインポートする方法 Apr 11, 2025 pm 08:06 PM

データインポート方法:1。SQLLOADERユーティリティを使用します。データファイルを準備し、制御ファイルを作成し、SQLLoaderを実行します。 2。IMP/EXPツールを使用します。データをエクスポートし、データをインポートします。ヒント:1。ビッグデータセットに推奨されるSQL*ローダー。 2。ターゲットテーブルが存在する必要があり、列定義が一致します。 3。インポート後、データの整合性を検証する必要があります。

Oracleの表空間サイズを確認する方法 Oracleの表空間サイズを確認する方法 Apr 11, 2025 pm 08:15 PM

Oracle Tablespaceサイズを照会するには、次の手順に従ってください。クエリを実行して、TableSpace名を決定します。DBA_TABLESPACesからTableSpace_Nameを選択します。クエリを実行してテーブルスペースのサイズをクエリします:sum(bytes)をtotal_size、sum(bytes_free)asavail_space、sum(bytes) - sum(bytes_free)as sum(bytes_free)as dba_data_files from tablespace_

テーブルフィールドをOracleに追加する方法 テーブルフィールドをOracleに追加する方法 Apr 11, 2025 pm 07:30 PM

ALTER TABLEステートメントを使用して、特定の構文は次のとおりです。ALTERTABLE TABLE_NAME add column_name data_type [constraint-clause]。 WHERE:table_nameはテーブル名、column_nameはフィールド名、data_typeはデータ型、制約条項はオプションの制約です。例:テーブルの従業員を変更すると、電子メールvarchar2(100)は、従業員テーブルに電子メールフィールドを追加します。

Oracleのインストールをアンインストールする方法は失敗しました Oracleのインストールをアンインストールする方法は失敗しました Apr 11, 2025 pm 08:24 PM

Oracleインストール障害のためのアンインストールメソッド:Oracleサービスを閉じ、Oracleプログラムファイルとレジストリキーを削除し、Oracle環境変数をアンインストールし、コンピューターを再起動します。アンインストールが失敗した場合、Oracle Universal Uninstallツールを使用して手動でアンインストールできます。

Oracleでテーブルを作成する方法 Oracleでテーブルを作成する方法 Apr 11, 2025 pm 08:00 PM

Oracleテーブルの作成には、次の手順が含まれます。作成テーブルの構文を使用して、テーブル名、列名、データ型、制約、およびデフォルト値を指定します。テーブル名は簡潔で説明的である必要があり、30文字を超えてはなりません。列名は説明的でなければならず、データ型は列に保存されているデータ型を指定します。 NOT NULL制約により、列でnull値が許可されていないことが保証され、デフォルト句は列のデフォルト値を指定します。テーブルの一意の記録を識別する主要なキーの制約。外部キーの制約は、表の列が別のテーブルの主キーを指していることを指定します。主要なキー、一意の制約、デフォルト値を含むサンプルテーブル学生の作成を参照してください。

Oracleビューを暗号化する方法 Oracleビューを暗号化する方法 Apr 11, 2025 pm 08:30 PM

Oracle View暗号化により、ビュー内のデータを暗号化でき、それにより機密情報のセキュリティが強化されます。手順には以下が含まれます。1)マスター暗号化キー(MEK)の作成。 2)暗号化されたビューを作成し、暗号化されるビューとMEKを指定します。 3)暗号化されたビューにアクセスすることをユーザーに許可します。暗号化されたビューがどのように機能するか:ユーザーが暗号化されたビューを求めてクエリをするとき、OracleはMEKを使用してデータを復号化し、認定ユーザーのみが読み取り可能なデータにアクセスできるようにします。

Oracleを再び追求する方法 Oracleを再び追求する方法 Apr 11, 2025 pm 07:33 PM

Oracleは複数の重複排除クエリメソッドを提供します。個別のキーワードは、各列の一意の値を返します。 Group by Clauseは、結果をグループ化し、各グループの非繰り返し値を返します。一意のキーワードは、一意の行のみを含むインデックスを作成するために使用され、インデックスをクエリすると自動的に重複排除が行われます。 row_number()関数は、一意の数値を割り当て、行1のみを含む結果をフィルタリングします。min()またはmax()関数は、数値列の非繰り返し値を返します。交差する演算子は、2つの結果セットの共通値を返します(複製なし)。

Oracleで文字化けのコードを解決する方法 Oracleで文字化けのコードを解決する方法 Apr 11, 2025 pm 10:09 PM

Oracle Garbledの問題は、データベース文字セットをチェックしてデータと一致するようにすることで解決できます。データベースに一致するようにクライアント文字を設定します。データを変換するか、列文字セットを変更してデータベース文字セットに一致させます。 Unicode文字セットを使用して、マルチバイト文字セットを避けます。データベースとクライアントの言語設定が正しいことを確認してください。

See all articles