13章階層クエリ
本章では、データ内で生じる可能性のある階層関係を表すためのレシピを紹介します。階層的なデータを扱う際には、データの保存よりも階層としてのデータの取得や表示の方が難しいのが普通です。
MySQLに再帰CTEが追加されてからまだ数年しか経っていませんが、MySQLで利用できるようになったことで、実質的にすべてのRDBMSで再帰CTEが利用できるようになりました。結果として再帰CTEは階層クエリを扱う標準的な手法となりました。本章ではこの機能を自在に利用してデータの階層構造を解明するためのレシピを紹介します。
本題に入る前に、EMP
テーブルのEMPNO
とMGR
間の階層関係を調べましょう。
select empno,mgr
from emp
order by 2
EMPNO MGR ---------- ---------- 7788 7566 7902 7566 7499 7698 7521 7698 7900 7698 7844 7698 7654 7698 7934 7782 7876 7788 7566 7839 7782 7839 7698 7839 7369 7902 7839
これをよく見ると、MGR
の値もEMPNO
であることわかります。つまり、EMP
テーブルの従業員の管理職もEMP
テーブルの従業員であり、別のどこかに格納されているわけではありません。MGR
とEMPNO
間の関係は、MGR
の値があるEMPNO
の直近の親であるという点で親子関係です(また、ある特定の従業員の管理職も管理職を持ち、その管理職がまた管理職を持つといったようにn層の階層を形成する可能性もあります)。従業員が管理職を持たない場合には、MGR
はNULL
になります。
レシピ13.1 親子関係を表す ...
Get SQLクックブック 第2版 ―データベースエキスパート、データサイエンティストのための実践レシピ集 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.