SQL ayrı: açıklama, örnekler, özellikler
Genellikle örnekleme için SQL kullanırkenTablolardaki bilgiler, kullanıcı tamamen aynı çift satırların varlığından oluşan gereksiz verileri alır. Bu durumu hariç tutmak için, Select yan tümcesindeki SQL bağımsız değişkenini kullanın. Bu yazıda, argümanı terk etmenin daha iyi olduğu durumların yanı sıra, bu argümanı kullanmanın örneklerini ele alacağız.
Belirli örnekleri incelemeye başlamadan önce, veritabanında birkaç gerekli tablo oluşturacağız.
Tablo hazırlama
Veritabanımızda sakladığımızı hayal edinduvar kağıdı hakkında bilgi, iki tablo halinde sunulmuştur. Bu alan kimliği (benzersiz tanımlayıcı), türü (duvar kağıdı - kağıt, vinil, vb), renk, yapı ve fiyat ile Oboi tablosu (duvar kağıdı) 'dir. Ve Ostatki masası (arta kalanlar) alanları ile id_oboi (Oboi tablosundaki benzersiz tanımlayıcıya referans) ve sayımı (depodaki rulo sayısı).
Tabloları verilerle doldurun. Duvar kağıdı ile tabloda 9 giriş ekleyin:
oboi | ||||
kimlik | tip | renk | yapı | fiyat |
1 | kâğıt | çok renkli | kabartmalı | 56,9 |
2 | Çift katmanlı kağıt | bej | pürüzsüz | 114,8 |
3 | vinil | turuncu | kabartmalı | 504 |
4 | Dokuma olmayan polar eldivenler | bej | kabartmalı | 1020,9 |
5 | Çift katmanlı kağıt | bej | pürüzsüz | 150,6 |
6 | kâğıt | çok renkli | pürüzsüz | 95,4 |
7 | vinil | kahverengi | pürüzsüz | 372 |
8 | Dokuma olmayan polar eldivenler | beyaz | kabartmalı | 980,1 |
9 | bez | pembe | pürüzsüz | 1166,5 |
Kalanlarla tabloda da dokuz kayıt var:
Ostatki | |
id_oboi | saymak |
1 | 8 |
2 | 12 |
3 | 24 |
4 | 9 |
5 | 16 |
6 | 7 |
7 | 24 |
8 | 32 |
9 | 11 |
SQL'de nasıl farklı kullanılacağını açıklayarak başlayalım.
Select yan tümcesinde ayrı yer
Farklı argüman hemen sonra yerleştirilmelidirSorgularda anahtar kelimeyi seçin. Select yan tümcesinde belirtilen tüm sütunlara hemen uygulanır, çünkü bu, tamamen aynı satırları sorgu sonucundan hariç tutacaktır. Bu nedenle, SQL sorgusunu yazarken "farklı seç" belirtmek yeterlidir. Bunun tek istisnası, biraz sonra ele alacağımız agrega fonksiyonlarının içinde belirgin bir şekilde kullanılmasıdır.
Çoğu DBMS'nin isteğinizi şu şekilde tanıyamadığı unutulmamalıdır:
Farklı Ostatki.Count, farklı Oboi SEÇİN. * Oboi'den INNER JOIN Ostatki ON Oboi.id = Ostatki.id_oboi |
Burada, argüman birkaç kez belirtilir veya bir kez belirtilir, ancak ikinci, üçüncü veya diğer seçilebilir kolondan önce. Sözdizimdeki yanlışlıklara referansla bir hata alırsınız.
Standart sorgularda farklı kullanma
Açıkçası, iyi yapılandırılmış bir yapı ileTablolar ve bunların doldurulması, tek bir tablo içinde, tamamen aynı dizgilerle karşılaşıldığında durumlar hariç tutulur. Bu nedenle, bir tablodan bir seçim ile "Farklı seç" sorgusunun yürütülmesi pratik olarak pratik değildir.
Ne tür bir duvar kağıdına sahip olduğumuzu, sadece kolaylık sağlamak için, türüne göre sıraladığımız bir durumu düşünün:
Oboi.type SELECT Oboi siparişinden türüne göre |
Ve sonucu aldık:
tip |
kâğıt |
kâğıt |
Çift katmanlı kağıt |
Çift katmanlı kağıt |
vinil |
vinil |
bez |
Dokuma olmayan polar eldivenler |
Dokuma olmayan polar eldivenler |
Gördüğünüz gibi, tabloda çift satırlar var. Ayrıcalık seç öğesini eklersek:
Farklı Oboi.type SELECT Oboi siparişinden türüne göre |
sonra tekrar etmeden sonucu alırız:
tip |
kâğıt |
Çift katmanlı kağıt |
vinil |
bez |
Dokuma olmayan polar eldivenler |
Böylece veriler doğru bir şekilde girilmişseTablo, daha sonra çağrı veya alıcıların talebi hemen sonra, sıvı duvar kağıdı, duvar kağıdı ve akrilik duvar kağıdı mağazada mevcut olmadığını cevaplamak mümkün olacak. Mağazalardaki ürün yelpazesinin genellikle yüz duvarla sınırlı olmadığı göz önüne alındığında, benzersiz olmayan türlerin listesini taramak oldukça yoğun olacaktır.
Birleştirilmiş işlevler içinde farklı kullanma
SQL bağımsız argümanı herhangi biriyle kullanılabilirtoplama işlevi. Fakat Min ve Max için, kullanımının herhangi bir etkisi olmayacaktır ve toplamı veya ortalama değeri hesaplarken, tekrarları hesaba katmanın gerekli olmadığı bir durumu hayal etmek nadiren mümkündür.
Depolarımızın ne kadar dolu olduğunu bilmek istediğimizi ve bunun için de depodaki toplam rulo sayısını hesaplayan bir talep gönderdiğimizi varsayalım:
SELECT toplamı (Ostatki.count) Ostatki’den |
Sorgu bir cevap verecektir. 143.
SELECT toplamı (farklı Ostatki.count) Ostatki’den |
o zaman sadece 119 alırız, çünkü duvar 3 ve 7'nin altındaki duvar kağıdı aynı miktarda stokta. Ancak, bu cevabın yanlış olduğu açıktır.
Çoğu zaman, SQL Count fonksiyonu ile kullanılır. Yani, zorluk çekmeden, genellikle sahip olduğumuz benzersiz duvar kağıdı türlerini öğrenebiliriz:
SELECT sayımı (farklı Oboi.type) Oboi'den |
Ve sonuç 5 olsun - kağıt sıradan veiki katmanlı, vinil, kumaş ve dokumasız. Şüphesiz herkes gibi bir reklam gördü: "Sadece 20'den fazla farklı duvar kağıdına sahibiz!", Yani bu mağazada her şeyin bir kaç düzine rulosu yok, ama en çeşitli modern tiplerin duvar kağıdı var.
İlginçtir, bir sorguda belirtebilirsinizFarklı öznitelikli veya ayrı öznitelik birden çok Sayım işlevi. Yani, bu, Select'teki farklılığın bir kereden fazla mevcut olamayacağı tek durumdur.
Bir argümanın kullanımını ne zaman reddetmeliyim
SQL ayrı bağımsız değişkeninin kullanılması iki yoldan biriyle atılmalıdır:
- Tablolardan seçiyorsunuz ve emin misiniz?her birindeki değerlerin tekliği. Bu durumda, argüman kullanımı uygun değildir, çünkü bu sunucu veya istemci üzerinde ek bir yüktür (DBMS türüne bağlı olarak).
- Gerekli verileri kaybetmekten korkuyorsunuz. Açıklayacağız.
Patronun, sahip olduğunuz duvar kağıdının listesini göstermesini ve yalnızca iki sütunu (tür ve renk) belirtmenizi istediğini varsayalım. Alışkanlığa göre, bağımsız değişkeni belirtirsiniz:
SELECT farklı Oboi.type, Oboi.color Oboi'den Oboi.type İLE SİPARİŞ |
Ve - bazı verileri kaybedersiniz:
tip | renk |
kâğıt | çok renkli |
Çift katmanlı kağıt | bej |
vinil | kahverengi |
vinil | turuncu |
bez | pembe |
Dokuma olmayan polar eldivenler | bej |
Dokuma olmayan polar eldivenler | beyaz |
Aslında bizim tek bir kağıt kağıdına sahip olduğumuz görülebilir (geleneksel ve iki katmanlı), aslında küçük masamızda bile iki yazı var (sonuç farklı değil):
tip | renk |
kâğıt | çok renkli |
kâğıt | çok renkli |
Çift katmanlı kağıt | bej |
Çift katmanlı kağıt | bej |
vinil | kahverengi |
vinil | turuncu |
bez | pembe |
Dokuma olmayan polar eldivenler | beyaz |
Dokuma olmayan polar eldivenler | bej |
Bu nedenle, herhangi bir sorguda olduğu gibi, ayrı bir argümanla birlikte, eldeki göreve bağlı olarak uygulama ile sorunu dikkatli ve doğru şekilde çözmelidir.
Alternatif farklı
Argümanın zıddı farklıdır.Tümü. Bunu kullandığınızda, çift satırlar kaydedilir. Ancak, varsayılan olarak, DBMS, tüm değerleri yazdırmanın gerekli olduğunu düşünür, Tüm argüman, gerçek bir işlevsel argümandan ziyade bir belirleyiciden daha fazlasıdır.