KomputerJenis 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:

  1. 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).
  2. 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. Kami berharap bahawa anda kini memahami apabila berbeza (SQL) digunakan. Penerangan memberi anda maklumat lengkap mengenai kebolehpasaran untuk menerapkan hujah ini dalam menyelesaikan pelbagai masalah. Lagipun, ternyata, walaupun hujah mudah dalam aplikasinya menyembunyikan kebarangkalian yang sangat jelas untuk kehilangan beberapa data dan menyimpulkan maklumat yang tepat.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 ms.birmiss.com. Theme powered by WordPress.