Komputer, Jenis fail
SQL berbeza: perihalan, contoh, sifat
Sering kali, apabila menggunakan SQL untuk mendapatkan maklumat dari jadual, pengguna menerima data yang berlebihan, yang terdiri daripada baris pendua yang sama sekali sama. Untuk mengecualikan situasi ini, gunakan hujah SQL yang berbeza dalam klausa Pilih. Dalam artikel ini, kita akan mempertimbangkan contoh menggunakan hujah ini, serta situasi di mana lebih baik untuk meninggalkan hujah.
Sebelum kita mula mempertimbangkan contoh-contoh tertentu, kita akan membuat beberapa jadual yang diperlukan dalam pangkalan data.
Menyediakan jadual
Bayangkan kita ada dalam pangkalan data yang disimpan maklumat tentang kertas dinding, yang dibentangkan dalam dua jadual. Ini adalah jadual Oboi (kertas dinding) dengan medan id (pengecam unik), jenis (jenis kertas dinding - kertas, vinil, dll), warna, struct dan harga. Dan jadual Ostatki (sisa) dengan medan id_oboi (merujuk kepada pengecam unik dalam jadual Oboi) dan mengira (bilangan gulungan di gudang).
Isi jadual dengan data. Dalam jadual dengan kertas dinding kami menambah 9 entri:
Oboi | ||||
Id | Taipkan | Warna | Struktur | Harga |
1 | Kertas | Warna-warni | Embossed | 56.9 |
2 | Kertas dua lapisan | Beige | Licin | 114.8 |
3 | Vinyl | Orange | Embossed | 504 |
4 | Kain bukan tenunan | Beige | Embossed | 1020.9 |
5 | Kertas dua lapisan | Beige | Licin | 150.6 |
6th | Kertas | Warna-warni | Licin | 95.4 |
7th | Vinyl | Coklat | Licin | 372 |
8hb | Kain bukan tenunan | Putih | Embossed | 980.1 |
9th | Kain | Merah jambu | Licin | 1166.5 |
Di dalam jadual dengan bakinya terdapat sembilan rekod:
Ostatki | |
Id_oboi | Kira |
1 | 8hb |
2 | 12 |
3 | 24 |
4 | 9th |
5 | 16th |
6th | 7th |
7th | 24 |
8hb | 32 |
9th | 11hb |
Mari kita mulakan dengan menerangkan cara menggunakan SQL yang berbeza.
Letakkan yang berbeza dalam klausa Pilih
Hujah yang berbeza hendaklah diletakkan segera selepas Kata kunci pilih dalam pertanyaan. Ia digunakan dengan serta-merta ke semua lajur yang ditentukan dalam klausa Pilih, kerana ia akan mengecualikan baris yang sama sekali serupa dari hasil pertanyaan. Oleh itu, ia mencukupi untuk menentukan "pilih berbeza" semasa menulis pertanyaan SQL. Satu-satunya pengecualian ialah penggunaan yang berbeza di dalam fungsi agregat, yang akan dianggap sedikit kemudian.
Perlu diingatkan bahawa kebanyakan DBMS tidak mengenali permintaan anda seperti ini:
Pilih Ostatki.Count, Oboi yang berbeza. * DARI Oboi INNER JOIN Ostatki ON Oboi.id = Ostatki.id_oboi |
Di sini, hujah dinyatakan beberapa kali atau ditentukan sekali, tetapi sebelum lajur kedua, ketiga atau lain yang dipilih. Anda akan menerima ralat dengan pautan ke ketidaktepatan dalam sintaks.
Menggunakan pertanyaan standard yang berlainan
Adalah jelas bahawa dengan pembinaan struktur struktur meja dan pengisiannya yang betul, dalam situasi jadual yang sama dikecualikan apabila rentetan yang sama sekali berlaku. Oleh itu, pelaksanaan pertanyaan "Select distinct *" dengan pilihan dari satu jadual adalah praktikal tidak praktikal.
Bayangkan keadaan di mana kita perlu mengetahui apa jenis kertas dinding yang kita ada, hanya untuk kemudahan, semak mengikut jenis:
Pilih Oboi.type DARI pesanan Oboi mengikut jenis |
Dan kita mendapat hasilnya:
Taipkan |
Kertas |
Kertas |
Kertas dua lapisan |
Kertas dua lapisan |
Vinyl |
Vinyl |
Kain |
Kain bukan tenunan |
Kain bukan tenunan |
Seperti yang dapat anda lihat, ada baris pendua dalam jadual. Jika kita menambah kepada fasal Pilih yang berbeza:
Pilah Oboi.type yang berbeza DARI pesanan Oboi mengikut jenis |
Kemudian kami mendapat hasilnya tanpa mengulangi:
Taipkan |
Kertas |
Kertas dua lapisan |
Vinyl |
Kain |
Kain bukan tenunan |
Oleh itu, jika data telah dimasukkan dengan betul ke dalam jadual, maka dengan serta-merta selepas panggilan atau permintaan pembeli, kami akan dapat menjawab bahawa tidak ada kertas dinding cair, turapan kaca dan akrilik kertas dinding di kedai. Mengingat bahawa pelbagai di kedai biasanya tidak terhad kepada seratus kertas dinding, ia akan cukup memakan buruh untuk melihat melalui senarai jenis yang tidak unik.
Menggunakan berbeza dalam fungsi agregat
Berbeza SQL boleh digunakan dengan fungsi agregat. Tetapi untuk Min dan Max, penggunaannya tidak akan mempunyai sebarang kesan, dan apabila mengira jumlah atau nilai purata, jarang sekali mungkin untuk membayangkan keadaan di mana ia tidak perlu mengambil kira pengulangan.
Katakan kita ingin mengetahui berapa gudang kami penuh, dan untuk ini kami menghantar permintaan yang mengira jumlah gulung di gudang:
PILIH jumlah (Ostatki.count) DARI Ostatki |
Pertanyaannya akan membalas respon 143. Jika kita menukar kepada:
PILIH jumlah (berbeza Ostatki.count) DARI Ostatki |
Kemudian kami hanya mendapat 119, kerana kertas dinding di bawah artikel 3 dan 7 berada dalam stok dalam kuantiti yang sama. Walau bagaimanapun, jelas bahawa jawapan ini tidak betul.
Selalunya, SQL digunakan dengan fungsi Count. Oleh itu, tanpa kesukaran, kita dapat mengetahui berapa banyak jenis kertas dinding yang kita umumkan:
Kiraan SELECT (jenis Oboi.type yang berbeza) DARI Oboi |
Dan dapatkan hasil 5 - kertas biasa dan dua lapisan, vinil, kain dan bukan tenunan. Sudah tentu setiap orang melihat iklan seperti: "Hanya kita mempunyai lebih daripada 20 jenis wallpaper yang berbeza!", Dengan itu ia bermakna bahawa di kedai ini tidak ada beberapa dozen gulung segalanya, tetapi kertas dinding jenis moden yang paling pelbagai.
Menariknya, dalam permintaan tunggal, anda boleh menentukan beberapa fungsi Count dengan atau tanpa atribut yang berbeza. Itulah satu-satunya keadaan yang berbeza dalam Pilih boleh hadir beberapa kali.
Bilakah saya harus menolak penggunaan hujah
Penggunaan hujah yang berbeza SQL harus dibuang dalam salah satu daripada dua cara:
- Anda pilih dari jadual dan pasti keunikan nilai-nilai dalam setiap. Dalam kes ini, penggunaan hujah adalah tidak semestinya, kerana ini adalah beban tambahan pada pelayan atau klien (bergantung kepada jenis DBMS).
- Anda takut kehilangan data yang diperlukan. Marilah kita terangkan.
Katakan bos meminta anda memaparkan senarai kertas dinding yang anda ada, dengan hanya dua lajur - jenis dan warna. Oleh kebiasaan, anda menyatakan hujah yang berbeza:
PILIH Oboi.type yang berbeza, Oboi.color DARI Oboi ORDER BY Oboi.type |
Dan - Anda kehilangan beberapa data:
Taipkan | Warna |
Kertas | Warna-warni |
Kertas dua lapisan | Beige |
Vinyl | Coklat |
Vinyl | Orange |
Kain | Merah jambu |
Kain bukan tenunan | Beige |
Kain bukan tenunan | Putih |
Ia mungkin kelihatan bahawa kita hanya mempunyai satu jenis kertas dinding kertas (konvensional dan dua berlapis), walaupun sebenarnya di dalam jadual kecil kita mempunyai dua artikel (hasilnya tanpa perbezaan):
Taipkan | Warna |
Kertas | Warna-warni |
Kertas | Warna-warni |
Kertas dua lapisan | Beige |
Kertas dua lapisan | Beige |
Vinyl | Coklat |
Vinyl | Orange |
Kain | Merah jambu |
Kain bukan tenunan | Putih |
Kain bukan tenunan | Beige |
Oleh itu, seperti apa-apa pertanyaan, dengan hujah yang jelas seseorang mesti berhati-hati dan menyelesaikan masalah dengan permohonannya bergantung pada tugas yang di tangannya.
Alternatif berbeza
Sebaliknya hujah yang jelas adalah All argument. Apabila anda menggunakannya, baris pendua akan disimpan. Tetapi kerana secara lalai DBMS berpendapat bahawa adalah perlu untuk mencetak semua nilai, Semua hujah adalah lebih daripada satu penentu daripada hujah fungsi sebenar.
Similar articles
Trending Now