Asas SELECT DISTINCT
Kembalikan baris unik sahaja.
Asas SELECT DISTINCT ialah pelajaran SQL Academy percuma di CoddyKit. Ini ialah pelajaran 1 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.
Mengapa Pendua Berlaku
Jadual sering mengandungi nilai berulang. Jadual customers mungkin menyenaraikan city yang sama dalam ribuan baris. Apabila anda hanya mengambil berat tentang set nilai unik, SELECT biasa mengembalikan setiap baris termasuk baris berulang.
SELECT DISTINCT menggabungkan baris yang sama menjadi satu. Dalam pelajaran ini, anda akan mempelajari asas untuk mengembalikan hasil yang unik sahaja.
SELECT city FROM customers;
-- Returns one row per customer, with many repeated citiesKata Kunci DISTINCT
DISTINCT diletakkan tepat selepas SELECT. Ia membuang baris pendua daripada set hasil dan mengekalkan hanya satu salinan bagi setiap gabungan unik lajur yang dipilih.
SELECT DISTINCT city
FROM customers;
-- One row per unique cityDISTINCT Terpakai pada Keseluruhan Baris
Salah faham yang lazim ialah DISTINCT hanya terpakai pada satu lajur. Sebenarnya, ia terpakai pada keseluruhan baris yang dipilih. Setiap lajur yang anda senaraikan diambil kira untuk menentukan sama ada dua baris ialah pendua.
Pendua baris di bawah dibuang berdasarkan nilai city sahaja kerana itulah satu-satunya lajur yang dipilih.
SELECT DISTINCT country
FROM customers;
-- Unique countries across all customersData Contoh
Bayangkan jadual orders yang kecil. Perhatikan nilai status dan country yang berulang. Kita akan menggunakan struktur ini sepanjang pelajaran.
id=1, status='paid', country='US'id=2, status='paid', country='US'id=3, status='shipped', country='DE'id=4, status='paid', country='DE'
CREATE TABLE orders (
id int PRIMARY KEY,
status text,
country text,
amount numeric(10,2)
);DISTINCT pada Satu Lajur
Sebagai peringatan ringkas, menggunakan DISTINCT pada satu lajur mengembalikan setiap nilai unik bagi lajur itu sahaja.
Di sini, kita mendapatkan setiap nama pelanggan yang unik — hanya tiga baris walaupun terdapat enam pesanan.
SELECT DISTINCT status
FROM orders;
-- paid
-- shippedNULL Dianggap sebagai Satu Nilai
Walaupun NULL biasanya tidak sama dengan apa-apa pun (termasuk dirinya sendiri), DISTINCT menganggap semua NULL sebagai satu kumpulan. Jika sesuatu lajur mempunyai banyak baris NULL, anda akan mendapat tepat satu NULL dalam hasil unik.
SELECT DISTINCT shipped_at
FROM orders;
-- All NULL shipped_at rows collapse into a single NULL rowDISTINCT dengan ORDER BY
Biasanya anda mahu nilai unik itu diisih. DISTINCT dilaksanakan dahulu untuk membina set unik, kemudian ORDER BY mengisihnya. Mana-mana lajur dalam ORDER BY juga mesti muncul dalam senarai SELECT apabila DISTINCT digunakan.
SELECT DISTINCT country
FROM orders
ORDER BY country;
-- DE
-- USDISTINCT berbanding GROUP BY
SELECT DISTINCT col dan SELECT col GROUP BY col menghasilkan baris unik yang sama. Gunakan DISTINCT apabila anda hanya mahukan nilai unik; gunakan GROUP BY apabila anda juga memerlukan nilai agregat seperti COUNT bagi setiap kumpulan.
-- These two return the same set of countries:
SELECT DISTINCT country FROM orders;
SELECT country FROM orders
GROUP BY country;DISTINCT Memerlukan Kos
Membuang pendua bukanlah percuma. Pangkalan data perlu mengisih atau mencincang semua baris calon untuk mencari baris yang unik. Pada jadual besar, ini menambah kerja CPU dan memori, jadi gunakan DISTINCT hanya apabila anda benar-benar memerlukan keunikan.
-- Avoid blind DISTINCT on every query.
-- If the column is already unique (e.g. a PRIMARY KEY),
-- DISTINCT does nothing useful but still costs work:
SELECT DISTINCT id FROM orders; -- id is already uniqueDISTINCT dalam Ungkapan
Anda boleh menggunakan DISTINCT pada ungkapan yang dikira, bukan hanya pada lajur mentah. Pangkalan data menilai ungkapan itu bagi setiap baris, kemudian membuang pendua daripada hasilnya.
SELECT DISTINCT upper(country) AS country_code
FROM orders
ORDER BY country_code;
-- DE
-- USMembina Senarai Carian
Kegunaan praktikal DISTINCT ialah mengisi menu lungsur atau senarai penapis dalam aplikasi: dapatkan status unik untuk menunjukkan kepada pengguna semua pilihan yang mungkin dan kini wujud dalam data.
SELECT DISTINCT status
FROM orders
ORDER BY status;
-- paid
-- shippedSemakan Pantas
Di manakah kata kunci DISTINCT perlu diletakkan, dan apakah yang dideduplikasi olehnya?
Rumusan
Anda telah mempelajari asas SELECT DISTINCT:
- Ia membuang baris pendua daripada set hasil.
- Ia terpakai pada keseluruhan baris yang dipilih, bukan satu lajur sahaja.
- Semua
NULLdigabungkan menjadi satu nilai. ORDER BYdilaksanakan selepas pendua dibuang; lajurnya mesti dipilih.- Ia memerlukan kerja tambahan, jadi gunakan hanya apabila diperlukan.
Seterusnya: melanjutkan DISTINCT merentas berbilang lajur.
SELECT DISTINCT status
FROM orders
ORDER BY status;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 “Asas SELECT DISTINCT” percuma?
Ya — teks penuh “Asas SELECT DISTINCT” 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 “Asas SELECT DISTINCT”?
Kembalikan baris unik sahaja. 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 1 daripada 4.
Berapa lamakah pelajaran “Asas SELECT DISTINCT” 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
- Asas SELECT DISTINCT
- DISTINCT pada Berbilang Lajur
- PostgreSQL DISTINCT ON
- Mengira Nilai Unik