SQL Academy · Pelajaran

Pekerja dan Pengurus

Contoh hierarki klasik.

Pelajaran 2 daripada 413 langkah

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_id dengan id dalam 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.
Percuma untuk bermula

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

  1. Apakah Cantuman Kendiri
  2. Pekerja dan Pengurus
  3. Membandingkan Baris dalam Jadual yang Sama
  4. Had Cantuman Kendiri
← Kembali ke SQL Academy