Pekerja dan Pengurus
Contoh hierarki klasik.
Pekerja dan Pengurus ialah pelajaran SQL Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran SQL Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.
Apakah Gabungan Kendiri?
Gabungan kendiri ialah apabila sesebuah jadual digabungkan dengan jadual itu sendiri. Perkara ini mungkin kedengaran luar biasa, tetapi amat berguna apabila baris dalam sesebuah jadual mempunyai hubungan dengan baris lain dalam jadual yang sama.
Contoh klasiknya ialah jadual pekerja, yang setiap pekerjanya mungkin mempunyai seorang pengurus — dan pengurus itu juga merupakan pekerja yang disimpan dalam jadual yang sama.
Jadual Pekerja
Marilah kita mencipta jadual employees yang ringkas. Setiap pekerja mempunyai id, name dan manager_id yang menunjuk kembali kepada baris lain dalam jadual yang sama.
Apabila manager_id ialah NULL, pekerja tersebut tidak mempunyai pengurus — mereka berada di puncak hierarki (contohnya, CEO).
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
manager_id INT REFERENCES employees(id)
);Memasukkan Data Contoh
Marilah kita mengisi jadual dengan hierarki syarikat yang kecil. Alice ialah CEO (tiada pengurus). Bob dan Carol kedua-duanya melapor kepada Alice. Dave dan Eve melapor kepada Bob.
INSERT INTO employees (id, name, manager_id) VALUES
(1, 'Alice', NULL),
(2, 'Bob', 1),
(3, 'Carol', 1),
(4, 'Dave', 2),
(5, 'Eve', 2),
(6, 'Frank', 3);Membuat Pertanyaan Tanpa Gabungan
Jika kita hanya memilih semua baris, kita akan melihat nombor manager_id mentah — bukannya nama pengurus. Perkara ini sukar dibaca dan tidak berguna kepada pengguna akhir.
SELECT id, name, manager_id
FROM employees;Menulis Gabungan Kendiri
Untuk memaparkan nama pengurus di sebelah setiap pekerja, kita menggabungkan jadual employees dengan jadual itu sendiri. Kita memberikan nama ganti yang berbeza kepada setiap salinan: e untuk pekerja dan m untuk pengurus.
Syarat gabungan menghubungkan manager_id pekerja dengan id pengurus.
SELECT
e.name AS employee,
m.name AS manager
FROM employees e
JOIN employees m ON e.manager_id = m.id;Menyertakan Pekerja Tanpa Pengurus
INNER JOIN di atas menyembunyikan Alice kerana manager_id beliau ialah NULL — tiada baris yang sepadan pada sebelah kanan. Untuk menyertakan semua orang (termasuk pekerja peringkat teratas), gunakan LEFT JOIN.
Alice akan muncul dengan NULL dalam lajur pengurus.
SELECT
e.name AS employee,
m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;Menggunakan COALESCE untuk Memudahkan Pembacaan
NULL dalam lajur pengurus boleh mengelirukan. Kita boleh menggunakan COALESCE untuk menggantikan NULL dengan label yang mudah difahami seperti 'Tiada Pengurus', sekali gus menjadikan hasil lebih kemas untuk laporan.
SELECT
e.name AS employee,
COALESCE(m.name, 'No Manager') AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id
ORDER BY manager, employee;Mencari Bawahan Langsung
Kita boleh mengubah pertanyaan untuk bertanya: siapakah yang melapor kepada pengurus tertentu? Ini dipanggil mencari bawahan langsung. Di sini kita mencari semua pekerja yang melapor terus kepada Alice (id = 1).
SELECT e.name AS direct_report
FROM employees e
WHERE e.manager_id = 1;Mengira Laporan bagi Setiap Pengurus
Menggabungkan gabungan kendiri dengan GROUP BY dan COUNT membolehkan kita melihat bilangan bawahan langsung bagi setiap pengurus. Ini berguna untuk menganalisis beban kerja.
SELECT
m.name AS manager,
COUNT(e.id) AS direct_reports
FROM employees e
JOIN employees m ON e.manager_id = m.id
GROUP BY m.name
ORDER BY direct_reports DESC;Dua Peringkat Mendalam
Untuk melihat dua peringkat hierarki serentak — pekerja, pengurusnya dan pengurus kepada pengurusnya — kita boleh menggabungkan jadual itu untuk kali ketiga. Setiap gabungan menambah satu lagi peringkat hierarki.
SELECT
e.name AS employee,
m.name AS manager,
gm.name AS grand_manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id
LEFT JOIN employees gm ON m.manager_id = gm.id;Apabila Gabungan Kendiri Mempunyai Had
Gabungan kendiri berfungsi dengan baik untuk hierarki tetap dan cetek (1–3 peringkat). Jika kedalamannya tidak diketahui atau tidak terhad — seperti carta organisasi syarikat yang boleh mencapai 10 peringkat — anda memerlukan CTE rekursif sebagai ganti.
Bagi kebanyakan pertanyaan praktikal tentang pekerja dan pengurus, pendekatan gabungan kendiri yang dibincangkan dalam pelajaran ini ialah alat yang tepat.
Semakan Pantas
Uji pemahaman anda tentang gabungan kendiri dan hierarki pekerja-pengurus.
Imbas Kembali Pelajaran
Dalam pelajaran ini, anda telah mempelajari cara menggunakan gabungan kendiri untuk memodelkan dan membuat pertanyaan tentang hierarki klasik pekerja-pengurus yang disimpan dalam satu jadual.
Perkara penting:
- Gabungan kendiri menggabungkan sesebuah jadual dengan jadual itu sendiri menggunakan dua nama ganti yang berbeza.
- Syarat gabungan menghubungkan
manager_iddenganiddalam jadual yang sama. - Gunakan INNER JOIN untuk melihat hanya pekerja yang mempunyai pengurus, dan LEFT JOIN untuk menyertakan semua orang.
- COALESCE boleh menggantikan nilai pengurus NULL dengan label yang mudah difahami.
- Bagi hierarki dengan kedalaman yang tidak terhad, pertimbangkan CTE rekursif.
Pelajari SQL dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 46
- Pelajaran
- 183
Soalan Lazim
Adakah pelajaran “Pekerja dan Pengurus” percuma?
Ya — teks penuh “Pekerja dan Pengurus” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus SQL Academy, tingkat taraf kepada CoddyKit PRO. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Pekerja dan Pengurus”?
Contoh hierarki klasik. Anda berlatih SQL Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan SQL Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran SQL Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Pekerja dan Pengurus” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Apakah Cantuman Kendiri
- Pekerja dan Pengurus
- Membandingkan Baris dalam Jadual yang Sama
- Had Cantuman Kendiri