• SQL toplama işlevleri - SUM, MIN, MAX, AVG, COUNT. Toplu işlevler

    Aşağıdaki alt bölümlerde, sorgularda kullanılabilen diğer SELECT deyimi yan tümceleri, ayrıca toplama işlevleri ve deyim kümeleri açıklanmaktadır. Bir hatırlatma olarak, şu ana kadar WHERE yan tümcesinin kullanımını ele aldık ve bu makalede GROUP BY, ORDER BY ve HAVING yan tümcelerine bakacağız ve bu yan tümcelerin agrega ile birlikte kullanımına ilişkin bazı örnekler vereceğiz. Transact-SQL'de desteklenen işlevler.

    GRUPLANDIRMA teklifine göre

    Teklif GRUPLANDIRMAYA GÖRE bir veya daha fazla sütunun veya ifadenin değerlerine dayalı olarak bir dizi özet satır oluşturmak için seçilen satır kümesini gruplandırır. GROUP BY deyiminin basit bir kullanımı aşağıdaki örnekte gösterilmiştir:

    SampleDb'yi KULLANIN; Works_On GRUPTAN İşe GÖRE İş SEÇİN;

    Bu örnekte çalışan pozisyonları seçilip gruplandırılmıştır.

    Yukarıdaki örnekte, GROUP BY deyimi, İş sütununun tüm olası değerleri (NULL dahil) için ayrı bir grup oluşturur.

    içindeki sütunları kullanma teklif grubu BY belirli koşulları karşılamalıdır. Özellikle, sorgunun seçim listesindeki her sütunun GROUP BY yan tümcesinde de yer alması gerekir. Bu gereksinim, bir toplama işlevinin parçası olan sabitler ve sütunlar için geçerli değildir. (Toplu işlevler bir sonraki alt bölümde ele alınmıştır.) Bu mantıklı çünkü yalnızca GROUP BY yan tümcesindeki sütunlar, grup başına bir değer garanti eder.

    Bir tablo, sütunlarının herhangi bir kombinasyonuna göre gruplandırılabilir. Aşağıdaki örnek, Works_on tablosunun satırlarının iki sütun halinde gruplandırılmasını gösterir:

    SampleDb'yi KULLANIN; Works_On GRUPTAN ProjeNumarasına Göre ProjeNumarası, İş SEÇİN, İş;

    Bu sorgunun sonucu:

    Sorgunun sonuçlarına göre, farklı proje numarası ve pozisyon kombinasyonlarına sahip dokuz grup olduğunu görebilirsiniz. GROUP BY yan tümcesindeki sütun adlarının sırasının, SELECT sütun listesindekiyle aynı olması gerekmez.

    Toplu işlevler

    Toplam değerler elde etmek için toplama işlevleri kullanılır. Tüm toplama işlevleri aşağıdaki kategorilere ayrılabilir:

      sıradan toplama fonksiyonları;

      istatistiksel toplama fonksiyonları;

      kullanıcı tarafından tanımlanan toplam işlevler;

      analitik toplama fonksiyonları.

    Burada ilk üç tür toplama işlevine bakacağız.

    Sıradan Toplama Fonksiyonları

    Transact-SQL dili, aşağıdaki altı toplama işlevini destekler: DAK, MAKS., TOPLAM, ortalama, SAYMAK, COUNT_BIG.

    Tüm toplama işlevleri, sütun veya ifade olabilen tek bir bağımsız değişken üzerinde hesaplamalar gerçekleştirir. (Tek istisna, sırasıyla COUNT(*) ve COUNT_BIG(*) olmak üzere iki işlevin COUNT ve COUNT_BIG'in ikinci biçimidir.) Herhangi bir toplama işlevinin sonucu, ayrı bir sonuç sütununda görüntülenen sabit bir değerdir.

    Toplama işlevleri, bir GROUP BY deyimi de içerebilen SELECT deyiminin sütun listesinde belirtilir. SELECT deyiminde GROUP BY yan tümcesi yoksa ve sütun seçme listesi en az bir toplama işlevi içeriyorsa, basit sütunlar içermemelidir (toplama işlevine argüman görevi gören sütunlar dışında). Bu nedenle, aşağıdaki örnekteki kod yanlıştır:

    SampleDb'yi KULLANIN; Çalışandan Soyadı, MIN(Id) SEÇİN;

    Burada, Çalışan tablosunun Soyadı sütunu, bir toplama işlevi bağımsız değişkeni olmadığı için sütun seçim listesinde olmamalıdır. Öte yandan, bir sütun seçme listesi, bu sütunlar GROUP BY deyiminin bağımsız değişkenleriyse, toplama işlevinin bağımsız değişkeni olmayan sütun adları içerebilir.

    Bir toplama işlevi bağımsız değişkeninden önce iki olası seçenekten biri gelebilir anahtar kelimeler:

    TÜM

    Sütundaki tüm değerler üzerinde hesaplamaların yapıldığını belirtir. Bu varsayılan değerdir.

    BELİRGİN

    Hesaplamalar için yalnızca benzersiz sütun değerlerinin kullanıldığını belirtir.

    Toplama işlevleri MIN ve MAX

    MİN ve MAKS toplama işlevleri, en küçük ve en yüksek değer sırasıyla sütunlar. Sorgu bir WHERE yan tümcesi içeriyorsa, MIN ve MAX işlevleri, belirtilen ölçütleri karşılayan satırların en küçük ve en büyük değerini döndürür. Aşağıdaki örnek, MIN toplama işlevinin kullanımını göstermektedir:

    SampleDb'yi KULLANIN; -- Çalışandan 2581 SELECT MIN(Id) "Min Id" OLARAK döndürür;

    Yukarıdaki örnekte döndürülen sonuç pek bilgilendirici değildir. Örneğin bu numaranın sahibi olan çalışanın adı bilinmiyor. Ancak, bu soyadını her zamanki gibi elde etmek mümkün değildir, çünkü daha önce de belirtildiği gibi, Soyadı sütununun açıkça belirtilmesine izin verilmez. Bir çalışanın en düşük personel sayısı ile birlikte bu çalışanın soyadını almak için bir alt sorgu kullanılır. Aşağıdaki örnek, alt sorgunun önceki örnekteki SELECT deyimini içerdiği böyle bir alt sorgunun kullanımını gösterir:

    Sorgu yürütme sonucu:

    MAX toplama işlevinin kullanımı aşağıdaki örnekte gösterilmiştir:

    MİN ve MAKS işlevleri ayrıca dizeleri ve tarihleri ​​bağımsız değişken olarak alabilir. Bir dize bağımsız değişkeni durumunda, değerler gerçek sıralama düzeni kullanılarak karşılaştırılır. "date" türündeki tüm geçici veri bağımsız değişkenleri için en küçük sütun değeri en erken tarih ve en büyüğü - en yenisi.

    DISTINCT anahtar sözcüğünü MIN ve MAX işlevleriyle kullanabilirsiniz. MIN ve MAX toplama işlevleri kullanılmadan önce, tüm NULL değerleri bağımsız değişken sütunlarından çıkarılır.

    Toplama işlevi SUM

    agrega TOPLA işlevi hesaplar toplam tutar sütun değerleri. Bu toplama işlevinin bağımsız değişkeni her zaman sahip olmalıdır sayısal tip veri. SUM toplama işlevinin kullanımı aşağıdaki örnekte gösterilmiştir:

    SampleDb'yi KULLANIN; Projeden TOPLAM (Bütçe) "Özet bütçe" SEÇİN;

    Bu örnek, tüm projelerin bütçelerinin toplamını hesaplar. Sorgu yürütme sonucu:

    Bu örnekte, toplama işlevi tüm proje bütçe değerlerini gruplandırır ve bunların toplam tutarını belirler. Bu nedenle, sorgu örtük bir gruplama işlevi içerir (tüm benzer sorgular gibi). Yukarıdaki örnekteki örtülü gruplama işlevi, aşağıdaki örnekte gösterildiği gibi açıkça belirtilebilir:

    SampleDb'yi KULLANIN; Proje Grubundan (BY()) TOPLAM (Bütçe) "Toplam Bütçe" SEÇİN;

    DISTINCT seçeneğini kullanmak, TOPLA işlevini uygulamadan önce sütundaki tüm yinelenen değerleri ortadan kaldırır. Benzer şekilde, bu toplama işlevi uygulanmadan önce tüm NULL değerleri kaldırılır.

    AVG Toplama İşlevi

    agrega ortalama işlev bir sütundaki tüm değerlerin aritmetik ortalamasını döndürür. Bu toplama işlevinin bağımsız değişkeni her zaman sayısal bir veri türünde olmalıdır. AVG işlevi kullanılmadan önce, bağımsız değişkeninden tüm NULL değerleri kaldırılır.

    AVG toplama işlevinin kullanımı aşağıdaki örnekte gösterilmiştir:

    SampleDb'yi KULLANIN; -- 133833 döndürür SELECT AVG (Bütçe) Projeden "Proje başına ortalama bütçe";

    Burada tüm bütçeler için bütçenin aritmetik ortalaması hesaplanır.

    COUNT ve COUNT_BIG İşlevlerini Toplama

    agrega SAY işlevi iki farklı formu vardır:

    COUNT( sütun_adı) COUNT(*)

    İşlevin ilk biçimi sütun_adı sütunundaki değerlerin sayısını sayar. DISTINCT anahtar sözcüğü bir sorguda kullanılıyorsa, COUNT işlevi uygulanmadan önce yinelenen sütun değerleri kaldırılır. COUNT işlevinin bu biçimi, bir sütundaki değerlerin sayısını sayarken NULL değerleri dikkate almaz.

    COUNT toplama işlevinin ilk biçiminin kullanımı aşağıdaki örnekte gösterilmiştir:

    SampleDb'yi KULLANIN; ProjeNumarasına Göre Works_on GRUBU'NDAN ProjeNumarası SEÇİN, COUNT(DISTINCT Job) "Projedeki işler";

    Burası, her proje için farklı pozisyonların sayıldığı yerdir. Bu sorgunun sonucu:

    Örnek sorgudan da görebileceğiniz gibi, COUNT işlevi tarafından NULL değerleri dikkate alınmamıştır. (İş sütunundaki tüm değerlerin toplamı olması gerektiği gibi 11 değil 7 çıktı.)

    COUNT işlevinin ikinci biçimi, yani. COUNT(*) işlevi, bir tablodaki satır sayısını sayar. COUNT(*) işlevine sahip bir sorgunun SELECT deyimi, koşullu bir WHERE yan tümcesi içeriyorsa, işlev, belirtilen koşulu karşılayan satır sayısını döndürür. COUNT fonksiyonunun ilk formundan farklı olarak ikinci formunda NULL değerleri yok saymaz çünkü bu fonksiyon sütunlar üzerinde değil satırlar üzerinde çalışır. Aşağıdaki örnek, COUNT(*) işlevinin kullanımını göstermektedir:

    SampleDb'yi KULLANIN; Works_on GROUP BY Job'DAN "İş türü", COUNT(*) "İşçiye ihtiyaç var" OLARAK İş SEÇİN;

    Burada tüm projelerdeki pozisyon sayısı sayılır. Sorgu yürütme sonucu:

    COUNT_BIG İşlevi COUNT işlevine benzer. Aralarındaki tek fark, döndürdükleri sonucun türüdür: COUNT_BIG işlevi her zaman BIGINT değerleri döndürürken, COUNT işlevi INTEGER veri değerleri döndürür.

    İstatistiksel toplama işlevleri

    Aşağıdaki işlevler, istatistiksel toplama işlevleri grubunu oluşturur:

    VAR

    Bir sütunda veya ifadede temsil edilen tüm değerlerin istatistiksel varyansını hesaplar.

    VARP

    Bir sütunda veya ifadede temsil edilen tüm değerlerin popülasyonunun istatistiksel varyansını hesaplar.

    STDEV

    Standart sapmayı hesaplar (şu şekilde hesaplanır: Kare kök sütunun veya ifadenin tüm değerlerinin karşılık gelen varyansından).

    STDEVP

    Bir sütun veya ifadedeki tüm değerlerin toplamının standart sapmasını hesaplar.

    Kullanıcı Tanımlı Toplama İşlevleri

    Veritabanı Motoru, kullanıcı tanımlı işlevlerin uygulanmasını da destekler. Bu yetenek, kullanıcıların sistem toplama işlevlerini kendilerinin uygulayabilecekleri ve yükleyebilecekleri işlevlerle artırmalarına olanak tanır. Bu işlevler, kullanıcı tanımlı işlevlerin özel bir sınıfını temsil eder ve daha sonra daha ayrıntılı olarak ele alınacaktır.

    SAHİP TEKLİF

    Bir cümlede SAHİP OLMAK bir satır grubu için geçerli olan bir koşulu tanımlar. Dolayısıyla, bu yan tümce, satır grupları için, karşılık gelen tablonun içeriği için WHERE yan tümcesiyle aynı anlama sahiptir. HAVING yan tümcesinin sözdizimi aşağıdaki gibidir:

    SAHİP DURUM

    Burada, koşul parametresi bir koşulu temsil eder ve toplam işlevleri veya sabitleri içerir.

    HAVING yan tümcesinin COUNT(*) toplama işleviyle kullanımı aşağıdaki örnekte gösterilmiştir:

    SampleDb'yi KULLANIN; -- "p3" döndürür. Works_on GRUPTAN ProjeNumarasını ProjeNumarasına Göre SEÇİN SAYI(*) VAR

    Bu örnekte, GROUP BY deyimi kullanılarak, sistem tüm satırları ProjeNumarası sütunundaki değerlere göre gruplandırır. Daha sonra her gruptaki satır sayısı sayılır ve dörtten az (üç veya daha az) satır içeren gruplar seçilir.

    HAVING yan tümcesi, aşağıdaki örnekte gösterildiği gibi toplama işlevleri olmadan da kullanılabilir:

    SampleDb'yi KULLANIN; -- "Danışman" döndürür. "%K" GİBİ İş SAHİBİ OLARAK GRUBA GÖRE Works_on'dan İş SEÇİN;

    Bu örnek, Works_on tablosundaki satırları konuma göre gruplandırır ve "K" harfiyle başlamayan konumları eler.

    HAVING yan tümcesi, GROUP BY yan tümcesi olmadan da kullanılabilir, ancak bu yaygın bir uygulama değildir. Bu durumda, tüm tablo satırları aynı grupta döndürülür.

    teklife göre SİPARİŞ

    Teklif TARAFINDAN SİPARİŞ sorgu tarafından döndürülen sonuç kümesindeki satırların sıralama düzenini tanımlar. Bu cümle aşağıdaki sözdizimine sahiptir:

    Sıralama düzeni col_name parametresinde belirtilir. col_number parametresi, sütunları SELECT deyiminin seçim listesinde göründükleri sırayla tanımlayan alternatif bir sıralama düzeni belirticidir (1, birinci sütun, 2, ikinci sütun vb.). ASC parametresi sıralamayı artan düzende tanımlar ve DESC parametresi- Azalan. Varsayılan ASC'dir.

    ORDER BY yan tümcesindeki sütun adlarının sütun seçme listesinde olması gerekmez. Ancak bu, SELECT DISTINCT sorguları için geçerli değildir, çünkü bu tür sorgularda ORDER BY yan tümcesinde belirtilen sütun adlarının da sütun seçme listesinde belirtilmesi gerekir. Ayrıca bu yan tümce, FROM yan tümcesinde listelenmeyen tablolardan sütun adları içeremez.

    ORDER BY yan tümcesinin sözdiziminden de görebileceğiniz gibi, sonuç kümesi birden çok sütunda sıralanabilir. Bu sıralama aşağıdaki örnekte gösterilmiştir:

    Bu örnek, personel sayısı 20.000'den az olan çalışanlar için departman numaralarını ve çalışan soyadlarını ve adlarını seçer ve soyadı ve adına göre sıralar. Bu sorgunun sonucu:

    ORDER BY yan tümcesindeki sütunlar, adlarına göre değil, seçim listesindeki sıraya göre belirtilebilir. Buna göre yukarıdaki örnekteki cümle şu şekilde yeniden yazılabilir:

    Çok alternatif yol sıralama ölçütü bir toplama işlevi içeriyorsa, adlar yerine sütunların konumlarına göre belirtilmesi kullanılır. (Başka bir yol da, daha sonra ORDER BY deyiminde görünen sütun adlarını kullanmaktır.) Ancak, ORDER BY deyiminde, sorguyu güncellemeyi kolaylaştırmak için sütunların sayılarla değil adlarıyla belirtilmesi önerilir. sütunların seçim listesine eklenmesi veya listeden çıkarılması gerekiyorsa. ORDER BY yan tümcesindeki sütunların numaralarına göre belirtilmesi aşağıdaki örnekte gösterilmiştir:

    SampleDb'yi KULLANIN; Works_on GRUBU'NDAN ProjeNumarasına Göre ProjeNumarası, COUNT(*) "Çalışan sayısı" SEÇİN SİPARİŞ 2 TANIMLA;

    Burada, her proje için, proje numarası ve projeye katılan çalışan sayısı seçilir, sonuç çalışan sayısına göre azalan sırada sıralanır.

    Transact-SQL artan sıralamada listenin başına, azalan sıralamada ise listenin sonuna NULL değerleri koyar.

    Sonuçları Sayfalandırmak İçin ORDER BY Maddesini Kullanma

    Geçerli sayfada sorgu sonuçlarının görüntülenmesi şu şekilde uygulanabilir: kullanıcı uygulaması veya veritabanı sunucusuna bunu yapması talimatını verin. İlk durumda, tüm veritabanı satırları, görevi gerekli satırları seçmek ve görüntülemek olan uygulamaya gönderilir. İkinci durumda, sunucu tarafından yalnızca geçerli sayfa için gerekli satırlar seçilir ve görüntülenir. Tahmin edebileceğiniz gibi, sunucu tarafı disk belleği genellikle şunları sağlar: daha iyi performans, Çünkü istemciye yalnızca görüntüleme için gerekli satırlar gönderilir.

    Sunucu tarafı sayfa oluşturmayı desteklemek için SQL Server 2012, iki yeni SELECT deyimi yan tümcesi sunar: OFFSET ve FETCH. Bu iki cümlenin uygulaması aşağıdaki örnekte gösterilmiştir. Burada, AdventureWorks2012 veri tabanından (kaynaklarda bulabilirsiniz), tüm kadın çalışanların işletme kimliği, iş unvanı ve doğum günü alınır ve sonuç, iş unvanına göre artan düzende sıralanır. Ortaya çıkan satır grubu 10 satırlık sayfalara bölünür ve üçüncü sayfa görüntülenir:

    Bir cümlede TELAFİ ETMEK görüntülenen sonuçta atlanacak sonuç satırlarının sayısını belirtir. Bu sayı, satırlar ORDER BY yan tümcesine göre sıralandıktan sonra hesaplanır. Bir cümlede SONRAKİ GETİR eşleşen WHERE sayısını ve döndürülecek sıralanmış satırları belirtir. Bu yan tümcenin parametresi bir sabit, bir ifade veya başka bir sorgunun sonucu olabilir. FETCH NEXT yan tümcesi, yan tümceye benzer İLK GETİR.

    Sunucu tarafında sayfa oluştururken ana amaç, değişkenleri kullanarak ortak sayfa formlarını uygulayabilmektir. Bu görevi SQL Server paketi aracılığıyla gerçekleştirebilirsiniz.

    SELECT deyimi ve KİMLİK özelliği

    KİMLİK özelliği belirli bir tablo sütunu için değerleri otomatik olarak artan bir sayaç olarak tanımlamanıza olanak tanır. TINYINT, SMALLINT, INT ve BIGINT gibi sayısal veri türü sütunları bu özelliğe sahip olabilir. Böyle bir tablo sütunu için Veritabanı Motoru, belirtilen başlangıç ​​değerinden başlayarak otomatik olarak sıralı değerler üretir. Böylece IDENTITY özelliği kullanılarak seçilen sütun için tek haneli sayısal değerler üretilebilir.

    Bir tablo, IDENTITY özelliğine sahip yalnızca bir sütun içerebilir. Tablonun sahibi, aşağıdaki örnekte gösterildiği gibi başlangıç ​​değerini ve artışını belirleme olanağına sahiptir:

    SampleDb'yi KULLANIN; TABLO OLUŞTUR Ürün (Id INT IDENTITY(10000, 1) NOT NULL, Name NVARCHAR(30) NOT NULL, Price MONEY) INSERT INTO Product(Ad, Price) VALUES ("Item1", 10), ("Item2", 15) , ("Öğe3", 8), ("Öğe4", 15), ("Öğe5", 40); -- 10004 döndürür WHERE Üründen KİMLİĞİ SEÇİN Ad = "Ürün5"; -- Önceki ifadeye benzer şekilde SELECT $identity FROM Product WHERE Ad = "Product5";

    Bu örnek, önce IDENTITY özelliğine sahip bir Id sütunu içeren bir Ürün tablosu oluşturur. Id sütunundaki değerler sistem tarafından otomatik olarak 10.000'den başlayarak ve sonraki her değer için bir artarak oluşturulur: 10.000, 10.001, 10.002 vb.

    Çeşitli sistem işlevleri ve değişkenleri, IDENTITY özelliğiyle ilişkilidir. Örneğin, örnek kod kullanır $kimlik sistem değişkeni. Bu kodun çıktısından da görebileceğiniz gibi, bu değişken otomatik olarak IDENTITY özelliğine başvuruyor. Bunun yerine sistem işlevini de kullanabilirsiniz. KİMLİKCOL.

    IDENTITY özelliğine sahip bir sütunun başlangıç ​​değeri ve artışı, işlevler kullanılarak bulunabilir. IDENT_SEED Ve IDENT_INCR sırasıyla. Bu işlevler aşağıdaki gibi uygulanır:

    SampleDb'yi KULLANIN; IDENT_SEED("Ürün"), IDENT_INCR("Ürün") SEÇİN

    Daha önce de belirtildiği gibi, KİMLİK değerleri sistem tarafından otomatik olarak ayarlanır. Ancak kullanıcı, parametreyi ayarlayarak belirli satırlar için kendi değerlerini açıkça belirtebilir. KİMLİK_GİRİN Açık bir değer eklemeden önce AÇIK:

    KİMLİK INSERT tablo adını AÇIK AYARLA

    IDENTITY_INSERT seçeneği, yinelenen bir değer de dahil olmak üzere bir IDENTITY özellik sütunu için herhangi bir değer ayarlamak üzere kullanılabildiğinden, IDENTITY özelliği genellikle sütun değerlerinin benzersizliğini zorlamaz. Bu nedenle, sütun değerlerinin benzersizliğini zorlamak için UNIQUE veya PRIMARY KEY kısıtlamaları kullanılmalıdır.

    IDENTITY_INSERT açık olarak ayarlandıktan sonra bir tabloya değerler girildiğinde, sistem o sütunun mevcut en büyük değerini artırarak bir sonraki IDENTITY sütun değerini oluşturur.

    SIRASI OLUŞTUR deyimi

    KİMLİK özelliğinin kullanılması, en önemlileri aşağıdakiler olan birkaç önemli dezavantaja sahiptir:

      özellik uygulaması belirtilen tablo ile sınırlıdır;

      sütunun yeni değeri, onu uygulamaktan başka bir yolla elde edilemez;

      KİMLİK özelliği yalnızca bir sütun oluşturulurken belirtilebilir.

    Bu nedenlerden dolayı, SQL Server 2012, IDENTITY özelliğiyle aynı semantiğe sahip, ancak daha önce listelenen dezavantajlar olmadan diziler sunar. Bu bağlamda sıra, sütunlar ve değişkenler gibi çeşitli veritabanı nesneleri için sayaç değerleri belirtmenize olanak sağlayan bir veritabanı işlevidir.

    Diziler talimat kullanılarak oluşturulur DİZİ OLUŞTUR. CREATE SEQUENCE deyimi, SQL standardında tanımlanmıştır ve IBM DB2 ve Oracle gibi diğer ilişkisel veritabanı sistemleri tarafından desteklenir.

    Aşağıdaki örnek, SQL Server'da bir sıranın nasıl oluşturulacağını gösterir:

    SampleDb'yi KULLANIN; DİZİ OLUŞTUR dbo.Sequence1 AS INT 1 ARTIRMA İLE 5 MIN DEĞER 1 MAKS DEĞER 256 DÖNGÜ;

    Yukarıdaki örnekte, Sıra1'in değerleri sistem tarafından otomatik olarak, 1 değerinden başlayarak sonraki her değer için 5'lik artışlarla oluşturulur. Böylece, içinde teklif BAŞLAT başlangıç ​​değeri belirtilir ve ARTTIRMA teklifi- adım. (Adım pozitif veya negatif olabilir.)

    Sonraki iki isteğe bağlı cümlede MİNDEĞER Ve MAKSİMUM DEĞER minimum ve maksimum değer sıra nesnesi. (MİNDEĞER değerinin başlangıç ​​değerinden küçük veya ona eşit olması gerektiğini ve MAKSDEĞER değerinin sıra için belirtilen veri tipinin üst sınırından büyük olamayacağına dikkat edin.) Yan tümcede DÖNGÜ maksimum (veya negatif adımlı bir dizi için minimum) değeri aşıldığında dizinin baştan tekrarlandığını gösterir. Varsayılan olarak, bu yan tümce NO CYCLE'dir; bu, maksimum veya minimum sıra değerinin aşılmasının bir istisnaya neden olduğu anlamına gelir.

    Dizilerin ana özelliği, tablolardan bağımsız olmalarıdır, yani. tablo sütunları veya değişkenler gibi herhangi bir veritabanı nesnesiyle kullanılabilirler. (Bu özelliğin depolama ve dolayısıyla performans üzerinde olumlu bir etkisi vardır. Belirli bir dizinin saklanması gerekmez; yalnızca son değeri saklanır.)

    ile yeni dizi değerleri oluşturulur. İfadeler İÇİN SONRAKİ DEĞER, kullanımı aşağıdaki örnekte gösterilmiştir:

    SampleDb'yi KULLANIN; -- 1 döndürür dbo.sequence1 İÇİN SONRAKİ DEĞERİ SEÇİN; -- 6 döndürür (sonraki adım) dbo.sequence1 İÇİN SONRAKİ DEĞERİ SEÇİN;

    Bir dizinin sonucunu bir değişkene veya sütun hücresine atamak için NEXT VALUE FOR ifadesini kullanabilirsiniz. Aşağıdaki örnek, sonuçları bir sütuna atamak için bu ifadenin kullanımını göstermektedir:

    SampleDb'yi KULLANIN; TABLO OLUŞTUR Ürün (Id INT NOT NULL, Name NVARCHAR(30) NOT NULL, Price MONEY) INSERT INTO Product VALUES (dbo.sequence1 İÇİN SONRAKİ DEĞER, "Ürün1", 10); Ürün DEĞERLERİNE EKLEYİN (dbo.sequence1, "Ürün2", 15 İÇİN SONRAKİ DEĞER); -- ...

    Yukarıdaki örnek, önce dört sütunlu bir Ürün tablosu oluşturur. Ardından, iki INSERT ifadesi bu tabloya iki satır ekler. İlk sütundaki ilk iki hücre 11 ve 16 değerlerine sahip olacaktır.

    Aşağıdaki örnek, katalog görünümünün kullanımını göstermektedir. sistem dizileri bir dizinin geçerli değerini kullanmadan görüntülemek için:

    Tipik olarak NEXT VALUE FOR ifadesi, sistemi oluşturulan değerleri eklemeye zorlamak için bir INSERT deyiminde kullanılır. Bu ifade, OVER yan tümcesi kullanılarak çok satırlı bir sorgunun parçası olarak da kullanılabilir.

    Mevcut bir dizinin bir özelliğini değiştirmek için şunu kullanın: ALTER SIRASI deyimi. En iyilerinden biri önemli uygulamalar Bu ifade, belirtilen sırayı sıfırlayan RESTART WITH seçeneğiyle ilişkilidir. Aşağıdaki örnek, Sequence1'in hemen hemen tüm özelliklerini sıfırlamak için ALTER Sequence deyiminin kullanımını göstermektedir:

    SampleDb'yi KULLANIN; ALTER SEQUENCE dbo.sequence1 100 ARTIRMA İLE 50 MİN DEĞER 50 MAKS DEĞER 200 DÖNGÜ YOK;

    Talimatı kullanarak bir diziyi silin DÜŞME SIRASI.

    Operatörleri Ayarla

    Daha önce tartışılan işleçlere ek olarak, Transact-SQL üç küme işlecini daha destekler: UNION, INTERSECT ve EXCEPT.

    BİRLİK operatörü

    BİRLİK operatörü iki veya daha fazla sorgunun sonuçlarını birleştirmedeki tüm sorgulara ait tüm satırları içeren tek bir sonuç kümesinde birleştirir. Buna göre, iki tablonun birleştirilmesinin sonucu, orijinal tablolardan birinde veya bu tabloların her ikisinde yer alan tüm satırları içeren yeni bir tablodur.

    UNION operatörünün genel formu şöyle görünür:

    seç_1 BİRLİK seç_2(seç_3])...

    select_1, select_2, ... seçenekleri, bir birleşim oluşturan SELECT deyimleridir. ALL seçeneği kullanılırsa, yinelenenler dahil tüm satırlar görüntülenir. UNION operatöründe ALL parametresi, SELECT seçim listesindekiyle aynı anlama sahiptir, bir farkla: SELECT seçim listesi için bu parametre varsayılan olarak uygulanır, ancak UNION operatörü için açıkça belirtilmesi gerekir.

    Orijinal haliyle SampleDb veritabanı, UNION operatörünün kullanımını göstermek için uygun değildir. Bu nedenle, bu bölüm, mevcut Çalışan tablosuyla aynı olan ancak ek bir Şehir sütunu olan yeni bir ÇalışanEnh tablosu oluşturur. Bu sütun, çalışanların nerede yaşadığını gösterir.

    ÇalışanEnh tablosunu oluşturmak bize yan tümcenin kullanımını gösterme fırsatı sağlar. İÇİNE SELECT ifadesinde. SELECT INTO deyimi iki işlem gerçekleştirir. İlk olarak, SELECT seçim listesinde listelenen sütunlarla yeni bir tablo oluşturulur. Ardından, orijinal tablonun satırları yeni tabloya eklenir. Yeni tablonun adı INTO yan tümcesinde, kaynak tablonun adı ise FROM yan tümcesinde belirtilir.

    Aşağıdaki örnek, Çalışan tablosundan ÇalışanEnh tablosunun oluşturulmasını göstermektedir:

    SampleDb'yi KULLANIN; Çalışan'dan ÇalışanEnh'e * SEÇİN; ALTER TABLE ÇalışanEnh EKLE Şehir NCHAR(40) NULL;

    Bu örnekte, SELECT INTO deyimi, ÇalışanEnh tablosunu oluşturur, Çalışan tablosundaki tüm satırları tabloya ekler ve ardından ALTER TABLE deyimi, Şehir sütununu yeni tabloya ekler. Ancak eklenen Şehir sütunu herhangi bir değer içermiyor. Bu sütundaki değerler, Management Studio aracılığıyla veya aşağıdaki kod kullanılarak eklenebilir:

    SampleDb'yi KULLANIN; GÜNCELLEME ÇalışanEnh SET City="Kazan" WHERE Id=2581; GÜNCELLEME ÇalışanEnh SET Şehir = "Moskova" WHERE Id = 9031; GÜNCELLEME ÇalışanEnh SET Şehir = "Yekaterinburg" WHERE Id = 10102; GÜNCELLEME ÇalışanEnh SET Şehir = "Saint Petersburg" WHERE Id = 18316; GÜNCELLEME ÇalışanEnh SET Şehir = "Krasnodar" WHERE Id = 25348; GÜNCELLEME ÇalışanEnh SET City="Kazan" WHERE Id=28559; GÜNCELLEME ÇalışanEnh SET City="Perm" WHERE Id=29346;

    Artık UNION ifadesinin kullanımını göstermeye hazırız. Aşağıdaki örnekte, bu ifadeyi kullanarak EmployeeEnh ve Department tabloları arasında bir birleştirme oluşturmak için bir sorgu gösterilmektedir:

    SampleDb'yi KULLANIN; ÇalışanEnh BİRLİĞİNDEN "Şehir" OLARAK İl SEÇİN Departmandan Yer SEÇİN;

    Bu sorgunun sonucu:

    UNION deyimi kullanılarak yalnızca uyumlu tablolar birleştirilebilir. Uyumlu tablolar derken, seçimdeki her iki sütun listesinin de aynı sayıda sütun içermesi ve karşılık gelen sütunların uyumlu veri türlerine sahip olması gerektiğini kastediyoruz. (Uyumluluk açısından INT ve SMALLINT veri türleri uyumlu değildir.)

    Bir birleştirmenin sonucu yalnızca ORDER BY yan tümcesi kullanılarak sıralanabilir. son talimat Aşağıdaki örnekte gösterildiği gibi SEÇİN. GROUP BY ve HAVING yan tümceleri bireysel SELECT deyimleriyle kullanılabilir, ancak birleştirmenin kendisinde kullanılamaz.

    Bu örnekteki sorgu, d1 departmanında çalışan veya 1 Ocak 2008'den önce proje üzerinde çalışmaya başlayan çalışanları getirir.

    UNION işleci ALL seçeneğini destekler. Bu seçenek kullanıldığında, kopyalar sonuç kümesinden kaldırılmaz. Bir veya daha fazla UNION işleci tarafından birleştirilen tüm SELECT deyimleri aynı tabloya başvuruyorsa, UNION işleci yerine OR işlecini kullanabilirsiniz. Bu durumda, SELECT ifadeleri kümesi bir tane ile değiştirilir. deyimi SEÇ OR operatörleri kümesi ile.

    INTERSECT ve EXCEPT ifadeleri

    Kümelerle çalışmak için diğer iki operatör, KESİŞTİRME Ve HARİÇ, sırasıyla kesişimi ve farkı tanımlayın. Bu bağlamda kesişme noktasının altında her iki tabloya ait satırlar kümesi bulunur. Ve iki tablonun farkı, birinci tabloya ait olan ve ikincide olmayan tüm değerler olarak tanımlanır. Aşağıdaki örnek, INTERSECT deyiminin kullanımını göstermektedir:

    Transact-SQL, ALL seçeneğinin INTERSECT deyimi veya EXCEPT deyimi ile kullanımını desteklemez. EXCEPT deyiminin kullanımı aşağıdaki örnekte gösterilmiştir:

    Bu üç operatör kümesinin farklı yürütme önceliğine sahip olduğunu unutmayın: INTERSECT operatörü en yüksek önceliğe sahiptir, ardından EXCEPT operatörü gelir ve UNION operatörü en düşük önceliğe sahiptir. Çoklu kullanırken yürütme önceliğine dikkat edilmemesi farklı operatörler setlerle çalışmak beklenmeyen sonuçlara yol açabilir.

    CASE ifadeleri

    Veritabanı uygulama programlama alanında, bazen verilerin sunumunu değiştirmek gerekir. Örneğin, insanlar sırasıyla erkekleri, kadınları ve çocukları ifade eden 1, 2 ve 3 değerleri kullanılarak sosyal ilişkilerine göre kodlanarak alt gruplara ayrılabilir. Bu programlama tekniği, programı uygulamak için gereken süreyi azaltabilir. CASE ifadesi Transact-SQL dili, bu tür kodlamayı uygulamayı kolaylaştırır.

    Çoğu programlama dilinden farklı olarak, CASE bir ifade değil, bir ifadedir. Bu nedenle, bir CASE ifadesi, Transact-SQL dilinin ifadelerin kullanımına izin verdiği hemen hemen her yerde kullanılabilir. CASE ifadesinin iki biçimi vardır:

      basit bir CASE ifadesi;

      arama ifadesi CASE.

    Basit bir CASE ifadesinin sözdizimi aşağıdaki gibidir:

    Basit bir CASE ifadesine sahip bir ifade, önce içindeki tüm ifadelerin listesini arar. WHEN yan tümcesi ifade_1 ile eşleşen ve ardından karşılık gelen ifadeyi çalıştıran ilk ifade THEN cümlesi. WHEN listesinde eşleşen bir ifade yoksa, o zaman BAŞKA yan tümce.

    Bir CASE arama ifadesinin sözdizimi şöyledir:

    İÇİNDE bu durum ilk eşleşen koşul aranır ve ardından karşılık gelen THEN yan tümcesi yürütülür. Koşullardan hiçbiri gereksinimlerle eşleşmezse, ELSE yan tümcesi yürütülür. CASE arama ifadesinin kullanımı aşağıdaki örnekte gösterilmiştir:

    SampleDb'yi KULLANIN; ProjeAdı, Bütçe > 0 VE Bütçe 100000 VE Bütçe 150000 VE Bütçe OLDUĞUNDA VAKA SEÇİN

    Bu sorgunun sonucu:

    Bu örnek, tüm projelerin bütçelerini ağırlıklandırır ve hesaplanan ağırlıklarını ilgili proje adlarıyla birlikte görüntüler.

    Aşağıdaki örnek, CASE ifadesini kullanmanın başka bir yolunu gösterir; burada WHEN yan tümcesi, ifadenin parçası olan alt sorguları içerir:

    SampleDb'yi KULLANIN; ProjeAdı SEÇİN, CASE WHEN p1.Budget (Proje p2'DEN ORTALAMA(p2.Bütçe) SEÇİN) SONRA Proje p1'DEN "Ortalamanın Üstünde" SON "Bütçe Kategorisi"ni SONLANDIRIN;

    Bu sorgunun sonucu aşağıdaki gibidir:

    Özetlemeyi öğrenelim. Hayır, bunlar SQL öğrenmenin sonuçları değil, veritabanı tablolarının sütunlarının değerlerinin sonuçlarıdır. agrega SQL işlevleri tek bir sonuç değeri üretmek için bir sütunun değerleri üzerinde işlem yapın. En sık kullanılan SQL toplama işlevleri SUM, MIN, MAX, AVG ve COUNT'tur. Toplama işlevlerinin kullanılması gereken iki durum vardır. İlk olarak, toplama işlevleri kendi başlarına kullanılır ve tek bir sonuç değeri döndürür. İkinci olarak, toplama işlevleri SQL GROUP BY yan tümcesiyle, yani her grupta ortaya çıkan değerleri elde etmek için alanlara (sütunlara) göre gruplama ile kullanılır. İlk olarak, gruplama olmadan toplama işlevlerinin kullanıldığı durumları ele alalım.

    SQL TOPLA işlevi

    SQL TOPLA işlevi, bir veritabanı tablosundaki bir sütunun değerlerinin toplamını döndürür. Yalnızca değerleri sayı olan sütunlara uygulanabilir. Ortaya çıkan toplamı almak için SQL sorguları şöyle başlar:

    TOPLAM(SÜTUN ADI) SEÇ ...

    Bu ifadeyi FROM (TABLE_NAME) takip eder ve ardından WHERE yan tümcesi kullanılarak bir koşul belirtilebilir. Ek olarak, yalnızca benzersiz değerlerin dikkate alınacağını belirtmek için bir sütun adının önüne DISTINCT eklenebilir. Varsayılan olarak, tüm değerler dikkate alınır (bunun için özellikle DISTINCT'i değil, ALL'yi belirtebilirsiniz, ancak ALL kelimesi isteğe bağlıdır).

    örnek 1Şirketin departmanları ve çalışanları hakkında veri içeren bir veritabanı var. Personel tablosunda ayrıca çalışan maaş verilerini içeren bir sütun bulunur. Tablodan seçim şu şekildedir (resmi büyütmek için farenin sol tuşuyla üzerine tıklayın):

    Tüm maaşların toplamını almak için aşağıdaki sorguyu kullanın:

    Personelden SUM(Maaş) SEÇİN

    Bu sorgu 287664.63 değerini döndürür.

    Ve şimdi . Alıştırmalarda, görevleri pratikte karşılaşılanlara yaklaştırarak zaten karmaşıklaştırmaya başlıyoruz.

    SQL MIN işlevi

    SQL MIN işlevi, değerleri sayı olan sütunlarda da çalışır ve sütundaki tüm değerlerin minimumunu döndürür. Bu işlev, SUM işlevine benzer bir sözdizimine sahiptir.

    Örnek 3 Veritabanı ve tablo örnek 1'deki ile aynıdır.

    42 numaralı departman çalışanları için asgari ücretin bulunması gerekmektedir. Bunun için aşağıdaki sorguyu yazınız:

    Sorgu, 10505.90 değerini döndürür.

    Ve yeniden için egzersiz bağımsız çözüm . Bu ve diğer bazı alıştırmalarda, yalnızca Personel tablosuna değil, aynı zamanda şirketin bölümleriyle ilgili verileri içeren Kuruluş tablosuna da ihtiyacınız olacak:


    Örnek 4 Kuruluş tablosu, şirketin bölümleriyle ilgili verileri içeren Personel tablosuna eklenir. Tek bir çalışanın Boston'da bulunan bir departmanda çalıştığı minimum yıl sayısını çıkarın.

    SQL MAX işlevi

    SQL MAX işlevi benzer şekilde çalışır ve benzer bir sözdizimine sahiptir, bu da bir sütunun tüm değerleri arasında maksimum değeri belirlemek istediğinizde kullanılır.

    Örnek 5

    42 numaralı departman çalışanlarının azami maaşını bulmanız gerekiyor. Bunu yapmak için aşağıdaki sorguyu yazın:

    Sorgu, 18352.80 değerini döndürür.

    Zamanı geldi kendi kaderini tayin için egzersizler.

    Örnek 6 Yine iki tablo ile çalışıyoruz - Personel ve Org. Departmanın adını ve Doğu departmanları grubuna (Bölüm) ait departmanda bir çalışan tarafından alınan maksimum komisyon miktarını görüntüleyin. Kullanmak JOIN (tabloları birleştirme) .

    SQL AVG işlevi

    Daha önce açıklanan işlevlerin sözdizimi hakkında söylenenler, SQL AVG işlevi için de geçerlidir. Bu işlev, bir sütundaki tüm değerlerin ortalamasını döndürür.

    Örnek 7 Veritabanı ve tablo önceki örneklerdeki ile aynıdır.

    42 numaralı departman çalışanlarının ortalama hizmet sürelerini bulmamız istensin. Bunu yapmak için aşağıdaki sorguyu yazıyoruz:

    Sonuç 6.33 olacak

    Örnek 8 Tek masa ile çalışıyoruz - Personel. 4 ila 6 yıl arası deneyime sahip çalışanların ortalama maaşını görüntüleyin.

    SQL SAYI işlevi

    SQL COUNT işlevi, bir veritabanı tablosundaki kayıt sayısını döndürür. Sorguda SELECT COUNT(COLUMNAME) ... belirtirseniz, sonuç, sütun değerinin NULL (tanımsız) olduğu kayıtları hesaba katmadan kayıt sayısı olacaktır. Bağımsız değişken olarak bir yıldız işareti kullanır ve bir SELECT COUNT(*) ... sorgusu başlatırsanız, sonuç tablodaki tüm kayıtların (satırların) sayısı olacaktır.

    Örnek 9 Veritabanı ve tablo önceki örneklerdeki ile aynıdır.

    Komisyon alan tüm çalışanların sayısını bilmek istiyorsunuz. Comm sütun değerleri NULL olmayan çalışan sayısı aşağıdaki sorguyu döndürür:

    Personelden COUNT(Comm) SEÇİN

    Sonuç 11 değeri olacaktır.

    Örnek 10 Veritabanı ve tablo önceki örneklerdeki ile aynıdır.

    Tablodaki toplam kayıt sayısını öğrenmek istiyorsanız, COUNT işlevinin bağımsız değişkeni olarak yıldız işaretli sorguyu kullanın:

    Personelden COUNT(*) SEÇİN

    Sonuç değeri 17 olacaktır.

    Sonraki kendi kaderini tayin için egzersiz bir alt sorgu kullanmanız gerekir.

    Örnek 11. Tek masa ile çalışıyoruz - Personel. Plains departmanındaki çalışan sayısını görüntüleyin.

    İşlevleri SQL GROUP BY ile Toplayın

    Şimdi SQL GROUP BY yan tümcesiyle birlikte toplama işlevlerinin kullanımına bakalım. SQL GROUP BY deyimi, bir veritabanı tablosunda ortaya çıkan değerleri sütunlara göre gruplandırmak için kullanılır.

    Örnek 12. Bir veritabanı portalı reklamları var. Hafta boyunca gönderilen reklamlarla ilgili verileri içeren bir Reklamlar tablosuna sahiptir. Kategori sütunu, büyük reklam kategorileri (örneğin, Emlak) hakkında veriler içerir ve Parçalar sütunu, kategorilere dahil edilen daha küçük parçalar hakkında veriler içerir (örneğin, Daireler ve Villalar bölümleri, Emlak kategorisinin parçalarıdır). Birimler sütunu, gönderilen reklam sayısına ilişkin verileri içerir ve Para sütunu, reklamları göndermek için kazanılan para miktarını içerir.

    KategoriparçaBirimlerPara
    UlaşımMotorlu Taşıtlar110 17600
    EmlakDaireler89 18690
    Emlakyazlıklar57 11970
    Ulaşımmotosikletler131 20960
    Yapı malzemeleriPanolar68 7140
    elektrik Mühendisliğitelevizyonlar127 8255
    elektrik Mühendisliğibuzdolapları137 8905
    Yapı malzemeleriKayıtlar112 11760
    Boş vakitKitabın96 6240
    EmlakEvde47 9870
    Boş vakitMüzik117 7605
    Boş vakitOyunlar41 2665

    SQL GROUP BY yan tümcesini kullanarak, her kategoride reklam göndererek elde edilen para miktarını bulun. Aşağıdaki talebi yazıyoruz.

    Ders, AS hizmet sözcüğünü kullanarak bir sütunu (alanları) yeniden adlandırma sql konusunu kapsayacaktır; sql'deki toplama fonksiyonları konusu da ele alınmaktadır. demonte edilecek somut örnekler istekler

    Sorgulardaki sütun adları yeniden adlandırılabilir. Bu, sonuçları daha okunaklı hale getirir.

    İÇİNDE SQL dili alanları yeniden adlandırmak kullanımla ilgilidir AS anahtar kelimesi sonuç kümelerindeki alan adlarını yeniden adlandırmak için kullanılır

    Sözdizimi:

    SEÇME<имя поля>GİBİ<псевдоним>İTİBAREN …

    SQL'de yeniden adlandırmanın bir örneğini ele alalım:

    "Enstitü" veritabanına bir örnek:Öğretmenlerin adlarını ve maaşlarını görüntüleyin, maaşı 15000'in altında olan öğretmenler için zarplata alanını olarak yeniden adlandırın. "Düşük ücret"


    ✍ Çözüm:

    SQL'de sütunları yeniden adlandırmak genellikle gereklidir birden çok alanla ilişkili değerleri hesaplarken tablolar. Bir örnek düşünün:

    "Enstitü" veritabanına bir örnek:Öğretmenler tablosundan ad alanını görüntüleyin ve alana ad vererek maaş ve ikramiye toplamını hesaplayın "maaş_ikramiyesi"


    ✍ Çözüm:
    1 2 Öğretmenlerden zarplata_premia OLARAK adı, (zarplata+ premia) SEÇİN;

    Öğretmenlerden zarplata_premia olarak adı, (zarplata+premia) SEÇİN;

    Sonuç:

    SQL'de toplu işlevler

    Sql'deki toplama işlevleri, toplam değerleri almak ve ifadeleri değerlendirmek için kullanılır:

    Tüm toplama işlevleri tek bir değer döndürür.

    COUNT , MIN ve MAX işlevleri tüm veri türleri için geçerlidir.

    TOPLA ve AVG işlevleri yalnızca sayısal alanlar için kullanılır.
    COUNT(*) ve COUNT() işlevleri arasında bir fark vardır: ikincisi hesaplama yaparken NULL değerleri dikkate almaz.

    Önemli: SQL'de toplama işlevleriyle çalışırken bir işlev sözcüğü kullanılır GİBİ


    "Enstitü" veritabanına bir örnek:Öğretmenler arasında en yüksek maaşın değerini alın, toplamı şu şekilde görüntüleyin: "max_zp"


    ✍ Çözüm:
    Öğretmenlerden MAX (zarplata) max_zp OLARAK SEÇİN;

    Öğretmenlerden max_sal olarak MAX(zarplata) SEÇİN;

    Sonuçlar:

    Daha fazlasını düşünün karmaşık örnek sql'de toplama işlevlerini kullanma.


    ✍ Çözüm:

    SQL'de GROUP BY deyimi

    Sql'deki group by deyimi genellikle toplama işlevleriyle birlikte kullanılır.

    Toplama işlevleri, ortaya çıkan tüm sorgu dizelerinde yürütülür. Sorgu bir GROUP BY deyimi içeriyorsa, GROUP BY deyiminde belirtilen her satır grubu bir grup oluşturur ve toplama işlevleri yürütülür her grup için ayrı ayrı.

    Ders tablosu ile bir örnek düşünün:

    Örnek:

    Önemli: Böylece, GROUP BY kullanımının bir sonucu olarak, sorgunun tüm çıktı satırları, bu sütunlarda aynı değer kombinasyonları ile karakterize edilen gruplara bölünür (yani, toplama işlevleri her grup için ayrı ayrı gerçekleştirilir).

    Aynı zamanda, NULL değerleri içeren bir alana göre gruplandırırken, bu tür tüm kayıtların tek bir gruba gireceği dikkate alınmalıdır.

    İçin çeşitli tipler ortalama maliyeti ve miktarını belirlemek için yazıcılar (yani lazer, mürekkep püskürtmeli ve nokta vuruşlu için ayrı ayrı). Toplama işlevlerini kullanın. Sonuç şöyle görünmelidir:

    SQL deyimine sahip olmak

    Değerleri kontrol etmek için SQL'deki HAVING yan tümcesi gereklidir, gruplandırmadan sonra toplama işlevi kullanılarak elde edilen(GROUP BY kullandıktan sonra). böyle bir çek WHERE deyiminde yer alamaz.

    Örnek: DB Bilgisayar Mağazası. Aynı işlemci hızına sahip bilgisayarların ortalama fiyatını hesaplayın. Hesaplamayı yalnızca ortalama fiyatı 30.000'den az olan gruplar için çalıştırın.

    Alan değerlerinin genelleştirilmiş grup işlemlerini gerçekleştirebilirler. Bu, toplama işlevleri kullanılarak yapılır. Toplama işlevleri tüm tablo grubu için tek bir değer üretir. SQL aşağıdaki toplama işlevlerini sağlar:

    • SAYMAK– argüman olarak belirtilen alanın NULL olmayan değerlerine sahip tablo satırlarının sayısını sayar.
    • TOPLAM– verilen alanın seçilen tüm değerlerinin aritmetik toplamını hesaplar.
    • ortalama– verilen alanın tüm seçili değerlerinin ortalamasını alır.
    • MAKS.- Verilen alanın tüm seçili değerlerinin en büyük değerini görüntüler.
    • DAK– Verilen alanda seçilen tüm değerlerin en küçük değerini görüntüler.

      Toplama işlevlerini kullanma

      Toplama işlevleri, bir sorgunun SELECT yan tümcesindeki alan adları gibi kullanılır, bir istisna dışında: alan adlarını bağımsız değişken olarak alırlar. ile yalnızca sayısal alanlar kullanılabilir. TOPLAM Ve ortalama. İLE SAYMAK, MAKS., Ve DAK hem sayısal hem de karakter alanları kullanılabilir. Karakter alanlarıyla birlikte kullanıldığında MAKS. Ve DAK bunları ASCII eşdeğerlerine çevirecektir. Bu demektir DAK ilkini seçecek ve MAKS. alfabetik sırayla son değer.

      Satış tablosundaki toplam satış miktarını bulmak için aşağıdaki sorguyu yazmamız gerekir:

      Satışlardan SUM(SSum) SEÇİN

      Sonuç olarak, şunu elde ederiz:

      Bu sorgu, Sells tablosunun SNum alanındaki boş olmayan değerlerin sayısını saymıştır. Sorguyu şu şekilde yeniden yazarsak:

      Satışlardan COUNT(SDate) SEÇİN

      Sonra sonuç olarak şunu elde ederiz:

      Tarih SAYISI
      4

      SDate alanındaki değerlerden biri boş bir değere sahip olduğu için ( görünüşte aynı şeyi hesaplarken farklı sorgu sonuçları elde ediliyor. HÜKÜMSÜZ). Bu tür istekleri kullanırken dikkatli olun.

    Toplama işlevlerini kullanma

    SQL, çeşitli kategorilerdeki birçok yerleşik işlevi tanımlar; bunların arasında, birden çok satırın sütunlarının değerleri üzerinde çalışan ve tek bir değer döndüren toplama işlevleri tarafından özel bir yer işgal edilir. Toplama fonksiyonlarının argümanları hem tabloların sütunları hem de bunların üzerindeki ifadelerin sonuçları olabilir. Toplama işlevleri, diğer aritmetik ifadelere dahil edilebilir. Aşağıdaki tablo, en sık kullanılan standart tekli toplama işlevlerini listeler.


    Tekli toplama işlevinin genel biçimi aşağıdaki gibidir:

    işlev_adı([ALL | DISTINCT] ifadesi)

    DISTINCT, işlevin bağımsız değişkenin yalnızca farklı değerlerini dikkate alması gerektiğini belirtir ve ALL, kopyalar dahil tüm değerleri belirtir (bu varsayılandır). Örneğin 1, 1, 1 ve 3 değerlerine sahip sütun satırları için DISTINCT anahtar sözcüğü ile AVG işlevi 2 döndürür, ancak ALL anahtar sözcüğü ile 1.5 döndürür.

    Toplama işlevleri, SELECT ve HAVING yan tümcelerinde kullanılır. Burada SELECT yan tümcesindeki kullanımlarına bakacağız. Bu durumda, işlev bağımsız değişkenindeki ifade, SELECT yan tümcesinin girdi tablosunun tüm satırlarına uygulanır. Ayrıca, bir sonraki bölümde inceleyeceğimiz bir GROUP BY yan tümceniz yoksa, bir SELECT yan tümcesinde hem toplama işlevlerini hem de tablo sütunlarını (veya onlarla birlikte ifadeleri) kullanamazsınız.

    COUNT işlevinin iki biçimi vardır. İlk durumda, giriş tablosunun satır sayısı, ikinci durumda, giriş tablosundaki argüman değerlerinin sayısı döndürülür:

    • SAYMAK(*)
    • COUNT( ifade)

    Bu işlevi kullanmanın en basit yolu, bir tablodaki satır sayısını saymaktır (tümünü veya belirli bir koşulu karşılayanları). Bunun için sözdiziminin ilk varyantı kullanılır.

    Sorgu: Bilgisi veri tabanında bulunan ürün türlerinin sayısı.

    COUNT(*) OLARAK SEÇİN "ürün sayısı"

    Üründen

    COUNT işlevinin sözdiziminin ikinci varyantında, tek bir sütunun adı bağımsız değişken olarak kullanılabilir. Bu durumda, giriş tablosunun bu sütunundaki tüm değerlerin veya yalnızca tekrarlanmayanların (DISTINCT anahtar sözcüğü kullanılırken) sayısı sayılır.

    Sorgu: Müşteri tablosunda bulunan farklı adların sayısı.

    SAYI SEÇİN (FARKLI FNAME)

    Müşteriden

    Diğer tekli toplama işlevlerinin kullanımı COUNT işlevine benzer, ancak MIN ve MAX işlevleri için DISTINCT ve ALL anahtar sözcüklerinin kullanımı mantıklı değildir. SAY, MAKS ve MİN işlevleriyle, sayısal alanların yanı sıra karakter alanları da kullanılabilir. Toplam işlev bağımsız değişkeni değer içermiyorsa, COUNT işlevi 0 döndürür ve diğerleri NULL döndürür.

    MAKS SEÇİN(SiparişTarihi)

    İTİBAREN

    NEREDE SiparişTarihi"1.09.2010"

    görev için bağımsız iş: Dilde formüle edin SQL sorguları aşağıdaki verileri örneklemek için:

    • Tüm siparişlerin toplam maliyeti;
    • Müşteri tablosunda yer alan farklı şehirlerin sayısı.