SQL - Penyelia Operator

Hai, para nujak SQL masa depan! Hari ini, kita akan melantikan ke dalam dunia ajaib penyelia operator. Jangan bimbang jika anda baru dalam programming - saya akan menjadi pandu ramah anda dalam pengembaraan ini. Jadi, mari kita lipat lengan dan mula!

SQL - EXISTS Operator

Penyelia Operator SQL

Imajina anda adalah seorang detektif cuba menyelesaikan satu misteri. Penyelia operator adalah seperti kaca pembesar yang boleh dipercayai - ia membantu anda untuk mengetahui jika sesuatu wujud dalam pangkalan data anda. Ia adalah alat yang kuat yang mengembalikan TRUE jika subquery mengandungi mana-mana baris, dan FALSE jika iatidak.

Berikut adalah cara mudah untuk mengenaiinya:

EXISTS (subquery)

Jika subquery mengembalikan mana-mana baris, EXISTS berkata "Aha! Saya menemui sesuatu!" (TRUE). Jika ia tidak mengembalikan apa-apa, EXISTS mengangguk dan berkata "Tidak, tiada apa-apa di sini." (FALSE).

Penyelia Operator dengan Statement SELECT

Mari kita mula dengan contoh asas. Dibayangkan kita ada dua jadual: Customers dan Orders. Kita mahu cari semua pelanggan yang telah membuat sekurang-kurangnya satu order.

SELECT CustomerName
FROM Customers c
WHERE EXISTS (SELECT 1 FROM Orders o WHERE o.CustomerID = c.CustomerID);

Apa yang berlaku di sini? Kita meminta SQL untuk:

  1. Melihat setiap pelanggan dalam jadual Customers.
  2. Untuk setiap pelanggan, periksa jika terdapat mana-mana order dalam jadual Orders dengan CustomerID yang sepadan.
  3. Jika terdapat, pelanggan itu dimasukkan dalam hasil kami.

Ia seperti memeriksa jika setiap pelanggan meninggalkan sebarang jejak (order) di kedai kita!

Penyelia Operator dengan Statement UPDATE

Sekarang, katakanlah kita mahu memberikan diskon khas kepada pelanggan yang telah membuat order. Kita boleh menggunakan EXISTS dalam statement UPDATE:

UPDATE Customers
SET Discount = 10
WHERE EXISTS (SELECT 1 FROM Orders WHERE Orders.CustomerID = Customers.CustomerID);

Query ini memberitahu SQL:

  1. Melihat setiap pelanggan.
  2. Jika mereka mempunyai mana-mana order (EXISTS mengembalikan TRUE), berikan mereka diskon 10%.
  3. Jika tidak, biarkan diskon mereka seperti biasa.

Ia seperti menghadiahkan pelanggan setia dengan tiket emas!

Penyelia Operator dengan Statement DELETE

kadang-kadang, kita perlu membersihkan pangkalan data kita. Katakanlah kita mahu membuang pelanggan yang tidak membuat apa-apa order:

DELETE FROM Customers
WHERE NOT EXISTS (SELECT 1 FROM Orders WHERE Orders.CustomerID = Customers.CustomerID);

Query ini seperti membersihkan rumah:

  1. Melihat setiap pelanggan.
  2. Jika mereka tidak mempunyai mana-mana order (NOT EXISTS mengembalikan TRUE), buang mereka dari jadual Customers.
  3. Jika mereka mempunyai order, biarkan mereka tinggal.

Ingat, selalu berhati-hati dengan statement DELETE - tiada butang "undo" dalam pangkalan data!

NOT Operator dengan Penyelia Operator

Kita telah melihat NOT EXISTS dalam tindakan, tetapi mari kita kongsikan lebih lanjut. NOT EXISTS adalah seperti bertanya "Adakah tiada sesuatu di situ?"

SELECT ProductName
FROM Products p
WHERE NOT EXISTS (SELECT 1 FROM OrderDetails od WHERE od.ProductID = p.ProductID);

Query ini mencari semua produk yang tidak pernah diorder. Ia seperti mencari wajah suram di dalam parti - mereka ada di parti, tetapi belum ada yang meminta mereka menari!

Penggunaan Penyelia Operator SQL

Mari kita ringkaskan bila dan mengapa kita menggunakan EXISTS:

Skenario Penggunaan
Memeriksa rekod berkaitan Gunakan EXISTS untuk mencari rekod utama dengan perincian berkaitan
Menghindari duplikat EXISTS tidak mengembalikan duplikat, berbeza dengan IN
Prestasi Biasanya lebih cepat daripada IN untuk set data besar
Penanganan NULL Menangani nilai NULL lebih baik daripada beberapa pilihan lain

Ingat, EXISTS adalah seperti pertanyaan ya/tidak kepada pangkalan data anda. Ia tidak peduli apa yang ia temui, hanya jika ia menemui sesuatu.

Berikut adalah contoh yang sedikit lebih kompleks untuk menantang anda:

SELECT DepartmentName
FROM Departments d
WHERE EXISTS (
SELECT 1
FROM Employees e
WHERE e.DepartmentID = d.DepartmentID
AND e.Salary > 50000
);

Query ini mencari semua departemen yang mempunyai sekurang-kurangnya satu pekerja yang menerima lebih daripada $50,000. Ia seperti bertanya, "Mana-mana departemen yang mempunyai pengurus tinggi?"

Dan di situ juga, rakan-rakan! Anda telah menjadi dikenali dengan penyelia operator. Ingat, latihan menjadikan sempurna. Cobalah menulis query anda sendiri, cuba berbagai-bagai skenario, dan segera anda akan menggunakan EXISTS seperti seorang profesional!

Sebelum kita tamat, ini adalah sedikit lelucon SQL untuk anda: Mengapa pengembang meninggalkan kerjanya? Dia tidak dapat TABLE diskusi tentang database yang buruk! ?

Terus coding, tetap penasihat, dan ingat - dalam dunia pangkalan data, keberadaan adalah segalanya!

Credits: Image by storyset