ms erişimde sql sorgusu. giriiş

SQL - Ders 4. Veri seçme - SELECT deyimi

Dolayısıyla, forum veri tabanımızda üç tablo vardır: kullanıcılar (kullanıcılar), konular (konular) ve gönderiler (mesajlar). Ve hangi verileri içerdiklerini görmek istiyoruz. Bunu yapmak için SQL'de bir operatör var. SEÇME. Bunu kullanmak için sözdizimi aşağıdaki gibidir:

SELECT_what FROM'dan select_from;


"what_to_select" yerine, değerlerini görmek istediğimiz sütunun adını veya virgülle ayrılmış birkaç sütunun adını veya tüm sütunların seçimi anlamına gelen yıldız karakterini (*) belirtmeliyiz. masa "from_choose" yerine tablonun adını belirtmelisiniz.

Önce users tablosundaki tüm sütunlara bakalım:

KULLANICILARDAN * SEÇİN;

Bu tabloya girdiğimiz tüm verilerimiz bu kadar. Ancak, yalnızca id_user sütununa bakmak istediğimizi varsayalım (örneğin, son derste, konular tablosunu doldurmak için users tablosunda hangi id_users'lerin olduğunu bilmemiz gerekiyordu). Bunu yapmak için, sorguda bu sütunun adını belirteceğiz:

kullanıcılardan id_user SEÇİN;

Örneğin, kullanıcılarımızın adlarını ve e-postalarını görmek istiyorsak, ilgilenilen sütunları virgülle ayırarak listeleyeceğiz:

Kullanıcılardan isim, e-posta SEÇİN;

Benzer şekilde diğer tablolarımızın hangi verileri içerdiğini görebilirsiniz. Bakalım hangi konulara sahibiz:

SEÇ * KONULARDAN;

Şimdi sadece 4 başlığımız var ve bunlardan 100 tane varsa? Örneğin alfabetik olarak görüntülenmelerini istiyorum. SQL'de bunun için bir anahtar kelime var. TARAFINDAN SİPARİŞ ardından sıralamanın gerçekleştirileceği sütunun adı gelir. Sözdizimi aşağıdaki gibidir:

sort_column_name TARAFINDAN tablo_adı SİPARİŞİNDEN sütun_adı SEÇİN;



Varsayılan sıralama artan şekildedir, ancak bu, anahtar kelime eklenerek değiştirilebilir. TANIM

Artık verilerimiz azalan düzende sıralanmıştır.

Aynı anda birkaç sütuna göre sıralayabilirsiniz. Örneğin, aşağıdaki sorgu, verileri konu_adı sütununa göre sıralar ve bu sütunda birkaç özdeş satır varsa, id_author sütunu azalan düzende sıralanır:

Sonucu önceki sorgunun sonucuyla karşılaştırın.

Çoğu zaman tablodaki tüm bilgilere ihtiyacımız olmaz. Örneğin, sveta (id=4) kullanıcısı tarafından hangi konuların oluşturulduğunu bilmek istiyoruz. SQL'de bunun için bir anahtar kelime var. NEREDE, böyle bir isteğin sözdizimi aşağıdaki gibidir:

Örneğimiz için koşul, kullanıcı kimliğidir, örn. sadece id_author sütununda (kullanıcı kimliği sveta) 4 bulunan satırları istiyoruz:

Veya "bisikletler" temasını kimin yarattığını bilmek istiyoruz:

Elbette yazar kimliği yerine yazar adının gösterilmesi daha uygun olur ancak isimler başka bir tabloda saklanıyor. Daha sonraki derslerde, birden çok tablodan veri seçmeyi öğreneceğiz. Bu arada WHERE anahtar sözcüğü kullanılarak hangi koşulların belirtilebileceğini öğrenelim.

Şebeke Tanım
= (eşit) Belirtilen değerlere eşit seçilen değerler

Örnek:

id_author=4; NEREDE konulardan SEÇİN *

Sonuç:

> (daha fazla) Belirtilenden büyük değerler seçilir

Örnek:

İD_yazar>2;

Sonuç:

< (меньше) Belirtilenden küçük değerler seçilir

Örnek:

İD_yazarın NEREDE olduğu konulardan * SEÇİN
Sonuç:

>= (büyüktür veya eşittir) Belirtilen değerden büyük veya ona eşit değerler seçilir.

Örnek:

SEÇİN * konulardan NEREDE id_author>=2;

Sonuç:

<= (меньше или равно) Belirtilen değerden küçük veya ona eşit değerler seçilir.

Örnek:

İD_yazarın NEREDE olduğu konulardan * SEÇİN
Sonuç:

!= (eşit değil) Belirtilene eşit olmayan değerler seçilir

Örnek:

İD_author!=1; NEREDE konulardan SEÇİN *

Sonuç:

BOŞ DEĞİL Belirtilen alanda değerleri olan satırlar seçilir

Örnek:

SEÇİN * id_author'un NULL OLMADIĞI konulardan;

Sonuç:

BOŞ Belirtilen alanda değeri olmayan satırlar seçilir.

Örnek:

SEÇİN * id_author NULL OLDUĞU KONULARDAN;

Sonuç:

Boş küme - böyle bir dizi yok.

ARASINDA (arasında) Belirtilen değerler arasındaki değerler seçilir.

Örnek:

SEÇİN * id_author 1 VE 3 ARASINDAKİ konulardan;

Sonuç:

IN (içerdiği değer) Belirtilen değerlere karşılık gelen değerler

Örnek:

SEÇİN * id_author IN (1, 4) NEREDEKİ konulardan;

Sonuç:

NOT IN (değer içermiyor) Belirtilenlerin dışında seçilen değerler

Örnek:

SEÇİN * id_author'UN (1, 4) İÇİNDE OLMADIĞI konulardan;

Sonuç:

BEĞEN (eşleşme) Örnek değerler seçilir

Örnek:

SEÇİN * "vel%" GİBİ topic_name NEREDE konulardan;

Sonuç:

LIKE operatörünün olası metakarakterleri aşağıda tartışılacaktır.

GİBİ DEĞİL Örneklemle eşleşmeyen değerler seçilir

Örnek:

* Konu_adı "vel%" GİBİ OLMAYAN konulardan SEÇİN;

Sonuç:

LIKE operatörü meta karakterleri

Meta karakter aramaları sadece metin alanlarında yapılabilir.

En yaygın meta karakter % . Herhangi bir karakter anlamına gelir. Örneğin "vel" harfleriyle başlayan kelimeleri bulmak istiyorsak LIKE "vel%" yazacağız ve "club" karakterlerini içeren kelimeleri bulmak istiyorsak LIKE "% yazacağız. kulüp%". Örneğin:

Yaygın olarak kullanılan başka bir meta karakter _ . Az sayıda karakteri veya hiç karakteri ifade etmeyen %'den farklı olarak, alt çizgi tam olarak bir karakteri belirtir. Örneğin:

Meta karakter ile "balık" arasındaki boşluğa dikkat edin, onu atlarsanız istek çalışmaz çünkü meta karakter _ tam olarak bir karakteri temsil eder ve boşluk da bir karakterdir.

Bugünlük bu kadar yeter. Bir sonraki derste, iki veya daha fazla tabloyu nasıl sorgulayacağımızı öğreneceğiz. Bu arada gönderiler tablosuna (mesajlar) karşı kendi sorgularınızı yapmaya çalışın.

Bu ders hakkında SQL sorgularıüzerindeki veri tabanına VBA Erişimi. Veritabanına INSERT, UPDATE, DELETE VBA sorgularının nasıl yapıldığına bakacağız ve ayrıca bir SELECT sorgusundan belirli bir değerin nasıl alınacağını öğreneceğiz.

program yapanlar VBA Erişimi ve bir SQL sunucu veritabanıyla çalışırken, INSERT, UPDATE veya basit bir SQL SELECT sorgusu olsun, genellikle veritabanına bir SQL sorgusu göndermek gibi basit ve gerekli bir görevle karşı karşıya kalırlar. Acemi programcılar olduğumuz için bunu da yapabilmeliyiz, o yüzden bugün tam da bunu yapacağız.

Bu verileri elde etmek için VBA'da kod yazdığımız bir SQL sunucusundan veri alma konusuna zaten değinmiştik, örneğin MSSql 2008'den bir metin dosyasına veri yükleme hakkındaki bir makalede veya ayrıca malzemeye biraz değindik. Access'ten bir Word ve Excel şablonuna veri yükleme, ancak öyle ya da böyle orada bunu yüzeysel olarak değerlendirdik ve bugün bunun hakkında biraz daha ayrıntılı konuşmayı öneriyorum.

Not! Aşağıdaki tüm örnekler, bir Access 2003 ADP projesi ve bir MSSql 2008 veritabanı kullanılarak ele alınmıştır.

Örnekler için başlangıç ​​verileri

Diyelim ki bir yıldaki ayların sayılarını ve adlarını içeren bir test_table tablomuz var (sorgular kullanılarak yapılır) yönetim stüdyosu)

TABLO OLUŞTUR .( NULL DEĞİL, (50) NULL) ON GO

Dediğim gibi, MS SQL 2008 ile çalışacak şekilde yapılandırılmış bir ADP projesi kullanacağız, bu projede bir test formu oluşturdum ve bir resim yazısı ile bir başlat düğmesi ekledim. "Koşmak", yani kodumuzu test etmemiz gerekecek. tüm kodu olay işleyicisine yazacağız " Düğmeye basın».

Veritabanı sorguları VBA'da INSERT, UPDATE, DELETE

Uzun süre uzatmamak için başlayalım, test tablomuza bir satır eklememiz gerekiyor diyelim ( kod yorumlandı)/

Private Sub start_Click() "Dim sql_query As String sorgu dizesini saklamak için bir değişken tanımlayın "İçine ihtiyacımız olan sorguyu yazın sql_query = "INSERT INTO test_table (id, name_mon) VALUES ("6", "June")" "Yürüt DoCmd.RunSQL sql_query End Sub ile

Bu durumda sorgu, geçerli veritabanı bağlantı ayarları kullanılarak yürütülür. Verilerin eklenip eklenmediğini kontrol edebiliriz.

Gördüğünüz gibi, veriler eklendi.

Bir satırı silmek için aşağıdaki kodu yazıyoruz.

Private Sub start_Click() "Dim sql_query As String sorgu dizesini tutacak bir değişken tanımlayın "İçine bir silme sorgusu yazın sql_query = "DELETE test_table WHERE id = 6" "Yürüt DoCmd.RunSQL sql_query End Sub

Kontrol edersek istenilen satırın silindiğini görürüz.

Verileri güncellemek için sql_query değişkenine bir güncelleme sorgusu yazıyoruz, umarım anlamı anlaşılmıştır.

VBA'da veritabanına sorgu SEÇ

Burada işler diğer SQL yapılarından biraz daha ilginç.

Öncelikle tablodan tüm verileri almamız gerektiğini varsayalım ve örneğin onu işleyeceğiz ve bir mesajda göstereceğiz ve tabii ki başka amaçlar için kullanabilirsiniz, bunun için aşağıdakileri yazıyoruz kod

Private Sub start_Click() "Değişkenlerin bildirilmesi "veritabanından bir kayıt kümesi için Dim RS As ADODB.Recordset "Query string Dim sql_query As String "Mesajdaki toplam verileri görüntülemek için string Dim str As String "Kayıt seti için yeni bir nesne oluşturma RS = Yeni ADODB .Recordset "Sorgu dizisi sql_query = "test_table FROM id, name_mon SEÇ" "Bir mesaj görüntülemek için geçerli proje bağlantı ayarlarını kullanarak sorguyu yürütün str = str & RS.Fields("id") & "-" & RS. Alanlar("name_mon") & vbnewline "sonraki kayda git RS.MoveNext Wend "Çıkış mesajı msgbox str End Sub

Burada, kayıt kümemizdeki tüm değerler arasında geçiş yapmak için zaten VBA Erişim Döngülerini kullanıyoruz.

Ancak, çoğu zaman bir dizi kayıttan tüm değerleri değil, yalnızca bir tanesini, örneğin koduna göre ayın adını almak gerekir. Ve bunun için, bir döngü kullanmak bir şekilde pahalıdır, bu nedenle yalnızca bir değer döndürecek bir sorgu yazıp ona başvurabiliriz, örneğin, ayın adını kod 5 ile alacağız

Private Sub start_Click() "Değişkenlerin bildirilmesi "Veritabanından bir kayıt kümesi için Dim RS As ADODB.Recordset "Query string Dim sql_query As String "Son değeri görüntülemek için string Dim str As String "Kayıt seti için yeni bir nesne oluşturma RS = Yeni ADODB.Recordset "Query string sql_query =" test_table FROM WHERE id = 5 name_mon SEÇİN" "Mevcut proje bağlantı ayarlarını kullanarak sorguyu yürütün RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic "Değerimizi alın str = RS.Fields(0 ) msgbox str end sub

Evrensellik için, burada zaten hücre adına değil, indeksine göre hitap ettik, yani. 0, ilk değer olan Kayıt Kümesi, sonunda değeri aldık "Mayıs".

Gördüğünüz gibi, her şey oldukça basit. Sık sık veritabanından belirli bir değer almanız gerekiyorsa ( son örnekte olduğu gibi), o zaman tüm kodu ayrı bir işlevde (VBA Access 2003'te bir işlev nasıl yazılır) tek bir giriş parametresiyle, örneğin ay koduyla ( örneğimizi dikkate alarak) ve basitçe, bu değeri görüntülemek gerektiğinde, ihtiyacımız olan işlevi gerekli parametre ile çağırın ve işte bu kadar, VBA kodunu önemli ölçüde azaltacağız ve programımızın algısını iyileştireceğiz.

Hepsi bugün için. İyi şanlar!

"Mağaza" eğitim projesinin açıklaması

Tablo bağlantı şeması

tabloların açıklaması

m_category - ürün kategorileri

m_income - mal girişi

m_outcome - mal tüketimi

m_product - dizin, ürün açıklaması

m_supplier - dizin; Tedarikçi bilgileri

m_unit - dizin; birimler

Bu eğitimde verilen örnekleri pratik olarak test etmek için aşağıdaki yazılıma sahip olmanız gerekir:

Microsoft Access 2003 veya sonrası.

MS Access'te SQL sorgusu. Başlangıç

Bir tablonun içeriğini görmek için sol bölmedeki tablo adına çift tıklayın:

Tablo alanı düzenleme moduna geçmek için üst panelde Tasarım modunu seçin:

Bir SQL sorgusunun sonucunu görüntülemek için sol bölmedeki sorgu adına çift tıklayın:

SQL sorgusu düzenleme moduna geçmek için üst panelde SQL modunu seçin:

SQL sorgusu. MS Access'teki örnekler. SEÇİN: 1-10

Bir SQL sorgusunda, veritabanı tablolarından seçim yapmak için SELECT deyimi kullanılır.

SQL sorgusu Q001.İstenen sırayla yalnızca gerekli alanları almak için örnek bir SQL sorgusu:

dt, product_id, miktarı SEÇİN


m_income'dan;

SQL sorgusu Q002. Bu SQL sorgu örneğinde, m_product tablosunun tüm sütunlarını görüntülemek, başka bir deyişle m_product ilişkisinin tüm alanlarını almak için yıldız karakteri (*) kullanılmıştır:

SEÇME*
m_product'dan;

Rica etmekSQLQ003. DISTINCT deyimi, yinelenen kayıtları ortadan kaldırmak ve birçok benzersiz kayıt elde etmek için kullanılır:

DISTINCT product_id SEÇİN


m_income'dan;

SQL sorgusu Q004. ORDER BY ifadesi, kayıtları belirli bir alanın değerlerine göre sıralamak (sıralamak) için kullanılır. Alan adı, ORDER BY deyimini takip eder:

SEÇME*
m_income'dan


FİYATA GÖRE SİPARİŞ;

SQL sorgusu Q005. ASC deyimi, ORDER BY deyimine ek olarak kullanılır ve artan sıralamayı tanımlamak için kullanılır. DESC deyimi, ORDER BY deyimine ek olarak kullanılır ve azalan sıralamayı tanımlamak için kullanılır. Ne ASC ne de DESC belirtilmediğinde, ASC'nin (varsayılan) olduğu varsayılır:

SEÇME*
m_income'dan


SİPARİŞ TARAFINDAN dt TANIM , fiyat;

SQL sorgusu Q006. Tablodan gerekli kayıtları seçmek için seçim koşulunu ifade eden çeşitli mantıksal ifadeler kullanılır. Boole ifadesi WHERE yan tümcesinden sonra gelir. Miktar değeri 200'den büyük olan tüm kayıtları m_income tablosundan almaya bir örnek:

SEÇME*
m_income'dan


NEREDE miktar>200;

SQL sorgusu Q007. Karmaşık koşulları ifade etmek için AND (bağlaç), OR (ayırma) ve NOT (mantıksal olumsuzlama) mantıksal işlemleri kullanılır. Tutar değeri 20 ve fiyat değeri 10'dan büyük veya ona eşit olan tüm kayıtları m_outcome tablosundan almaya bir örnek:

fiyat


m_outcome'dan
NEREDE miktar=20 VE fiyat>=10;

SQL sorgusu Q008.İki veya daha fazla tablodaki verileri birleştirmek için INNER JOIN, LEFT JOIN, RIGHT JOIN deyimlerini kullanın. Aşağıdaki örnek m_income tablosundan dt, product_id, tutar, fiyat alanlarını ve m_product tablosundan title alanını alır. m_income.product_id değeri m_product.id değerine eşit olduğunda m_income tablosunun kaydı m_product tablosunun kaydına bağlanır:



AÇIK m_income.product_id=m_product.id;

SQL sorgusu Q009. Bu SQL sorgusunda dikkat etmeniz gereken iki şey vardır: 1) arama metni tek tırnak içine alınmıştır ("); 2) tarih, MS için doğru olan #Ay/Gün/Yıl# biçimindedir. Erişim Diğer sistemlerde tarih formatı farklı olabilir.12 Haziran 2011 tarihli sütün giriş bilgilerinin görüntülenmesi örneği. Tarih formatına dikkat edin #6/12/2011#:

dt, product_id, başlık, miktar, fiyat SEÇİN


m_income INNER JOIN'DEN m_product

WHERE title="Süt" And dt=#6/12/2011#; !}

SQL sorgusu Q010. BETWEEN komutu, bir değer aralığının kendisine ait olup olmadığını test etmek için kullanılır. 1 Haziran ile 30 Haziran 2011 arasında alınan mallarla ilgili bilgileri görüntüleyen örnek bir SQL sorgusu:

SEÇME*
m_income INNER JOIN'DEN m_product


AÇIK m_income.product_id=m_product.id
#6/1/2011# VE #6/30/2011# ARASINDA NEREDE;

SQL sorgusu. MS Access'teki örnekler. SEÇİN: 11-20

Bir SQL sorgusu diğerinin içine yerleştirilebilir. Bir alt sorgu, bir sorgu içindeki bir sorgudan başka bir şey değildir. Tipik olarak, bir WHERE yan tümcesinde bir alt sorgu kullanılır. Ancak alt sorguları kullanmanın başka yolları da vardır.

Q011'i isteyin. Kodları m_income tablosunda da bulunan m_product tablosundaki ürünlerle ilgili bilgileri görüntüler:

SEÇME*
m_product'dan


WHERE id IN (m_income'dan product_id SEÇİN);

Q012'yi isteyin. m_product tablosundaki, kodları m_outcome tablosunda olmayan ürünlerin bir listesi görüntülenir:

SEÇME*
m_product'dan


WHERE id NOT IN (m_outcome'DAN product_id SEÇİN);

Q013'ü talep edin. Bu SQL sorgusu, m_income tablosunda kodları olan ancak m_outcome tablosunda olmayan kodların ve ürün adlarının benzersiz bir listesini döndürür:

DISTINCT ürün_kimliği, başlık SEÇİN


m_income INNER JOIN'DEN m_product
AÇIK m_income.product_id=m_product.id
product_id NEREDE OLMAZ (m_outcome'DAN product_id SEÇİN);

Q014'ü isteyin. Adları M harfiyle başlayan m_category tablosundan benzersiz bir kategori listesi görüntülenir:

FARKLI başlık SEÇİN


m_product'dan
NEREDE başlık GİBİ "M*";

Q015'i isteyin. Bir sorgudaki alanlar üzerinde aritmetik işlemler gerçekleştirme ve bir sorgudaki alanları yeniden adlandırma (takma ad) örneği. Bu örnek, kârın satışların yüzde 7'si olduğunu varsayarak, her kalem tüketim kaydı için gider = miktar*fiyat ve kârı hesaplar:


tutar*fiyat/100*7 AS karı
m_outcome'dan;

Q016'yı talep edin. Aritmetik işlemleri analiz edip basitleştirerek sorgu yürütme hızını artırabilirsiniz:

dt, product_id, tutar, fiyat, miktar*fiyat OLARAK sonuç_toplamı SEÇİN,


sonuç_sum*0,07 AS karı
m_outcome'dan;

Q017 isteyin. INNER JOIN deyimini kullanarak birden çok tablodaki verileri birleştirebilirsiniz. Aşağıdaki örnekte ctgry_id değerine bağlı olarak m_income tablosundaki her giriş, ürünün ait olduğu m_category tablosundan kategorinin adıyla eşleştirilir:

c.title, b.title, dt, tutar, fiyat, tutar*fiyat OLARAK gelir_toplamı SEÇİN


KİMDEN (m_income AS a INNER JOIN m_product AS b ON a.product_id=b.id)
INNER JOIN m_category AS c ON b.ctgry_id=c.id
SIRALAMA c.title, b.title;

Q018'i isteyin. SUM - toplam, COUNT - miktar, AVG - aritmetik ortalama, MAX - maksimum değer, MIN - minimum değer gibi işlevlere toplama işlevleri denir. Birden fazla değer alırlar ve işlendiğinde tek bir değer döndürürler. TOPLA toplama işlevini kullanarak miktar ve fiyat alanlarının çarpımının toplamının hesaplanmasına bir örnek:

TOPLAM(miktar*fiyat) OLARAK Toplam_Toplam SEÇİN


m_income'dan;

Q019'u talep edin. Birden çok toplama işlevinin kullanımına bir örnek:

Sum(amount) AS Amount_Sum, AVG(amount) AS Amount_AVG,


MAKS(miktar) AS Miktar_Maks, Min(miktar) AS Miktar_Min,
Sayı(*) AS Toplam_Sayı
m_income'dan;

Q020 isteyin. Bu örnekte, Haziran 2011'de alınan 1 kodlu tüm kalemlerin toplamı hesaplanır:

Sum(miktar*fiyat) OLARAK gelir_toplamı SEÇİN


m_income'dan
#6/1/2011# VE #6/30/2011# ARASINDA product_id=1 VE dt NEREDE;.

Q021'i isteyin. Aşağıdaki SQL sorgusu, 4 veya 6 kodlu malların ne kadara satıldığını hesaplar:

Sonuç_toplamı olarak Sum(miktar*fiyat) SEÇİN


m_outcome'dan
NEREDE product_id=4 VEYA product_id=6;

Q022'yi isteyin. 12 Haziran 2011 tarihinde 4 veya 6 kodlu malın ne kadar satıldığı hesaplanır:

Sonuç_toplamı OLARAK Toplam(miktar*fiyat) SEÇİN


m_outcome'dan
NEREDE (product_id=4 VEYA product_id=6) VE dt=#6/12/2011#;

Q023'ü isteyin. Görev şudur. "Fırınlı ürünler" kategorisindeki ürünlerin alacaklandırıldığı toplam tutarı hesaplayın.

Bu sorunu çözmek için üç tablo üzerinde çalışmanız gerekir: m_income, m_product ve m_category, çünkü:


- kredilendirilen malların miktarı ve fiyatı m_income tablosunda saklanır;
- her ürünün kategori kodu m_product tablosunda saklanır;
- kategori başlığının adı m_category tablosunda saklanır.

Bu sorunu çözmek için aşağıdaki algoritmayı kullanıyoruz:


- bir alt sorgu aracılığıyla m_category tablosundan "Fırın ürünleri" kategori kodunun belirlenmesi;
- kredilendirilen her bir ürünün kategorisini belirlemek için m_income ve m_product tablolarının birleştirilmesi;
- kategori kodu yukarıdaki alt sorgu tarafından tanımlanan koda eşit olan mallar için giriş tutarının (= miktar * fiyat) hesaplanması.
SEÇME
m_product AS'DEN a INNER JOIN m_income AS b ON a.id=b.product_id
WHERE ctgry_id = (m_category'DEN İD SEÇİN WHERE title=" Unlu Mamüller"); !}

Q024'ü isteyin."Unlu mamuller" kategorisinde kredilendirilen ürünlerin toplam miktarını hesaplama sorunu aşağıdaki algoritma ile çözülecektir:
- m_category tablosundaki product_id değerine bağlı olarak m_income tablosunun her kaydı, kategorinin adıyla eşleşir;
- kategorisi "Fırın ürünleri"ne eşit olan kayıtları seçin;
- gelir miktarını hesaplayın = miktar * fiyat.

KİMDEN (m_product AS a INNER JOIN m_income AS b ON a.id=b.product_id)

WHERE c.title="Fırın ürünleri"; !}

Q025'i isteyin. Bu örnek, kaç öğenin tüketildiğini hesaplar:

product_cnt OLARAK COUNT(product_id) SEÇİN


FROM (m_outcome FROM DISTINCT product_id SEÇİN) AS t;

Q026'yı isteyin. GROUP BY yan tümcesi kayıtları gruplandırmak için kullanılır. Tipik olarak, kayıtlar bir veya daha fazla alanın değerine göre gruplandırılır ve her gruba bir toplama işlemi uygulanır. Örneğin, aşağıdaki sorgu mal satışına ilişkin bir rapor oluşturur. Yani, malların adlarını ve satıldıkları tutarı içeren bir tablo oluşturulur:

Başlık, TOPLAM(miktar*fiyat) AS sonuç_toplamı SEÇİN


m_product AS a INNER JOIN m_outcome AS b'den
a.id=b.product_id AÇIK
Başlığa göre GRUP;

Q027 isteyin. Kategoriye göre satış raporu. Yani, ürün kategorilerinin adlarını, bu kategorilerdeki malların satıldığı toplam tutarı ve ortalama satış tutarını içerecek bir tablo oluşturulur. ROUND işlevi, ortalama değeri en yakın yüzlüğe (ondalık ayırıcıdan sonraki ikinci ondalık basamak) yuvarlamak için kullanılır:

c.title, SUM(miktar*fiyat) OLARAK sonuç_toplamı SEÇİN,


YUVARLAK(ORT(miktar*fiyat),2) SONUÇ_SUM_ORT.
FROM (m_product AS a INNER JOIN m_outcome AS b ON a.id=b.product_id)
INNER JOIN m_category AS c ON a.ctgry_id=c.id
C.BAŞLIĞA GÖRE GRUPLAMA;

Q028'i isteyin. Her ürün için, fişlerinin toplam ve ortalama sayısı hesaplanır ve toplam fiş sayısı en az 500 olan mallar hakkında bilgi görüntüler:

product_id, SUM(amount) OLARAK miktar_sum SEÇİN,


Yuvarlak(Ort(tutar),2) AS miktar_ortalama
m_income'dan
GROUP BY BY product_id
Toplam(miktar)>=500 OLARAK;

Q029'u talep edin. Bu sorgu, her kalem için 2011'in ikinci çeyreğinde yapılan girişlerinin toplamını ve ortalamasını hesaplar. Toplam mal girişi miktarı 1000'den az değilse, bu ürünle ilgili bilgiler görüntülenir:

Başlık, TOPLAM(miktar*fiyat) AS gelir_toplamı SEÇİN


m_income a INNER JOIN m_product b AÇIK a.product_id=b.id
#4/1/2011# VE #6/30/2011# ARASINDA NEREDE
Başlığa göre GRUPLA
TOPLAM(miktar*fiyat)>=1000;

Q030'u isteyin. Bazı durumlarda, bir tablonun her kaydını başka bir tablonun her kaydıyla eşleştirmek gerekir; buna Kartezyen çarpım denir. Böyle bir birleştirme sonucunda ortaya çıkan tabloya Descartes tablosu denir. Örneğin, A tablosunda 100 giriş ve B tablosunda 15 giriş varsa, Kartezyen tabloları 100*15=150 girişten oluşacaktır. Aşağıdaki sorgu m_income tablosundaki her girişi m_outcome tablosundaki her girişle birleştirir:
m_income, m_outcome FROM;

Q031'i isteyin. Kayıtları iki alana göre gruplandırma örneği. Aşağıdaki SQL sorgusu, her tedarikçi için kendisinden alınan mal miktarını ve miktarını hesaplar:


TOPLAM(miktar*fiyat) AS gelir_toplamı

Q032'yi isteyin. Kayıtları iki alana göre gruplandırma örneği. Aşağıdaki sorgu, her tedarikçi için tarafımızdan satılan ürünlerinin miktarını ve miktarını hesaplar:

tedarikçi_kimliği, ürün_kimliği, SUM(amount) AS miktar_toplamını SEÇİN,




GRUPLANDIRMA TARAFINDAN tedarikçi_kimliği, ürün_kimliği;

Q033'ü isteyin. Bu örnekte, yukarıdaki iki sorgu (q031 ve q032) alt sorgu olarak kullanılmıştır. Bu sorguların sonuçları, LEFT JOIN yöntemi kullanılarak tek bir raporda birleştirilir. Aşağıdaki sorgu, her tedarikçi için alınan ve satılan ürünlerin sayısı ve miktarı hakkında bir rapor görüntüler. Bir ürün gelmişse ancak henüz satılmamışsa, bu kayıt için sonuç_sum hücresinin boş olacağına dikkat etmelisiniz. bu sorgunun, nispeten karmaşık sorguları bir alt sorgu olarak kullanmanın yalnızca bir örneği olduğunu. Büyük miktarda veri içeren bu SQL sorgusunun performansı sorgulanabilir:

SEÇME*
İTİBAREN



TOPLAM(miktar*fiyat) AS gelir_toplamı

a.product_id=b.id GROUP TARAFINDAN Supplier_id, product_id) OLARAK a
SOL YÖNDEN KATILIM
(tedarikçi_kimliği, ürün_kimliği, SUM(amount) OLARAK miktar_toplam SEÇİN,
TOPLA(miktar*fiyat) AS sonuç_toplamı
m_outcome AS a INNER JOIN m_product AS b'DEN
a.product_id=b.id GROUP BY BY Supplier_id, product_id) AS b
AÇIK (a.product_id=b.product_id) VE (a.supplier_id=b.supplier_id);

Q034'ü isteyin. Bu örnekte, yukarıdaki iki sorgu (q031 ve q032) alt sorgu olarak kullanılmıştır. Bu sorguların sonuçları, RIGTH JOIN yöntemi kullanılarak tek bir raporda birleştirilir. Aşağıdaki sorgu, her bir müşterinin kullandıkları ödeme sistemlerine ilişkin ödeme tutarları ve yaptıkları yatırım tutarları hakkında bir rapor yazdırır. Aşağıdaki sorgu, her tedarikçi için alınan ve satılan ürünlerin sayısı ve miktarı hakkında bir rapor görüntüler. Bir ürün zaten satılmış ancak henüz teslim alınmamışsa, bu giriş için gelir_toplamı hücresinin boş olacağını unutmayın. Bu tür boş hücrelerin varlığı, satış muhasebesinde bir hatanın göstergesidir, çünkü satıştan önce ilgili ürünün gelmesi gerekir:

SEÇME*
İTİBAREN


(tedarikçi_kimliği, ürün_kimliği, SUM(amount) OLARAK miktar_toplam SEÇİN,
TOPLAM(miktar*fiyat) AS gelir_toplamı
m_income AS a INNER JOIN m_product AS b AÇIK a.product_id=b.id
GROUP TARAFINDAN tedarikçi_kimliği, ürün_kimliği) AS a
SAĞ KATIL
(tedarikçi_kimliği, ürün_kimliği, SUM(amount) OLARAK miktar_toplam SEÇİN,
TOPLA(miktar*fiyat) AS sonuç_toplamı
m_outcome AS a INNER JOIN m_product AS b AÇIK a.product_id=b.id
GROUP TARAFINDAN tedarikçi_kimliği, ürün_kimliği) AS b
AÇIK (a.supplier_id=b.supplier_id) VE (a.product_id=b.product_id);

Q035'i isteyin.Ürüne göre gelir ve gider miktarına ilişkin bir rapor görüntülenir. Bunun için m_gelir ve m_outcome tablolarına göre bir ürün listesi oluşturulur, ardından bu listedeki her bir ürün için m_gelir tablosuna göre gelirlerinin toplamı ve m_outcome tablosuna göre giderlerinin toplamı hesaplanır:

product_id, SUM(in_amount) OLARAK gelir_amount SEÇİN,


SUM(out_amount) AS sonuç_amount
İTİBAREN
(product_id SEÇİN, miktar in_amount olarak, 0 AS out_amount SEÇİN
m_income'dan
BİRLİK TÜMÜ
product_id, 0 AS in_amount, miktar AS out_amount SEÇİN
FROM m_outcome) AS t
GROUP BY BY product_id;

Q036'yı isteyin. VAR işlevi, kendisine iletilen küme öğeler içeriyorsa DOĞRU döndürür. VAR işlevi, kendisine iletilen küme boşsa, yani hiç öğesi yoksa, YANLIŞ döndürür. Aşağıdaki sorgu, hem m_income tablosunda hem de m_outcome tablosunda bulunan ürün kodlarını döndürür:

DISTINCT product_id SEÇİN


m_income AS'DEN a
NEREDE VAR(m_outcome'DAN b olarak product_id SEÇİN

Q037 isteyin. Hem m_income tablosunda hem de m_outcome tablosunda bulunan ürün kodları görüntülenir:

DISTINCT product_id SEÇİN


m_income AS'DEN a
NEREDE product_id IN (m_outcome'DAN product_id SEÇİN)

Q038'i isteyin. m_income tablosunda yer alan ancak m_outcome tablosunda yer almayan ürün kodları görüntülenir:

DISTINCT product_id SEÇİN


m_income AS'DEN a
VAR OLMAYAN YERLER(b olarak m_outcome FROM product_id SEÇİN
NEREDE b.product_id=a.product_id);

Q039'u talep edin. En yüksek satış tutarına sahip ürünlerin listesi görüntülenir. Algoritma şudur. Her ürün için satışlarının toplamı hesaplanır. Daha sonra bu toplamların maksimumu belirlenir. Daha sonra, her bir ürün için, satışlarının toplamı yeniden hesaplanır ve satışların toplamı maksimuma eşit olan malların kodu ve satışlarının toplamı görüntülenir:

product_id, SUM(miktar*fiyat) OLARAK miktar_toplamı SEÇİN


m_outcome'dan
GROUP BY BY product_id
HAVING TOPLAM(miktar*fiyat) = (MAKS.SEÇ(s_amount)
FROM (ürün_kimliğine göre m_outcome GRUBU'NDAN s_amount OLARAK TOPLAM(miktar*fiyat) SEÇİN));

Q040 isteyin. Ayrılmış kelime IIF (koşullu operatör), mantıksal bir ifadeyi değerlendirmek ve sonuca bağlı olarak bir eylem gerçekleştirmek için kullanılır (DOĞRU veya YANLIŞ). Aşağıdaki örnekte, miktar 500'den azsa bir kalemin teslimatı "küçük" kabul edilir. Aksi takdirde, yani giriş miktarı 500'den büyük veya ona eşitse, teslimat "büyük" kabul edilir:

dt, product_id, miktar SEÇİN,


IIF(m_income'dan miktar;

SQL sorgusu Q041. IIF deyiminin birden fazla kullanıldığı durumlarda SWITCH deyimiyle değiştirilmesi daha uygundur. SWITCH operatörü (çoktan seçmeli operatör), mantıksal bir ifadeyi değerlendirmek ve sonuca bağlı olarak bir eylem gerçekleştirmek için kullanılır. Aşağıdaki örnekte, partideki mal miktarı 500'den az ise teslim edilen parti "küçük" olarak kabul edilir. Aksi takdirde, yani mal miktarı 500'den büyük veya ona eşitse, parti "büyük" olarak kabul edilir. ":

dt, product_id, miktar SEÇİN,


SWITCH(miktar =500,"büyük") AS işareti
m_income'dan;

Q042'yi isteyin. Bir sonraki sorguda gelen partideki mal miktarı 300'den az ise parti "küçük" kabul edilir. Aksi takdirde, yani koşul miktarı SELECT dt, product_id, tutar ise,
IIF(miktar IIF(miktar FROM m_income;

SQL sorgusu Q043. Bir sonraki sorguda gelen partideki mal miktarı 300'den az ise parti "küçük" kabul edilir. Aksi takdirde, yani koşul miktarı SELECT dt, product_id, tutar ise,
SWITCH(tutar miktar miktar>=1000,"büyük") AS işareti
m_income'dan;

SQL sorgusu Q044. Aşağıdaki sorguda satışlar üç gruba ayrılır: küçük (150'ye kadar), orta (150'den 300'e), büyük (300 ve üzeri). Ardından, her grup için toplam tutar hesaplanır:

Kategori SEÇİN, SUM(outcome_sum) AS Ctgry_Total


FROM (miktar*fiyat AS sonuç_toplamını SEÇİN,
IIf(miktar*fiyat IIf(m_outcome'dan miktar*fiyat) AS t
Kategoriye Göre Gruplandırın;

SQL sorgusu Q045. DateAdd işlevi, belirli bir tarihe gün, ay veya yıl eklemek ve yeni bir tarih almak için kullanılır. Sonraki istek:
1) dt alanından tarihe 30 gün ekler ve yeni tarihi dt_plus_30d alanında görüntüler;
2) dt alanından tarihe 1 ay ekleyin ve dt_plus_1m alanında yeni tarihi görüntüleyin:

dt, dateadd("d",30,dt) AS dt_plus_30d, dateadd("m",1,dt) AS dt_plus_1m SEÇİN


m_income'dan;

SQL sorgusu Q046. DateDiff işlevi, farklı birimlerde (günler, aylar veya yıllar) iki tarih arasındaki farkı hesaplamak için tasarlanmıştır. Aşağıdaki sorgu, dt alanındaki tarih ile geçerli tarih arasındaki farkı gün, ay ve yıl cinsinden hesaplar:

Last_day OLARAK dt, DateDiff("d",dt,Date()) SEÇİN,


DateDiff("m",dt,Date()) AS last_months,
DateDiff("yyyy",dt,Date()) AS last_years
m_income'dan;

SQL sorgusu Q047. Malların alındığı günden (m_income tablosu) güncel tarihe kadar olan gün sayısı, DateDiff işlevi kullanılarak hesaplanır ve son kullanma tarihi karşılaştırılır (tablo m_product):


DateDiff("d",dt,Date()) AS last_days
m_income AS a INNER JOIN m_product AS b'DEN
AÇIK a.product_id=b.id;

SQL sorgusu Q048. Malın teslim alındığı tarihten cari tarihe kadar geçen gün sayısı hesaplanır, ardından bu sayının son kullanma tarihini aşıp aşmadığı kontrol edilir:

a.id, product_id, dt, lifedays SEÇİN,


DateDiff("d",dt,Date()) AS last_days, IIf(last_days>lifedays,"Yes","No") AS date_expire
m_income a INNER JOIN m_product b'den
AÇIK a.product_id=b.id;

SQL sorgusu Q049. Malların alındığı tarihten cari tarihe kadar olan ay sayısı hesaplanır. Month_last1 sütunu mutlak ay sayısını hesaplar, month_last2 sütunu tam ay sayısını hesaplar:

dt, DateDiff("m",dt,Date())'i ay_son1 OLARAK SEÇİN,


DateDiff("m",dt,Date())-iif(day(dt)>day(date()),1,0) AS_ay_son2
m_income'dan;

SQL sorgusu Q050. 2011 için alınan mal miktarı ve miktarına ilişkin üç aylık bir rapor görüntülenir:

SELECT kvartal, SUM(outcome_sum) AS Toplam


FROM (miktar*fiyat AS sonuç_toplamını SEÇİN, ay(dt) AS m,
SWITCH(m =10.4) AS kvartal
m_income NEREDEN yıl(dt)=2011) AS t
GRUP BY bloğa göre;

Q051'i isteyin. Aşağıdaki sorgu, kullanıcıların sisteme malların alındığı miktardan daha büyük bir miktarda mal tüketimi hakkında bilgi girip girmediğini bulmaya yardımcı olur:

product_id, SUM(in_sum) AS gelir_sum, SUM(out_sum) AS output_sum SEÇİN


FROM (ürün_kimliği SEÇİN, miktar*fiyat gelen_toplam olarak, 0 çıkış_toplam olarak
m_income'dan
BİRLİK TÜMÜ
product_id, 0 in_sum olarak, miktar*price out_sum olarak SEÇİN
m_outcome'dan) AS t
GROUP BY BY product_id
HAVING TOPLAM(in_sum)
Q052'yi isteyin. Sorgu tarafından döndürülen satırların numaralandırılması farklı şekillerde gerçekleştirilir. Örneğin, MS Access'te hazırlanan bir raporun satırlarını MS Access'in kendisini kullanarak yeniden numaralandırabilirsiniz. VBA veya PHP gibi programlama dillerini kullanarak da yeniden numaralandırabilirsiniz. Ancak, bazen SQL sorgusunun kendisinde yapılması gerekir. Bu nedenle, aşağıdaki sorgu, kimlik alanındaki değerlerin artan sırasına göre m_income tablosunun satırlarını numaralandıracaktır:

COUNT(*) öğesini N, b.id, b.product_id, b.amount, b.price olarak SEÇİN


m_income a INNER JOIN m_income b ON a.id GROUP TARAFINDAN b.id, b.product_id, b.amount, b.price;

Q053'ü isteyin. Satış miktarına göre ürünler arasında ilk beş görüntülenir. İlk beş kaydın çıktısı, TOP komutu kullanılarak gerçekleştirilir:

TOP 5, product_id, sum(miktar*fiyat) TOPLAM OLARAK SEÇİN


m_outcome'dan
GROUP BY BY product_id
ORDER BY sum(miktar*fiyat) DESC;

Q054 isteyin.Ürünler arasında satış miktarına göre ilk beş sıralanır ve satırlar şu şekilde numaralandırılır:

COUNT(*) OLARAK N, b.product_id, b.summa SEÇİN


İTİBAREN


m_outcome GROUP TARAFINDAN product_id) OLARAK a
İÇ BİRLEŞİM
(product_id, sum(miktar*fiyat) TOPLAM OLARAK SEÇİN,
toplam*10000000+product_id AS kimliği
m_outcome GRUPTAN ürün_kimliğine Göre) AS b
ON a.id>=b.id
GRUP BY b.product_id, b.summa
SAYISI(*)SİPARİŞİ SAYISINA GÖRE(*);

Q055 isteyin. Aşağıdaki SQL sorgusu, MS Access SQL'de COS, SIN, TAN, SQRT, ^ ve ABS matematiksel fonksiyonlarının kullanımını gösterir:

SEÇİN (m_income'dan sayıyı(*) seçin) N olarak, 3.1415926 olarak pi, k,


2*pi*(k-1)/N x olarak, COS(x) COS_ olarak, SIN(x) SIN_ olarak, TAN(x) TAN_ olarak,
SQR(x) SQRT_ olarak, x^3 "x^3" olarak, ABS(x) ABS_ olarak
FROM (SEÇ SAYI(*) AS k
m_income'dan a INNER JOIN OLARAK m_income AS b ON a.idGROUP TARAFINDAN b.id) t;

SQL sorgusu. MS Access'teki örnekler. GÜNCELLEME: 1-10

U001'i isteyin. Aşağıdaki SQL değişiklik sorgusu, m_income tablosundaki kod 3'e sahip kalemlerin fiyatlarını %10 artırır:

UPDATE m_income SET fiyat = fiyat*1.1


NEREDE product_id=3;

U002'yi isteyin. Aşağıdaki SQL güncelleme sorgusu, m_income tablosundaki tüm ürünlerin miktarını, adları "Tereyağı" kelimesiyle başlayan 22 birim artırır:

UPDATE m_income SET miktarı = miktar+22


WHERE product_id IN ("Yağ*" GİBİ m_product FROM İD SEÇ);

U003'ü isteyin. m_outcome tablosundaki aşağıdaki SQL değişiklik sorgusu, OOO Sladkoe tarafından üretilen tüm malların fiyatlarını yüzde 2 oranında azaltır:

UPDATE m_outcome SET fiyat = fiyat*0,98


NEREDE product_id IN
(m_product a INNER JOIN m_supplier b'DEN a.id SEÇİN
a.supplier_id=b.id NEREDE b.title="OOO"Сладкое"");. !}

Laboratuvar #1

SQL: VERİLERİ AL - komutSEÇME

Çalışmanın amacı:

  • SQL deyimlerini öğrenin
  • SELECT komutunu kullanarak Access'te basit SQL sorguları oluşturmayı öğrenin;

· IN, BETWEEN, LIKE, IS NULL operatörlerinin kullanımı.

Egzersiz yapmak№1. ÖĞRENCİLER tablosundan İLK ADI ve SOYADI alanlarının tüm değerlerini SQL modunda seçmek için bir sorgu oluşturun.

ADI, SOYADI SEÇİN

ÖĞRENCİLERDEN;

Egzersiz yapmak№2 . ÖĞRENCİLER tablosunun tüm sütunları için SQL modunda bir seçme sorgusu oluşturun.

SEÇME*

ÖĞRENCİLERDEN;


Görev numarası 3. KİŞİSEL VERİLER tablosunda bilgileri bulunan öğrencilerin yaşadığı şehirlerin adlarını SQL modunda seçmek için bir sorgu oluşturun.

FARKLI ŞEHİR SEÇİN

[KİŞİSEL VERİLER]'DEN;

Görev numarası 4. Bilgileri ÖĞRENCİLER tablosunda bulunan Ivanov soyadına sahip tüm öğrencilerin adlarını seçen SQL modunda bir seçme sorgusu oluşturun.

SOYADI, ADI SEÇİN

ÖĞRENCİLERDEN

NEREDE SOYADI="Ivanov";

görev numarası 5. UIT-22 grubunda bütçe tarafından finanse edilen bir eğitim biçiminde okuyan öğrencilerin adlarını ve soyadlarını almak için SQL modunda bir seçim için bir sorgu oluşturun.

SOYADI, ADI SEÇİN

ÖĞRENCİLERDEN

WHERE GROUP="HIT-22" VE BÜTÇE=doğru;

görev numarası 6. SQL modunda bir sorgu oluşturun. SINAV GEÇME tablosundan bir örnek için sadece 4 ve 5 notu olan öğrenciler hakkında bilgi.

SEÇME*

İTİBAREN[DEĞİŞTİRMEKSINAVLAR]

NEREDESEVİYEİÇİNDE (4.5);

Görev numarası 7. IOSU konusunda sınav notu 3 olan öğrenciler hakkında bilgi örneği için bir zanpoc ve SQL modu oluşturun.

SEÇME*

İTİBAREN[DEĞİŞTİRMEKSINAVLAR]

NEREDEÖĞE=" ISSU" VeSEVİYEDeğil (4.5);

Görev numarası 8. Saatleri 100 ile 130 arasında olan kalemlerin kayıtlarını seçmek için SQL modunda bir sorgu oluşturun.

SEÇME*

İTİBARENÖĞELER

NEREDEKOL SAATİ100 İLE 130 ARASI;


Görev numarası 9.ÖĞRENCİLER tablosundan soyadları örneğin "C" harfiyle başlayan öğrenciler hakkında bilgi seçmek için SQL modunda bir sorgu oluşturun.

SEÇME*

İTİBARENÖĞRENCİLER

NEREDESOYADIBEĞENMEK"İLE*";

Çözüm: Laboratuvar çalışması sırasında SQL ifadeleriyle tanıştık, IN, BETWEEN, LIKE operatörlerini kullanarak SELECT komutunu kullanarak Access'te basit SQL sorguları oluşturmayı öğrendik.

SQL sorgu örnekleri, MS Access'te SQL sorguları yazmayı öğrenmek ve uygulamak için kullanılabilir.

Bir SQL sorgusu diğerinin içine yerleştirilebilir. Bir alt sorgu, bir sorgu içindeki bir sorgudan başka bir şey değildir. Tipik olarak, bir WHERE yan tümcesinde bir alt sorgu kullanılır. Ancak alt sorguları kullanmanın başka yolları da vardır.

Q011'i isteyin. Kodları m_income tablosunda da bulunan m_product tablosundaki ürünlerle ilgili bilgileri görüntüler:

SEÇME*
m_product'dan
WHERE id IN (m_income'dan product_id SEÇİN);

Q012'yi isteyin. m_product tablosundaki, kodları m_outcome tablosunda olmayan ürünlerin bir listesi görüntülenir:

SEÇME*
m_product'dan
WHERE id NOT IN (m_outcome'DAN product_id SEÇİN);

Q013'ü talep edin. Bu SQL sorgusu, m_income tablosunda kodları olan ancak m_outcome tablosunda olmayan kodların ve ürün adlarının benzersiz bir listesini döndürür:

DISTINCT ürün_kimliği, başlık SEÇİN
m_income INNER JOIN'DEN m_product
AÇIK m_income.product_id=m_product.id
product_id NEREDE OLMAZ (m_outcome'DAN product_id SEÇİN);

Q014'ü isteyin. Adları M harfiyle başlayan m_category tablosundan benzersiz bir kategori listesi görüntülenir:

FARKLI başlık SEÇİN
m_product'dan
NEREDE başlık GİBİ "M*";

Q015'i isteyin. Bir sorgudaki alanlar üzerinde aritmetik işlemler gerçekleştirme ve bir sorgudaki alanları yeniden adlandırma (takma ad) örneği. Bu örnek, kârın satışların yüzde 7'si olduğunu varsayarak, her kalem tüketim kaydı için gider = miktar*fiyat ve kârı hesaplar:


tutar*fiyat/100*7 AS karı
m_outcome'dan;

Q016'yı talep edin. Aritmetik işlemleri analiz edip basitleştirerek sorgu yürütme hızını artırabilirsiniz:

dt, product_id, tutar, fiyat, miktar*fiyat OLARAK sonuç_toplamı SEÇİN,
sonuç_sum*0,07 AS karı
m_outcome'dan;

Q017 isteyin. INNER JOIN deyimini kullanarak birden çok tablodaki verileri birleştirebilirsiniz. Aşağıdaki örnekte ctgry_id değerine bağlı olarak m_income tablosundaki her giriş, ürünün ait olduğu m_category tablosundan kategorinin adıyla eşleştirilir:

c.title, b.title, dt, tutar, fiyat, tutar*fiyat OLARAK gelir_toplamı SEÇİN
KİMDEN (m_income AS a INNER JOIN m_product AS b ON a.product_id=b.id)
INNER JOIN m_category AS c ON b.ctgry_id=c.id
SIRALAMA c.title, b.title;

Q018'i isteyin. SUM - toplam, COUNT - miktar, AVG - aritmetik ortalama, MAX - maksimum değer, MIN - minimum değer gibi işlevlere toplama işlevleri denir. Birden fazla değer alırlar ve işlendiğinde tek bir değer döndürürler. TOPLA toplama işlevini kullanarak miktar ve fiyat alanlarının çarpımının toplamının hesaplanmasına bir örnek.