Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
CONNECT BY klausa
Klausa CONNECT BY menentukan hubungan antara baris dalam hierarki. Anda dapat menggunakan CONNECT BY untuk memilih baris dalam urutan hierarkis dengan menggabungkan tabel ke dirinya sendiri dan memproses data hierarkis. Misalnya, Anda dapat menggunakannya untuk melakukan loop secara rekursif melalui bagan organisasi dan daftar data.
Proses kueri hierarkis dalam urutan sebagai berikut:
Jika klausa FROM memiliki gabungan, itu diproses terlebih dahulu.
Klausa CONNECT BY dievaluasi.
Klausul WHERE dievaluasi.
Sintaks
[START WITH start_with_conditions] CONNECT BY connect_by_conditions
catatan
Meskipun START dan CONNECT bukan kata yang dicadangkan, gunakan pengidentifikasi yang dibatasi (tanda kutip ganda) atau AS jika Anda menggunakan START dan CONNECT sebagai alias tabel dalam kueri Anda untuk menghindari kegagalan saat runtime.
SELECT COUNT(*) FROM Employee "start" CONNECT BY PRIOR id = manager_id START WITH name = 'John'
SELECT COUNT(*) FROM Employee AS start CONNECT BY PRIOR id = manager_id START WITH name = 'John'
Parameter
- start_with_conditions
-
Kondisi yang menentukan baris root dari hierarki
- connect_by_conditions
-
Kondisi yang menentukan hubungan antara baris induk dan baris anak dari hierarki. Setidaknya satu kondisi harus memenuhi syarat dengan operator
PRIOR column = expression -- or expression > PRIOR column
Operator
Anda dapat menggunakan operator berikut dalam kueri CONNECT BY.
- TINGKAT
-
Pseudocolumn yang mengembalikan tingkat baris saat ini dalam hierarki. Mengembalikan 1 untuk baris root, 2 untuk anak dari baris root, dan seterusnya.
- SEBELUMNYA
-
Operator unary yang mengevaluasi ekspresi untuk baris induk dari baris saat ini dalam hierarki.
Contoh
Contoh berikut adalah kueri CONNECT BY yang mengembalikan jumlah karyawan yang melaporkan secara langsung atau tidak langsung ke John, tidak lebih dari 4 level.
SELECT id, name, manager_id FROM employee WHERE LEVEL < 4 START WITH name = 'John' CONNECT BY PRIOR id = manager_id;
Berikut ini adalah hasil dari query.
id name manager_id ------+----------+-------------- 101 John 100 102 Jorge 101 103 Kwaku 101 110 Liu 101 201 Sofía 102 106 Mateo 102 110 Nikki 103 104 Paulo 103 105 Richard 103 120 Saanvi 104 200 Shirley 104 205 Zhang 104
Definisi tabel untuk contoh ini:
CREATE TABLE employee ( id INT, name VARCHAR(20), manager_id INT );
Berikut ini adalah baris yang dimasukkan ke dalam tabel.
INSERT INTO employee(id, name, manager_id) VALUES (100, 'Carlos', null), (101, 'John', 100), (102, 'Jorge', 101), (103, 'Kwaku', 101), (110, 'Liu', 101), (106, 'Mateo', 102), (110, 'Nikki', 103), (104, 'Paulo', 103), (105, 'Richard', 103), (120, 'Saanvi', 104), (200, 'Shirley', 104), (201, 'Sofía', 102), (205, 'Zhang', 104);
Berikut ini adalah bagan organisasi untuk departemen John.