SQLite Sorgusu: Seç, Nerede, SINIR, KAYDIR, Say, Grupla

İçindekiler:

Anonim

SQLite veritabanında SQL sorguları yazmak için SELECT, FROM, WHERE, GROUP BY, ORDER BY ve LIMIT yan tümcelerinin nasıl çalıştığını ve bunları nasıl kullanacağınızı bilmeniz gerekir.

Bu eğitim sırasında, bu cümlelerin nasıl kullanılacağını ve SQLite cümlelerinin nasıl yazılacağını öğreneceksiniz.

Bu eğitimde öğreneceksiniz-

  • Select ile Verileri Okuma
  • İsimler ve Takma Adlar
  • NEREDE
  • Sınırlama ve Sıralama
  • Yinelenenleri kaldırma
  • Agrega
  • Grupla
  • Sorgu ve Alt Sorgu
  • İşlemleri Ayarla -UNION, Intersect
  • BOŞ işleme
  • Koşullu sonuçlar
  • Ortak tablo ifadesi
  • Gelişmiş sorgular

Select ile Verileri Okuma

SELECT yan tümcesi, bir SQLite veritabanını sorgulamak için kullandığınız ana ifadedir. SELECT yan tümcesinde, neyi seçeceğinizi belirtirsiniz. Ancak select cümlesinden önce, FROM cümlesini kullanarak verileri nereden seçebileceğimizi görelim.

FROM yan tümcesi, verileri nerede seçmek istediğinizi belirtmek için kullanılır. From yan tümcesinde, öğreticilerde daha sonra göreceğimiz gibi, içinden verileri seçmek için bir veya daha fazla tablo veya alt sorgu belirtebilirsiniz.

Aşağıdaki tüm örnekler için, sqlite3.exe dosyasını çalıştırmanız ve akan örnek veritabanına bir bağlantı açmanız gerektiğini unutmayın:

Adım 1) Bu adımda,

  1. Bilgisayarım'ı açın ve aşağıdaki " C: \ sqlite " dizinine gidin ve
  2. Ardından " sqlite3.exe " dosyasını açın :

Adım 2) Aşağıdaki komutla " TutorialsSampleDB.db " veritabanını açın :

Artık veritabanında her tür sorguyu çalıştırmaya hazırsınız.

SELECT yan tümcesinde, yalnızca bir sütun adı seçemezsiniz, aynı zamanda neyi seçeceğinizi belirtmek için birçok başka seçeneğiniz vardır. Aşağıdaki gibi:

SEÇ *

Bu komut, FROM yan tümcesinde başvurulan tüm tablolardan (veya alt sorgulardan) tüm sütunları seçecektir. Örneğin:

SEÇ *ÖğrencilerdenINNER JOIN Bölümler AÇIK Öğrenci Bölüm Kimliği = Bölüm Kimliği = Bölüm Kimliği; 

Bu, hem öğrenci tablolarından hem de bölüm tablolarından tüm sütunları seçecektir:

SEÇ tablo adı. *

Bu, yalnızca "tablename" tablosundaki tüm sütunları seçecektir. Örneğin:

Öğrenci SEÇİN. *ÖğrencilerdenINNER JOIN Bölümler AÇIK Öğrenci Bölüm Kimliği = Bölüm Kimliği = Bölüm Kimliği;

Bu, yalnızca öğrenciler tablosundaki tüm sütunları seçecektir:

Gerçek bir değer

Değişmez değer, select deyiminde belirtilebilen sabit bir değerdir. Değişmez değerleri normalde SELECT yan tümcesinde sütun adlarını kullandığınız şekilde kullanabilirsiniz. Bu değişmez değerler, SQL sorgusu tarafından döndürülen satırlardaki her satır için görüntülenecektir.

Aşağıda, seçebileceğiniz farklı değişmez değerlere bazı örnekler verilmiştir:

  • Sayısal Değişmez - 1, 2,55,… vb. Gibi herhangi bir biçimdeki sayılar.
  • Dize değişmezleri - Herhangi bir dizge 'USA', 'bu bir örnek metindir',… vb.
  • NULL - NULL değer.
  • Current_TIME - Size geçerli saati verecektir.
  • CURRENT_DATE - bu size güncel tarihi verecektir.

Bu, döndürülen tüm satırlar için sabit bir değer seçmeniz gereken bazı durumlarda kullanışlı olabilir. Örneğin, "ABD" değerini içeren bir ülke adı verilen yeni bir sütunla Öğrenciler tablosundan tüm öğrencileri seçmek istiyorsanız, bunu yapabilirsiniz:

Öğrencilerden Ülke OLARAK SEÇİN *, 'ABD';

Bu size tüm öğrencilerin sütunlarını ve bunun gibi yeni bir "Ülke" sütununu verecektir:

Bu yeni sütun Ülke'nin aslında tabloya eklenen yeni bir sütun olmadığını unutmayın. Sonuçları görüntülemek için sorguda oluşturulan sanal bir sütundur ve tabloda oluşturulmaz.

İsimler ve Takma Adlar

Diğer ad, yeni bir adla sütunu seçmenize olanak tanıyan sütun için yeni bir addır. Sütun takma adları "AS" anahtar sözcüğü kullanılarak belirtilir.

Örneğin, "ÖğrenciAdı" yerine "Öğrenci Adı" ile döndürülecek ÖğrenciAdı sütununu seçmek istiyorsanız, buna aşağıdaki gibi bir takma ad verebilirsiniz:

Öğrencilerden Öğrenci Adını 'Öğrenci Adı' OLARAK SEÇİN; 

Bu size öğrenci adlarını "Öğrenci Adı" yerine "Öğrenci Adı" adıyla verecektir:

Sütun adının hala " ÖğrenciAdı " olduğunu unutmayın; ÖğrenciAdı sütunu hala aynıdır, diğer ada göre değişmez.

Diğer ad, sütun adını değiştirmez; sadece SELECT yan tümcesinde görünen adı değiştirecektir.

Ayrıca, "AS" anahtar kelimesinin isteğe bağlı olduğunu, takma adı onsuz koyabileceğinizi unutmayın, aşağıdaki gibi bir şey:

Öğrencilerden Öğrenci Adı 'Öğrenci Adı'nı SEÇİN;

Ve size önceki sorgu ile tam olarak aynı çıktıyı verecektir:

Yalnızca sütun değil, tablolara da takma adlar verebilirsiniz. Aynı anahtar kelime "AS" ile. Örneğin, bunu yapabilirsiniz:

* ÖĞRENCİLERDEN SEÇİN; 

Bu size öğrenciler tablosundaki tüm sütunları verecektir:

Birden fazla masaya katılıyorsanız bu çok yararlı olabilir; Sorguda tam tablo adını tekrarlamak yerine, her tabloya kısa bir takma ad verebilirsiniz. Örneğin, aşağıdaki sorguda:

Öğrenci SEÇİNÖğrenci Adı, Bölümler, Bölüm AdıÖğrencilerdenINNER JOIN Bölümler AÇIK Öğrenci Bölüm Kimliği = Bölüm Kimliği = Bölüm Kimliği;

Bu sorgu, "Bölümler" tablosundaki bölüm adıyla birlikte "Öğrenciler" tablosundan her öğrenci adını seçecektir:

Ancak aynı sorgu şu şekilde yazılabilir:

ÖĞRENCİ ADI, D BÖLÜMÜ ADINI SEÇİNÖğrencilerden ASINNER JOIN Bölümler AS d ON s.DepartmentId = d.DepartmentId; 
  • Öğrenciler tablosuna "s" ve bölümler tablosuna "d" takma adı verdik.
  • Sonra tam tablonun adını kullanmak yerine, onlara atıfta bulunmak için onların takma adlarını kullandık.
  • INNER JOIN, bir koşul kullanarak iki veya daha fazla tabloyu birleştirir. Örneğimizde Öğrenciler tablosunu DepartmentId sütunu ile Bölümler tablosu ile birleştirdik. Ayrıca "SQLite Joins" öğreticisinde INNER JOIN için derinlemesine bir açıklama bulunmaktadır.

Bu size önceki sorgu ile aynı çıktıyı verecektir:

NEREDE

Önceki bölümde gördüğümüz gibi FROM cümlesiyle birlikte SELECT cümlesini kullanarak SQL sorguları yazmak size tablolardaki tüm satırları verecektir. Ancak, döndürülen verileri filtrelemek istiyorsanız, bir "WHERE" yan tümcesi eklemeniz gerekir.

WHERE deyimi, SQL sorgusu tarafından döndürülen sonuç kümesini filtrelemek için kullanılır. WHERE yan tümcesi şu şekilde çalışır:

  • WHERE yan tümcesinde, bir "ifade" belirtebilirsiniz.
  • Bu ifade, FROM yan tümcesinde belirtilen tablolardan döndürülen her satır için değerlendirilecektir.
  • İfade bir Boole ifadesi olarak değerlendirilir ve sonucu true, false veya null olur.
  • Daha sonra, yalnızca ifadenin gerçek bir değerle değerlendirildiği satırlar döndürülür ve yanlış veya boş sonuçları olanlar yok sayılır ve sonuç kümesine dahil edilmez.
  • WHERE yan tümcesini kullanarak sonuç kümesini filtrelemek için, ifadeleri ve operatörleri kullanmanız gerekir.

SQLite'daki operatörlerin listesi ve bunların nasıl kullanılacağı

Aşağıdaki bölümde, ifade ve operatörleri kullanarak nasıl filtreleyebileceğinizi açıklayacağız.

İfade, bir operatörle birbiriyle birleştirilen bir veya daha fazla değişmez değer veya sütundur.

İfadeleri hem SELECT yan tümcesinde hem de WHERE yan tümcesinde kullanabileceğinizi unutmayın.

Aşağıdaki örneklerde, hem select cümlesindeki hem de WHERE cümlesindeki ifadeleri ve operatörleri deneyeceğiz. Size nasıl performans gösterdiklerini göstermek için.

Aşağıdaki gibi belirtebileceğiniz farklı türlerde ifadeler ve operatörler vardır:

Birleştirme işleci SQLite "||"

Bu operatör, bir veya daha fazla değişmez değeri veya sütunu birbiriyle birleştirmek için kullanılır. Birleştirilmiş tüm değişmez değerlerden veya sütunlardan bir sonuç dizisi üretecektir. Örneğin:

'Adlı Kimlik:' SEÇİN || Öğrenci Kimliği || StudentName AS StudentIdWithNameÖğrencilerden;

Bu, " StudentIdWithName " adlı yeni bir takma adla birleştirilecek :

  • Değişmez dize değeri " Id with Name: "
  • " StudentId " sütununun değeriyle ve
  • " ÖğrenciAdı " sütunundaki değerle

SQLite CAST operatörü:

CAST operatörü, bir değeri bir veri türünden başka bir veri türüne dönüştürmek için kullanılır.

Örneğin, " '12 .5 ' " gibi bir dize değeri olarak saklanan sayısal bir değeriniz varsa ve bunu sayısal bir değere dönüştürmek istiyorsanız, bunu " CAST ('12 .5' AS GERÇEK) ". Veya 12.5 gibi bir ondalık değeriniz varsa ve sadece tamsayı kısmını almanız gerekiyorsa, bunu "CAST (12.5 AS INTEGER)" gibi bir tam sayıya çevirebilirsiniz.

Misal

Aşağıdaki komutta farklı değerleri diğer veri türlerine dönüştürmeye çalışacağız:

ToInteger OLARAK CAST (GERÇEK OLARAK '12 .5 ') ToReal, CAST (ENTEGER OLARAK 12.5) SEÇİN;

Bu size şunları verecektir:

Sonuç aşağıdaki gibidir:

  • CAST ('12 .5 'AS GERÇEK) - '12 .5' değeri bir dize değeridir, GERÇEK bir değere dönüştürülür.
  • CAST (INTEGER OLARAK 12,5) - 12,5 değeri ondalık bir değerdir, tamsayı değerine dönüştürülür. Ondalık kısım kesilir ve 12 olur.

SQLite Aritmetik Operatörleri:

İki veya daha fazla sayısal değer veya sayısal sütun alın ve bir sayısal değer döndürün. SQLite'da desteklenen aritmetik operatörler şunlardır:

  • Toplama " + " - iki işlenenin toplamını verir.
  • Çıkarma " - " - iki işlenen çıkarılır ve farkla sonuçlanır.
  • Çarpma " * " - iki işlenenin çarpımı.
  • Hatırlatıcı (modulo) " % " - bir işlenenin ikinci işlenene bölünmesiyle elde edilen kalanı verir.
  • Bölme " / " - sol işlenenin sağ işlenene bölünmesinden elde edilen bölüm sonuçlarını döndürür.

Misal:

Aşağıdaki örnekte, aynı sayıdaki değişmez sayısal değerlere sahip beş aritmetik operatörü deneyeceğiz.

seçim cümlesi:

25 + 6, 25-6, 25 * 6,% 25 6, 25/6 SEÇİNİZ;

Bu size şunları verecektir:

Burada FROM yan tümcesi olmadan bir SELECT ifadesini nasıl kullandığımıza dikkat edin. Ve buna SQLite'de, değişmez değerleri seçtiğimiz sürece izin verilir.

SQLite Karşılaştırma operatörleri

İki işleneni birbiriyle karşılaştırın ve aşağıdaki gibi bir doğru veya yanlış döndürün:

  • " < " - sol işlenen sağ işlenenden küçükse doğru döndürür.
  • " <= " - sol işlenen sağ işlenenden küçükse veya sağ işlenene eşitse doğru döndürür.
  • " > " - sol işlenen sağ işlenenden büyükse doğru döndürür.
  • " > = " - sol işlenen, sağ işlenenden büyük veya ona eşitse doğru döndürür.
  • " = " ve " == " - iki işlenen eşitse doğru döndürür. Her iki operatörün de aynı olduğunu ve aralarında fark olmadığını unutmayın.
  • " ! = " ve " <> " - iki işlenen eşit değilse doğru döndürür. Her iki operatörün de aynı olduğunu ve aralarında fark olmadığını unutmayın.

SQLite'ın doğru değeri 1 ile ve yanlış değeri 0 ile ifade ettiğini unutmayın.

Misal:

SEÇ10 <6 AS '<', 10 <= 6 AS '<=',10> 6 AS '>', 10> = 6 AS '> =',10 = 6 AS '=', 10 == 6 AS '==',10! = 6 AS '! =', 10 <> 6 AS '<>';

Bu şuna benzer bir şey verecektir:

SQLite Pattern Matching operatörleri

" GİBİ " - model eşleştirme için kullanılır. " Beğen " seçeneğini kullanarak, bir joker karakter kullanılarak belirtilen bir modelle eşleşen değerleri arayabilirsiniz.

Soldaki işlenen, bir dize değişmez değeri veya bir dize sütunu olabilir. Desen şu şekilde belirtilebilir:

  • Desen içerir. Örneğin, ÖğrenciAdı GİBİ '% a%' - bu, ÖğrenciAdı sütunundaki herhangi bir konumda "a" harfini içeren öğrencilerin adlarını arayacaktır.
  • Desenle başlar. Örneğin, " ÖğrenciAdı GİBİ 'a%' " - öğrencilerin "a" harfiyle başlayan adlarını arayın.
  • Desenle biter. Örneğin, " ÖğrenciAdı GİBİ '% a' " - "a" harfiyle biten öğrenci adlarını arayın.
  • Alt çizgi "_" kullanılarak bir dizedeki herhangi bir tek karakterle eşleştirme. Örneğin, " ÖğrenciAdı GİBİ 'J___' " - 4 karakter uzunluğundaki öğrenci adlarını arayın. "J" harfiyle başlamalıdır ve "J" harfinden sonra üç karakter daha içerebilir.

Desen eşleştirme örnekleri:

  1. 'J' harfiyle başlayan Öğrenci isimlerini alın:
    StudentName GİBİ 'j%' GİBİ Öğrencilerden ÖğrenciAdı SEÇİN;

    Sonuç:

  2. Öğrencilerin adlarını 'y' harfiyle bitirin:
    Öğrenci Adının '% y' GİBİ OLDUĞU ÖğrencilerDEN ÖğrenciAdı'nı SEÇİN; 

    Sonuç:

  3. 'N' harfini içeren öğrencilerin adlarını alın:
    Öğrenci Adının '% n%' GİBİ OLDUĞU Öğrencilerden ÖğrenciAdı'nı SEÇİN;

    Sonuç:

"GLOB" - LIKE operatörüne eşdeğerdir, ancak GLOB LIKE operatörünün aksine büyük / küçük harfe duyarlıdır. Örneğin, aşağıdaki iki komut farklı sonuçlar verecektir:

'Jack' GLOB 'j%' öğesini SEÇİN;'Jack' GİBİ 'j%' öğesini SEÇİN;

Bu size şunları verecektir:

  • İlk ifade 0 (yanlış) döndürür çünkü GLOB operatörü büyük / küçük harfe duyarlıdır, bu nedenle 'j', 'J'ye eşit değildir. Bununla birlikte, ikinci ifade 1 (doğru) döndürür çünkü LIKE operatörü büyük / küçük harfe duyarlı değildir, bu nedenle 'j', 'J'ye eşittir.

Diğer operatörler:

SQLite VE

Bir veya daha fazla ifadeyi birleştiren mantıksal bir operatör. Yalnızca tüm ifadeler "doğru" bir değer verirse doğru döndürür. Ancak, yalnızca tüm ifadeler "yanlış" bir değer verirse yanlış döndürür.

Misal:

Aşağıdaki sorgu, StudentId> 5 olan ve StudentName N harfiyle başlayan öğrencileri arayacaktır, geri dönen öğrencilerin iki koşulu karşılaması gerekir:

SEÇ *ÖğrencilerdenNEREDE (ÖğrenciKimliği> 5) VE (ÖğrenciAdı GİBİ 'N%');

Çıktı olarak, yukarıdaki ekran görüntüsünde, bu size yalnızca "Nancy" verecektir. Nancy, her iki koşulu da karşılayan tek öğrencidir.

SQLite VEYA

Bir veya daha fazla ifadeyi birleştiren mantıksal bir işleç, böylece birleştirilmiş işleçlerden biri doğru çıkarsa, o zaman doğru döndürür. Bununla birlikte, tüm ifadeler yanlış verirse, yanlış döndürür.

Misal:

Aşağıdaki sorgu, StudentId> 5 olan veya StudentName N harfiyle başlayan öğrencileri arayacaktır, geri dönen öğrencilerin koşullardan en az birini karşılaması gerekir:

SEÇ *ÖğrencilerdenNEREDE (ÖğrenciKimliği> 5) VEYA (ÖğrenciAdı GİBİ 'N%');

Bu size şunları verecektir:

Bir çıktı olarak, yukarıdaki ekran görüntüsünde, bu size adında "n" harfine sahip bir öğrencinin adını artı değeri> 5 olan öğrenci kimliğini verecektir.

Gördüğünüz gibi sonuç, AND işleciyle yapılan sorgudan farklı.

SQLite ARASI

BETWEEN, iki değer aralığında olan değerleri seçmek için kullanılır. Örneğin, X değeri Y ve Z değerleri arasındaysa " X Y VE Z ARASINDAKİ X " doğru (1) döndürür. Aksi takdirde, yanlış (0) döndürür. " X Y VE Z ARASINDA ", " X> = Y VE X <= Z " ile eşdeğerdir , X, Y'den büyük veya ona eşit olmalıdır ve X, Z'den küçük veya ona eşittir.

Misal:

Aşağıdaki örnek sorguda, Id değeri 5 ile 8 arasında olan öğrencileri almak için bir sorgu yazacağız:

SEÇ *Öğrencilerden5 VE 8 ARASINDA ÖĞRENCİ KİMLİĞİ NEREDE;

Bu, yalnızca kimliği 5, 6, 7 ve 8 olan öğrencilere verecektir:

SQLite GİRİŞİ

Bir işlenen ve işlenenlerin bir listesini alır. İlk işlenen değeri listedeki işlenenlerin değerlerinden birine eşitse doğru döndürür. IN operatörü, işlenenler listesi değerleri içinde ilk işlenen değerini içeriyorsa true (1) döndürür. Aksi takdirde, yanlış (0) döndürür.

Şunun gibi: " col IN (x, y, z) ". Bu, " (col = x) veya (col = y) veya (col = z) " ile eşdeğerdir .

Misal:

Aşağıdaki sorgu yalnızca kimlik numarası 2, 4, 6, 8 olan öğrencileri seçecektir:

SEÇ *ÖğrencilerdenNEREDE StudentId IN (2, 4, 6, 8);

Böyle:

Önceki sorgu, eşdeğer oldukları için aşağıdaki sorgu olarak kesin sonucu verecektir:

SEÇ *ÖğrencilerdenNEREDE (StudentId = 2) OR (StudentId = 4) OR (StudentId = 6) OR (StudentId = 8);

Her iki sorgu da kesin çıktıyı verir. Ancak, iki sorgu arasındaki fark, "IN" operatörünü kullandığımız ilk sorgu. İkinci sorguda, birden çok "VEYA" operatörü kullandık.

IN operatörü, birden çok OR operatörü kullanmaya eşdeğerdir. " WHERE StudentId IN (2, 4, 6, 8) ", " WHERE (StudentId = 2) OR (StudentId = 4) OR (StudentId = 6) OR (StudentId = 8); "

Böyle:

SQLite İÇERİDE DEĞİL

"NOT IN" işleneni, IN işlecinin tersidir. Ancak aynı sözdizimiyle; bir işlenen ve işlenenlerin bir listesini alır. İlk işlenen değeri listedeki işlenenlerin değerlerinden birine eşit değilse doğru döndürür. yani, işlenenler listesi ilk işleneni içermiyorsa doğru (0) döndürür. Şöyle : " col NOT IN (x, y, z) ". Bu, " (col <> x) AND (col <> y) AND (col <> z) " ile eşdeğerdir .

Misal:

Aşağıdaki sorgu, kimlik numarası bu 2, 4, 6, 8 numaralı kimliklerden birine eşit olmayan öğrencileri seçecektir:

SEÇ *ÖğrencilerdenÖğrenci NEREDE DEĞİLDİR (2, 4, 6, 8);

Böyle

Önceki sorgu, eşdeğer oldukları için aşağıdaki sorgu olarak kesin sonucu veriyoruz:

SEÇ *ÖğrencilerdenNEREDE (ÖğrenciKimliği <> 2) VE (ÖğrenciKimliği <> 4) VE (ÖğrenciKimliği <> 6) VE (ÖğrenciKimliği <> 8);

Böyle:

Yukarıdaki ekran görüntüsünde,

Aşağıdaki Id'lerin 2, 4, 6 veya 8'lerine eşit olmayan bir öğrenci listesi almak için eşit olmayan birden fazla operatör "<>" kullandık. Bu sorgu, bu Id'lerin listesi dışındaki tüm diğer öğrencileri döndürecektir.

SQLite VAR

EXISTS operatörleri herhangi bir işlenen almaz; ondan sonra yalnızca bir SELECT yan tümcesi alır. EXISTS operatörü, SELECT yan tümcesinden döndürülen satırlar varsa true (1) döndürür ve SELECT yan tümcesinden döndürülen hiç satır yoksa false (0) döndürür.

Misal:

Aşağıdaki örnekte, bölüm kimliği öğrenciler tablosunda mevcutsa, bölümün adını seçeceğiz:

Bölüm Adı SEÇİNİZBölümlerden AS dNEREDE MEVCUT OLUR (Bölüm Kimliği, Bölüm Kimliği = Bölüm Kimliği);

Bu size şunları verecektir:

Yalnızca üç bölüm " Bilişim, Fizik ve Sanat " iade edilecektir. Ve o bölümde öğrenci olmadığı için bölüm adı " Matematik " iade edilmeyecektir, bu nedenle bölüm kimliği öğrenciler tablosunda mevcut değildir. Bu nedenle, EXISTS operatörü " Matematik " bölümünü görmezden geldi .

SQLite DEĞİL

Kendinden sonra gelen önceki işlecin sonucunu tersine çevirir. Örneğin:

  • ARASINDA DEĞİL - BETWEEN yanlış döndürürse ve tersi doğru döndürür.
  • GİBİ DEĞİL - LIKE yanlış döndürürse ve tersi doğru döndürür.
  • GLOB DEĞİL - GLOB yanlış döndürürse ve tersi doğru döndürür.
  • MEVCUT DEĞİL - EXISTS yanlış döndürürse ve tersi olursa doğru döndürür.

Misal:

Aşağıdaki örnekte, EXISTS operatörünün ters sonucu olan Öğrenciler tablosunda bulunmayan departmanların adlarını almak için EXISTS operatörüyle NOT operatörünü kullanacağız. Bu nedenle arama departman tablosunda bulunmayan DepartmentId üzerinden yapılacaktır.

Bölüm Adı SEÇİNİZBölümlerden AS dNEREDE MEVCUT DEĞİLDİR (Departman Kimliği SEÇİNİZÖğrencilerden ASNEREDE d. Bölüm Kimliği = Bölüm Kimliği);

Çıktı :

Yalnızca " Matematik " bölümü iade edilecektir. Çünkü " Matematik " bölümü öğrenci tablosunda olmayan tek bölümdür.

Sınırlama ve Sıralama

SQLite Sırası

SQLite Sırası, sonucunuzu bir veya daha fazla ifadeye göre sıralamaktır. Sonuç kümesini sipariş etmek için ORDER BY yan tümcesini aşağıdaki gibi kullanmanız gerekir:

  • İlk olarak, ORDER BY yan tümcesini belirtmeniz gerekir.
  • ORDER BY yan tümcesi sorgunun sonunda belirtilmelidir; ondan sonra yalnızca LIMIT yan tümcesi belirtilebilir.
  • Verileri sıralamak için ifadeyi belirtin, bu ifade bir sütun adı veya bir ifade olabilir.
  • İfadeden sonra isteğe bağlı bir sıralama yönü belirtebilirsiniz. Verileri azalan sıralamak için DESC veya artan verileri sıralamak için ASC. Hiçbirini belirtmediyseniz, veriler artan şekilde sıralanır.
  • Aralarında "," kullanarak daha fazla ifade belirtebilirsiniz.

Misal

Aşağıdaki örnekte, tüm öğrencileri adlarına göre ancak azalan sırada, ardından artan sırada bölüm adına göre seçeceğiz:

ÖĞRENCİ ADI, D BÖLÜMÜ ADINI SEÇİNÖğrencilerden ASINNER JOIN Bölümler AS d ON s. Bölüm Kimliği = d Bölüm KimliğiD.DepartmentName ASC, s.StudentName DESC TARAFINDAN SİPARİŞ;

Bu size şunları verecektir:

  • SQLite önce tüm öğrencileri bölüm adlarına göre artan sırada sıralayacaktır.
  • Daha sonra her bölüm adı için, o bölüm adı altındaki tüm öğrenciler adlarına göre azalan sırada görüntülenecektir.

SQLite Sınırı:

LIMIT deyimini kullanarak SQL sorgunuzun döndürdüğü satır sayısını sınırlayabilirsiniz. Örneğin, LIMIT 10 size yalnızca 10 satır verecek ve diğer tüm satırları yok sayacaktır.

LIMIT yan tümcesinde, OFFSET deyimini kullanarak belirli bir konumdan başlayarak belirli sayıda satır seçebilirsiniz. Örneğin, " LIMIT 4 OFFSET 4 " ilk 4 satırı yok sayar ve beşinci satırdan başlayarak 4 satır döndürür, böylece 5,6,7 ve 8 numaralı satırları alırsınız.

OFFSET cümlesinin isteğe bağlı olduğunu, " LIMIT 4, 4 " gibi yazabileceğinizi ve size kesin sonuçları vereceğini unutmayın.

Örnek :

Aşağıdaki örnekte, sorguyu kullanarak öğrenci kimliği 5'ten başlayarak yalnızca 3 öğrenciyi döndüreceğiz:

SEÇİN * Öğrenci SINIRI 4,3;

Bu size 5. sıradan başlayarak sadece üç öğrenci verecektir, bu yüzden size StudentId 5, 6 ve 7 olan satırları verecektir:

Yinelenenleri kaldırma

SQL sorgunuz yinelenen değerler döndürürse, bu yinelemeleri kaldırmak ve farklı değerlere dönmek için " DISTINCT " anahtar sözcüğünü kullanabilirsiniz. DISTINCT tuşu çalıştıktan sonra birden fazla sütun belirtebilirsiniz.

Misal:

Aşağıdaki sorgu, yinelenen "bölüm adı değerleri" döndürür: Burada, BT, Fizik ve Sanat adlarıyla yinelenen değerlere sahibiz.

D. Bölüm Adı SEÇİNİZÖğrencilerden ASINNER JOIN Bölümler AS d ON s.DepartmentId = d.DepartmentId;

Bu size departman adı için yinelenen değerler verecektir:

Bölüm adı için yinelenen değerlerin nasıl olduğuna dikkat edin. Şimdi, bu kopyaları kaldırmak ve yalnızca benzersiz değerleri elde etmek için DISTINCT anahtar kelimesini aynı sorgu ile kullanacağız. Böyle:

DISTINCT SEÇ d. Bölüm AdıÖğrencilerden ASINNER JOIN Bölümler AS d ON s.DepartmentId = d.DepartmentId;

Bu size departman adı sütunu için yalnızca üç benzersiz değer verecektir:

Agrega

SQLite Toplamaları, birden çok satırın birden çok değerini tek bir değerde gruplayacak, SQLite'de tanımlanan yerleşik işlevlerdir.

SQLite tarafından desteklenen toplamalar şunlardır:

SQLite AVG ()

Tüm x değerlerinin ortalamasını döndürdü.

Misal:

Aşağıdaki örnekte, öğrencilerin tüm sınavlardan alacakları ortalama notu alacağız:

İşaretlerden AVG'yi (İşareti) SEÇİN;

Bu size "18.375" değerini verecektir:

Bu sonuçlar, tüm işaret değerlerinin toplamının sayılarına bölünmesiyle elde edilir.

COUNT () - COUNT (X) veya COUNT (*)

X değerinin görünme sayısının toplam sayısını döndürür. COUNT ile kullanabileceğiniz bazı seçenekler şunlardır:

  • COUNT (x): Yalnızca x değerini sayar, burada x bir sütun adıdır. NULL değerleri yok sayacaktır.
  • COUNT (*): Tüm sütunlardan tüm satırları sayın.
  • COUNT (DISTINCT x): x'in farklı değerlerinin sayısını alacak olan x'ten önce bir DISTINCT anahtar sözcüğü belirtebilirsiniz.

Misal

Aşağıdaki örnekte, COUNT (DepartmentId), COUNT (*) ve COUNT (DISTINCT DepartmentId) içeren Bölümlerin toplam sayısını ve bunların nasıl farklı olduğunu alacağız:

Öğrencilerden COUNT (DepartmentId), COUNT (DISTINCT DepartmentId), COUNT (*) SEÇİN;

Bu size şunları verecektir:

Aşağıdaki gibi:

  • COUNT (DepartmentId) size tüm departman kimliğinin sayısını verir ve boş değerleri yok sayar.
  • COUNT (DISTINCT DepartmentId), size yalnızca 3 olan DepartmentId'nin farklı değerlerini verir. Hangi departman adının üç farklı değeri vardır. Öğrenci adında bölüm adının 8 değeri olduğuna dikkat edin. Ancak yalnızca Matematik, BT ve Fizik olan farklı üç değer.
  • COUNT (*), 10 öğrenci için 10 satır olan öğrenci tablosundaki satırların sayısını sayar.

GROUP_CONCAT () - GROUP_CONCAT (X) veya GROUP_CONCAT (X, Y)

GROUP_CONCAT toplama işlevi, çoklu değerleri virgülle ayırarak tek bir değerde birleştirir. Aşağıdaki seçeneklere sahiptir:

  • GROUP_CONCAT (X): Bu, x'in tüm değerlerini, değerler arasında ayırıcı olarak kullanılan virgül "" ile tek bir dizede birleştirir. NULL değerler göz ardı edilecektir.
  • GROUP_CONCAT (X, Y): Bu, x'in değerlerini tek bir dizede birleştirir, y'nin değeri her değer arasında varsayılan ayırıcı ',' yerine ayırıcı olarak kullanılır. NULL değerler de göz ardı edilecektir.
  • GROUP_CONCAT (DISTINCT X): Bu, x'in tüm farklı değerlerini, değerler arasında ayırıcı olarak kullanılan virgül "" ile tek bir dizede birleştirir. NULL değerler göz ardı edilecektir.

GROUP_CONCAT (Departman Adı) Örneği

Aşağıdaki sorgu, öğrencilerden ve bölümler tablosundan alınan tüm bölüm adlarının değerlerini virgülle ayrılmış bir dize halinde birleştirecektir. Dolayısıyla, bir değer listesi döndürmek yerine, her satırda bir değer. Tüm değerler virgülle ayrılmış olarak tek bir satırda yalnızca bir değer döndürür:

GROUP_CONCAT SEÇİN (d. Bölüm Adı)Öğrencilerden ASINNER JOIN Bölümler AS d ON s.DepartmentId = d.DepartmentId;

Bu size şunları verecektir:

Bu size virgülle ayrılmış tek bir dize halinde birleştirilmiş 8 departman ad değerlerinin listesini verecektir.

GROUP_CONCAT (DISTINCT Departman Adı) Örneği

Aşağıdaki sorgu, bölüm adının öğrenciler ve bölümler tablosundaki farklı değerlerini virgülle ayrılmış bir dize halinde birleştirecektir:

GROUP_CONCAT SEÇİN (DISTINCT d.DepartmentName)Öğrencilerden ASINNER JOIN Bölümler AS d ON s.DepartmentId = d.DepartmentId;

Bu size şunları verecektir:

Sonucun önceki sonuçtan ne kadar farklı olduğuna dikkat edin; farklı departmanların adları olan yalnızca üç değer döndürüldü ve yinelenen değerler kaldırıldı.

GROUP_CONCAT (Bölüm Adı, '&') Örnek

Aşağıdaki sorgu, öğrenciler ve bölümler tablosundaki bölüm adı sütununun tüm değerlerini tek bir dizede birleştirir, ancak ayırıcı olarak virgül yerine '&' karakteri kullanılır:

GROUP_CONCAT SEÇİN (d. Bölüm Adı, '&')Öğrencilerden ASINNER JOIN Bölümler AS d ON s.DepartmentId = d.DepartmentId;

Bu size şunları verecektir:

Değerleri ayırmak için "," varsayılan karakteri yerine "&" karakterinin nasıl kullanıldığına dikkat edin.

SQLite MAX () ve MIN ()

MAX (X) size X değerlerinden en yüksek değeri verir. MAX, x'in tüm değerleri boşsa bir NULL değeri döndürecektir. MIN (X) ise size X değerlerinden en küçük değeri verir. MIN, X'in tüm değerleri boşsa bir NULL değeri döndürür.

Misal

Aşağıdaki sorguda, " İşaretler " tablosundan en yüksek işareti ve en düşük puanı almak için MIN ve MAX işlevlerini kullanacağız :

İşaretlerden MAX (İşaret), MIN (İşaret) SEÇİN;

Bu size şunları verecektir:

SQLite SUM (x), Toplam (x)

Her ikisi de tüm x değerlerinin toplamını döndürür. Ancak aşağıdakilerde farklıdırlar:

  • SUM, tüm değerler boşsa boş döndürür, ancak Toplam 0 döndürür.
  • TOTAL her zaman kayan nokta değerlerini döndürür. SUM, tüm x değerleri bir tamsayı ise bir tamsayı değeri döndürür. Bununla birlikte, değerler bir tamsayı değilse, bir kayan nokta değeri döndürür.

Misal

Aşağıdaki sorguda " İşaretler " tablolarındaki tüm işaretlerin toplamını almak için SUM ve toplam kullanacağız :

İşaretlerden TOPLAM (İşaret), TOPLAM (İşaret) SEÇİN;

Bu size şunları verecektir:

Gördüğünüz gibi, TOTAL her zaman bir kayan nokta döndürür. Ancak SUM bir tamsayı değeri döndürür çünkü "İşaret" sütunundaki değerler tam sayı olabilir.

TOPLA ve TOPLAM örnek arasındaki fark:

Aşağıdaki sorguda SUM ve TOTAL arasındaki farkı, NULL değerlerinin TOPLAMI'nı aldıklarında göstereceğiz:

TestId = 4 NEREDE İŞARETLERDEN TOPLA (İşaret), TOPLAM (İşaret) SEÇİN;

Bu size şunları verecektir:

TestId = 4 için hiçbir işaret olmadığını, bu nedenle bu test için boş değerler olduğunu unutmayın. TOPLA, boş bir değer döndürürken, TOPLAM 0 döndürür.

Grupla

GROUP BY yan tümcesi, satırları gruplar halinde gruplandırmak için kullanılacak bir veya daha fazla sütunu belirtmek için kullanılır. Aynı değerlere sahip satırlar gruplar halinde toplanacaktır (düzenlenecektir).

Sütunlara göre gruba dahil edilmeyen diğer herhangi bir sütun için, bunun için bir toplama işlevi kullanabilirsiniz.

Misal:

Aşağıdaki sorgu size her bölümde bulunan toplam öğrenci sayısını verecektir.

Öğrenci Sayısı olarak d.Bölüm Adı, COUNT (s.StudentId) SEÇİNÖğrencilerden ASINNER JOIN Bölümler AS d ON s. Bölüm Kimliği = d Bölüm KimliğiGRUP TARAFINDAN d. Bölüm Adı;

Bu size şunları verecektir:

GROUPBY DepartmentName maddesi, tüm öğrencileri her bölüm adı için bir grup halinde gruplayacaktır. Her bir "bölüm" grubu için öğrencileri hesaba katacaktır.

HAVING maddesi

GROUP BY yan tümcesi tarafından döndürülen grupları filtrelemek istiyorsanız, GROUP BY ifadesinin ardından bir "HAVING" yan tümcesi belirtebilirsiniz. İfade, bu grupları filtrelemek için kullanılacaktır.

Misal

Aşağıdaki sorguda, yalnızca iki öğrencisi olan bölümleri seçeceğiz:

Öğrenci Sayısı olarak d.Bölüm Adı, COUNT (s.StudentId) SEÇİNÖğrencilerden ASINNER JOIN Bölümler AS d ON s. Bölüm Kimliği = d Bölüm KimliğiGRUP TARAFINDAN d. Bölüm AdıSAYISI (Öğrenci Kimliği) = 2;

Bu size şunları verecektir:

VARING COUNT (S.StudentId) = 2 cümlesi, döndürülen grupları filtreleyecek ve yalnızca üzerinde tam olarak iki öğrenci içeren grupları döndürecektir. Bizim durumumuzda Sanat bölümünün 2 öğrencisi var, bu nedenle çıktıda görüntüleniyor.

SQLite Sorgusu ve Alt Sorgu

Herhangi bir sorgunun içinde, başka bir sorguyu bir SELECT, INSERT, DELETE, UPDATE veya başka bir alt sorgu içinde kullanabilirsiniz.

Bu iç içe geçmiş sorguya alt sorgu adı verilir. Şimdi, SELECT yan tümcesinde alt sorguların kullanımına ilişkin bazı örnekler göreceğiz. Bununla birlikte, Verileri Değiştirme eğitiminde, INSERT, DELETE ve UPDATE deyimleriyle alt sorguları nasıl kullanabileceğimizi göreceğiz.

FROM yan tümcesi örneğinde alt sorgu kullanma

Aşağıdaki sorguda, FROM yan tümcesine bir alt sorgu ekleyeceğiz:

SEÇs.StudentName, t.MarkÖğrencilerden ASİÇ BİRLEŞİM(StudentId SEÇ, MarkTESTLERDEN AS tINNER JOIN, m ON t.TestId = m.TestId olarak işaretler) ON s.StudentId = t.StudentId;

Sorgu:

 StudentId SEÇ, MarkTESTLERDEN AS tINNER JOIN, m ON t.TestId = m.TestId olarak işaretler

Yukarıdaki sorgu, burada bir alt sorgu olarak adlandırılır çünkü FROM yan tümcesi içinde yuvalanmıştır. Sorguda döndürülen sütunlara başvurabilmemiz için ona "t" takma ad verdiğimize dikkat edin.

Bu sorgu size şunları verecektir:

Yani bizim durumumuzda,

  • s.StudentName, öğrencilerin adını veren ana sorgudan seçilir ve
  • t.Mark alt sorgudan seçilir; bu öğrencilerin her biri tarafından elde edilen notları veren

WHERE yan tümcesi örneğinde alt sorgu kullanma

Aşağıdaki sorguda, WHERE yan tümcesine bir alt sorgu ekleyeceğiz:

Bölüm Adı SEÇİNİZBölümlerden AS dNEREDE MEVCUT DEĞİLDİR (Departman Kimliği SEÇİNİZÖğrencilerden ASNEREDE d. Bölüm Kimliği = Bölüm Kimliği);

Sorgu:

Departman Kimliğini SEÇÖğrencilerden ASNEREDE d. Bölüm Kimliği = Bölüm Kimliği

Yukarıdaki sorgu, burada bir alt sorgu olarak adlandırılır çünkü WHERE yan tümcesine yerleştirilmiştir. Alt sorgu, NOT EXISTS işleci tarafından kullanılacak DepartmentId değerlerini döndürecektir.

Bu sorgu size şunları verecektir:

Yukarıdaki sorguda, kayıtlı öğrencisi olmayan bölümü seçtik. Burada "Matematik" bölümü var.

İşlemleri Ayarla - BİRLİĞİ, Kesişim

SQLite aşağıdaki SET işlemlerini destekler:

BİRLİK & BİRLİK TÜMÜ

Birden çok SELECT deyiminden döndürülen bir veya daha fazla sonuç kümesini (bir satır grubu) tek bir sonuç kümesinde birleştirir.

UNION farklı değerler döndürecektir. Ancak, UNION ALL kopyaları içermeyecek ve içerecektir.

Sütun adının, ilk SELECT deyiminde belirtilen sütun adı olacağını unutmayın.

UNION Örneği

Aşağıdaki örnekte, öğrenci tablosundan DepartmentId listesini ve aynı sütundaki bölümler tablosundan DepartmentId listesini alacağız:

Öğrencilerden Bölüm Kimliği Olarak Bölüm Kimliği SeçinBİRLİKBölümlerden Departman Kimliğini SEÇİN;

Bu size şunları verecektir:

Sorgu, yalnızca farklı departman kimliği değerleri olan 5 satır döndürür. Boş değer olan ilk değere dikkat edin.

SQLite UNION TÜM Örneği

Aşağıdaki örnekte, öğrenci tablosundan DepartmentId listesini ve aynı sütundaki bölümler tablosundan DepartmentId listesini alacağız:

Öğrencilerden Bölüm Kimliği Olarak Bölüm Kimliği SeçinBİRLİĞİ TÜMÜBölümlerden Departman Kimliğini SEÇİN;

Bu size şunları verecektir:

Sorgu 14 satır, öğrenci tablosundan 10 satır ve bölümler tablosundan 4 satır döndürecektir. Döndürülen değerlerde yinelemeler olduğunu unutmayın. Ayrıca, sütun adının ilk SELECT deyiminde belirtilen ad olduğunu unutmayın.

Şimdi, UNION ALL'u UNION ile değiştirirsek, UNION all'ın nasıl farklı sonuçlar vereceğini görelim:

SQLite INTERSECT

Her iki birleştirilmiş sonuç kümesinde bulunan değerleri döndürür. Birleşik sonuç kümelerinden birinde bulunan değerler göz ardı edilecektir.

Misal

Aşağıdaki sorguda, DepartmentId sütunundaki Öğrenciler ve Bölümler tablolarında bulunan DepartmentId değerlerini seçeceğiz:

Öğrencilerden Bölüm Kimliği SeçinKesişimBölümlerden Departman Kimliğini SEÇİN;

Bu size şunları verecektir:

Sorgu yalnızca 1, 2 ve 3 olmak üzere üç değer döndürür. Bunlar her iki tabloda da bulunan değerlerdir.

Ancak, null ve 4 değerleri dahil edilmedi çünkü null değer yalnızca öğrenciler tablosunda mevcut ve bölümler tablosunda değil. Ve 4 değeri öğrenciler tablosunda değil bölümler tablosunda bulunur.

Bu nedenle hem NULL hem de 4 değerleri göz ardı edildi ve döndürülen değerlere dahil edilmedi.

DIŞINDA

Diyelim ki iki satır listeniz varsa, liste1 ve liste2 ve yalnızca liste1'deki ve list2'de bulunmayan satırları istiyorsanız, "EXCEPT" deyimini kullanabilirsiniz. EXCEPT yan tümcesi iki listeyi karşılaştırır ve list1'de bulunan ve list2'de bulunmayan satırları döndürür.

Misal

Aşağıdaki sorguda, departments tablosunda bulunan ve öğrenciler tablosunda bulunmayan DepartmentId değerlerini seçeceğiz:

Bölümlerden Departman Kimliği SeçinDIŞINDAÖğrencilerden Bölüm Kimliği Seçiniz;

Bu size şunları verecektir:

Sorgu yalnızca 4 değerini döndürür. Bu, bölümler tablosunda bulunan ve öğrenciler tablosunda bulunmayan tek değerdir.

BOŞ işleme

" NULL " değeri SQLite'da özel bir değerdir. Bilinmeyen veya eksik olan bir değeri temsil etmek için kullanılır. Boş değerin " 0 " veya boş "" değerinden tamamen farklı olduğuna dikkat edin . 0 ve boş değer bilinen bir değer olduğundan, ancak boş değer bilinmemektedir.

NULL değerler SQLite'da özel bir işlem gerektirir, şimdi NULL değerlerin nasıl işleneceğini göreceğiz.

NULL değerleri arayın

Boş değerleri aramak için normal eşitlik operatörünü (=) kullanamazsınız. Örneğin, aşağıdaki sorgu null DepartmentId değerine sahip öğrencileri arar:

SEÇİN * DepartmentId = NULL olan öğrencilerden;

Bu sorgu herhangi bir sonuç vermeyecektir:

NULL değeri, kendisi bir boş değer içeren başka herhangi bir değere eşit olmadığından, bu nedenle herhangi bir sonuç döndürmedi.

  • Ancak, sorgunun çalışmasını sağlamak için, aşağıdaki gibi boş değerleri aramak için "IS NULL" operatörünü kullanmanız gerekir :
Bölüm Kimliğinin BOŞ OLDUĞU ÖĞRENCİLERDEN SEÇ *;

Bu size şunları verecektir:

Sorgu, boş bir DepartmentId değerine sahip öğrencileri döndürür.

  • Boş olmayan değerleri almak istiyorsanız, şu şekilde " IS NOT NULL " operatörünü kullanmanız gerekir :
Bölüm Kimliğinin BOŞ OLMADIĞI ÖĞRENCİLERDEN SEÇ *;

Bu size şunları verecektir:

Sorgu, NULL DepartmentId değeri olmayan öğrencileri döndürür.

Koşullu sonuçlar

Bir değerler listeniz varsa ve bunlardan herhangi birini bazı koşullara göre seçmek istiyorsanız. Bunun için, o belirli değerin koşulunun seçilebilmesi için doğru olması gerekir.

CASE ifadesi, tüm değerler için bu koşullar listesini değerlendirecektir. Koşul doğruysa, o değeri döndürür.

Örneğin, bir "Derece" sütununuz varsa ve aşağıdaki gibi derece değerine göre bir metin değeri seçmek istiyorsanız:

- Not 85'ten yüksekse "Mükemmel".

- Not 70 ile 85 arasındaysa "Çok İyi".

- Not 60 ile 70 arasındaysa "İyi".

Daha sonra bunu yapmak için CASE ifadesini kullanabilirsiniz.

Bu, SELECT yan tümcesinde bazı mantıkları tanımlamak için kullanılabilir, böylece örneğin if ifadesi gibi belirli koşullara bağlı olarak belirli sonuçları seçebilirsiniz.

CASE operatörü aşağıdaki gibi farklı sözdizimleriyle tanımlanabilir:

  1. Farklı koşullar kullanabilirsiniz:
DURUMWHEN condition1 THEN sonuç1NE ZAMAN koşul2 SONRA sonuç2NE ZAMAN koşul3 SONRA sonuç3… BAŞKA sonuçSON
  1. Veya, yalnızca bir ifade kullanabilir ve aralarından seçim yapmak için farklı olası değerler koyabilirsiniz:
CASE ifadesiWHEN değer1 SONRA sonuç1NE ZAMAN değer2 SONRA sonuç2ZAMAN değer3 SONRA sonuç3… BAŞKA yenidenSON

ELSE yan tümcesinin isteğe bağlı olduğunu unutmayın.

Misal

Aşağıdaki örnekte, aşağıdaki gibi 'Bölüm Yok' metnini görüntülemek için Öğrenciler tablosundaki bölüm kimliği sütununda NULL değerine sahip CASE ifadesini kullanacağız :

SEÇÖğrenci adı,DURUMDepartman Kimliği BOŞ OLDUĞUNDA "Departman Yok"BAŞKA Departman KimliğiDepartman Kimliği Olarak SonlandırÖğrencilerden;
  • CASE operatörü, DepartmentId değerinin boş olup olmadığını kontrol edecektir.
  • NULL bir değer ise, DepartmentId değeri yerine 'Departman Yok' değişmez değerini seçecektir.
  • Boş bir değer değilse, DepartmentId sütununun değerini seçecektir.

Bu size aşağıda gösterildiği gibi çıktı verecektir:

Ortak tablo ifadesi

Ortak tablo ifadeleri (CTE'ler), SQL ifadesi içinde belirli bir adla tanımlanan alt sorgulardır.

Alt sorgulara göre bir avantajı vardır çünkü SQL deyimlerinin dışında tanımlanır ve sorguların okunmasını, sürdürülmesini ve anlaşılmasını kolaylaştırır.

Aşağıdaki gibi bir SELECT ifadesinin önüne WITH yan tümcesi koyarak ortak bir tablo ifadesi tanımlanabilir:

CTEname İLEGİBİ(SELECT ifadesi)CTE'DEN burada SELECT, UPDATE, INSERT veya güncelle deyimi

" CTEname ", CTE için verebileceğiniz herhangi bir addır, daha sonra başvurmak için kullanabilirsiniz. CTE'lerde SELECT, UPDATE, INSERT veya DELETE deyimini tanımlayabileceğinizi unutmayın.

Şimdi, SELECT yan tümcesinde CTE'nin nasıl kullanılacağına dair bir örnek görelim.

Misal

Aşağıdaki örnekte, bir SELECT ifadesinden bir CTE tanımlayacağız ve sonra onu daha sonra başka bir sorguda kullanacağız:

AllDepartments İLEGİBİ(Bölüm Kimliği, Bölüm Adı SEÇİNİZBölümlerden)SEÇs.StudentId,s.StudentName,a. Bölüm AdıÖğrencilerden ASINNER JOIN AllDepartments AS a ON s.DepartmentId = a.DepartmentId;

Bu sorguda bir CTE tanımladık ve ona " AllDepartments " adını verdik . Bu CTE, bir SELECT sorgusundan tanımlandı:

 Bölüm Kimliği, Bölüm Adı SEÇİNİZBölümlerden

Daha sonra CTE'yi tanımladıktan sonra onu takip eden SELECT sorgusunda kullandık.

Ortak tablo ifadelerinin sorgunun çıktısını etkilemediğini unutmayın. Aynı sorguda yeniden kullanmak için mantıksal bir görünüm veya alt sorgu tanımlamanın bir yoludur. Yaygın tablo ifadeleri, tanımladığınız bir değişken gibidir ve onu bir alt sorgu olarak yeniden kullanır. Yalnızca SELECT ifadesi sorgunun çıktısını etkiler.

Bu sorgu size şunları verecektir:

Gelişmiş sorgular

Gelişmiş sorgular, karmaşık birleşimler, alt sorgular ve bazı toplamalar içeren sorgulardır. Aşağıdaki bölümde gelişmiş bir sorgu örneği göreceğiz:

Nereden alıyoruz

  • Her bölüm için tüm öğrencilerin bulunduğu bölüm isimleri
  • Virgülle ayrılmış öğrencilerin adı ve
  • İçinde en az üç öğrenci bulunan bölümü gösterme
SEÇd. Bölüm Adı,COUNT (s.StudentId) StudentCount,GROUP_CONCAT (StudentName) AS ÖğrencilerBölümlerden AS dİÇ BİRLEŞTİRİLMİŞ Öğrenciler AÇIK olarak Bölüm Kimliği = d Bölüm KimliğiGRUP TARAFINDAN d. Departman AdıSAYISI (Öğrenci Kimliği)> = 3;

Departman Adını Departmanlar tablosundan almak için bir JOIN cümlesi ekledik. Bundan sonra, iki toplama işlevine sahip bir GROUP BY cümlesi ekledik:

  • Her bölüm grubu için öğrencileri saymak için "COUNT".
  • GROUP_CONCAT, her grup için öğrencileri virgülle ayrılmış bir dizede birleştirmek için.
  • GROUP BY'dan sonra, HAVING yan tümcesini bölümleri filtrelemek için kullandık ve yalnızca en az 3 öğrencisi olan bölümleri seçtik.

Sonuç aşağıdaki gibi olacaktır:

Özet:

Bu, SQLite sorguları yazmaya ve veritabanını sorgulamanın temellerine ve döndürülen verileri nasıl filtreleyebileceğinize bir girişti. Artık kendi SQLite sorgularınızı yazabilirsiniz.