Alt sorgu kullanarak bir sorguyu başka bir sorgunun veya bir ifadenin içine yerleştirme

Bazen bir sorgunun sonucu başka bir sorguda alan olarak veya bir sorgu alanının ölçütü olarak kullanmak isteyebilirsiniz. Örneğin, ürünlerinizin her biri için siparişler arasındaki süreyi öğrenmek istediğinizi kabul edelim. Bu aralığı gösteren bir sorgu oluşturmak için, bu ürünle ilgili her sipariş tarihini diğer sipariş tarihleriyle karşılaştırmanız gerekir. Bu sipariş tarihlerini karşılaştırmak için de bir sorgu gerekir. Bir <token>TE000126768</token> kullanarak bu sorguyu ana sorgunuzun içine yerleştirebilirsiniz.

Bir <token>TE000127167</token> içinde veya <token>TE000126761</token> bir Yapılandırılmış Sorgu Dili (SQL) deyiminde alt sorgu yazabilirsiniz.

Bu makalede:

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm1">Bir sorgunun sonuçlarını başka bir sorguda alan olarak kullan</link>

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm2">Alt sorguyu bir sorgu alanı için ölçüt olarak kullan</link>

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm3">Alt sorguda kullanabileceğiniz genel SQL anahtar sözcükleri</link>

Bir sorgunun sonuçlarını başka bir sorguda alan olarak kullan

Bir alt sorguyu alan diğer adı olarak kullanabilirsiniz. Alt sorgu sonuçlarını ana sorgunuzda alan olarak kullanmak istediğinizde alt sorguyu alan diğer adı olarak kullanın.

Not: Alan diğer adı olarak kullandığınız alt sorgu birden fazla alan döndüremez.

Alt sorgu alan diğer adını geçerli satırdaki diğer değerlere bağlı değerler görüntülemek için kullanabilirsiniz ve bunu bir alt sorgu kullanmadan yapmak mümkün değildir.

Örneğin, ürünlerinizin her biri için siparişler arasındaki süreyi görmek istediğiniz örneğe dönelim. Bu süreyi belirlemek için, her sipariş tarihini söz konusu ürünle ilgili diğer sipariş tarihleriyle karşılaştırmanız gerekir. Northwind veritabanı şablonunu kullanarak bu bilgileri gösteren bir sorgu oluşturabilirsiniz.

  1. <ui>Dosya</ui> sekmesinde <ui>Yeni</ui>'yi tıklatın.

  2. <ui>Kullanılabilir Şablonlar</ui>'ın altında <ui>Örnek Şablonlar</ui>'ı tıklatın.

  3. <ui>Northwind</ui>'i tıklatın ve sonra <ui>Oluştur</ui>'u tıklatın.

  4. Veritabanını açmak için <ui>Northwind Traders</ui> sayfasındaki (<ui>Başlangıç Ekranı</ui> nesnesi sekmesinde) yönergeleri izleyin ve sonra Oturum Açma İletişim Kutusu penceresini kapatın.

  5. <ui>Oluştur</ui> sekmesinde, <ui>Sorgular</ui> grubunda, <ui>Sorgu Tasarımı</ui>'nı tıklatın.

  6. <ui>Tabloyu Göster</ui> iletişim kutusunda, <ui>Sorgular</ui> sekmesini tıklatın ve sonra <ui>Ürün Siparişleri</ui>'ni tıklatın.

  7. <ui>Tabloyu Göster</ui> iletişim kutusunu kapatın.

  8. Sorgu tasarım kılavuzuna eklemek üzere <ui>Ürün Kimliği</ui> alanını ve <ui>Sipariş Tarihi</ui> alanını çift tıklatın.

  9. Kılavuzun <ui>Ürün Kimliği</ui> sütununun <ui>Sıralama</ui> satırında, <ui>Artan</ui>'ı seçin.

  10. Kılavuzun <ui>Sipariş Tarihi</ui> sütununun <ui>Sıralama</ui> satırında, <ui>Azalan</ui>'ı seçin.

  11. Kılavuzun üçüncü sütununda <ui>Alan</ui> satırını sağ tıklatın ve ardından kısayol menüsünde <ui>Yakınlaştır</ui>'ı tıklatın.

  12. <ui>Yakınlaştırma</ui> iletişim kutusunda, aşağıdaki ifadeyi yazın veya yapıştırın:

    Prior Date: (SELECT MAX([Order Date]) 
    FROM [Product Orders] AS [Old Orders]
    WHERE [Old Orders].[Order Date] < [Product Orders].[Order Date]
    AND [Old Orders].[Product ID] = [Product Orders].[Product ID])

    Bu ifade alt sorgudur. Her satır için, alt sorgu satırla ilişkili olan sipariş tarihinden daha eski olan en yeni sipariş tarihini seçer. Alt sorgudaki değerleri ana sorgunun geçerli satırındaki değerlerle karşılaştırabilmek için AS anahtar sözcüğünü kullanarak nasıl bir tablo diğer adı oluşturduğunuza dikkat edin.

  13. Kılavuzun dördüncü sütununda, <ui>Alan</ui> satırında, aşağıdaki ifadeyi yazın:

    <codeInline>Interval: [Order Date]-[Prior Date]</codeInline>

    Bu ifade, ürünün her sipariş tarihi ile önceki sipariş tarihini karşılaştırır ve bunu yaparken önceki tarih için alt sorgu kullanarak tanımladığımız değeri kullanır.<br />

  14. <ui>Tasarım</ui> sekmesinin <ui>Sonuçlar</ui> grubunda <ui>Çalıştır</ui>'a tıklayın.

    1. Sorgu çalışır ve ürün adlarını, sipariş tarihlerini, önceki sipariş tarihlerini ve sipariş tarihleri arasındaki süreleri içeren bir liste görüntüler. Sonuçlar önce Ürün No'ya (artan sıra) ve sonra Sipariş Tarihi'ne (azalan sıra) göre sıralanır.

    2. Not: Ürün No varsayılan olarak bir arama alanı olduğundan, Access asıl Ürün No değerleri yerine arama değerlerini (bu örnekte ürün adı) görüntüler. Bu görüntülenen değerleri değiştirse de sıralama düzenini değiştirmez.

  15. NorthWind veritabanını kapatın.

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#__top">Sayfanın Başı</link>

Alt sorguyu bir sorgu alanı için ölçüt olarak kullanma

Bir alt sorguyu alan ölçütü olarak kullanabilirsiniz. Alt sorgunun sonuçlarını bir alanın görüntülediği değerleri sınırlamak için kullanmak istediğinizde alt sorguyu alan ölçütü olarak kullanın.

Örneğin, satış temsilcisi <legacyItalic>olmayan</legacyItalic> çalışanlar tarafından işlenen siparişlerin listesini gözden geçirmek istediğinizi kabul edelim. Bu listeyi oluşturmak için, her sipariş için çalışan kimliğini satış temsilcisi olmayan çalışanların çalışan kimliklerini içeren bir listeyle karşılaştırmanız gerekir. Bu listesi oluşturmak ve alan ölçütü olarak kullanmak için, aşağıdaki yordamda gösterildiği gibi bir alt sorgu kullanırsınız:

  1. Northwind.accdb'yi açın ve içeriğini etkinleştirin.

  2. Oturum açma formunu kapatın.

  3. <ui>Oluştur</ui> sekmesinde, <ui>Diğer</ui> grubunda, <ui>Sorgu Tasarımı</ui>'nı tıklatın.

  4. <ui>Tabloyu Göster</ui> iletişim kutusunda, <ui>Tablolar</ui> sekmesinde, <ui>Siparişler</ui>'i ve <ui>Çalışanlar</ui>'ı çift tıklatın.

  5. <ui>Tabloyu Göster</ui> iletişim kutusunu kapatın.

  6. Siparişler tablosunda, <ui>Çalışan No</ui> alanını, <ui>Sipariş No</ui> alanını ve <ui>Sipariş Tarihi</ui> alanını çift tıklatarak sorgu tasarım kılavuzuna ekleyin. Çalışanlar tablosunda, <ui> İş Unvanı</ui> alanını çift tıklatarak tasarım kılavuzuna ekleyin.

  7. Çalışan No sütununun <ui>Ölçüt</ui> satırını sağ tıklatın ve kısayol menüsünde <ui>Yakınlaştır</ui>'ı tıklatın.

  8. <ui>Yakınlaştır</ui> kutusuna aşağıdaki ifadeyi yazın veya yapıştırın:

    IN (SELECT [ID] FROM [Employees] 
    WHERE [Job Title]<>'Sales Representative')

    Bu alt sorgudur. İş unvanı Satış Temsilcisi olmayan tüm çalışanların çalışan no'larını seçer ve bu sonuç kümesini ana sorguya sağlar. Ana sorgu da Siparişler tablosundaki çalışan no'larının sonuç kümesinde bulunup bulunmadığına bakar.

  9. <ui>Tasarım</ui> sekmesinin <ui>Sonuçlar</ui> grubunda <ui>Çalıştır</ui>'ı tıklatın.

    Sorgu çalışır ve sorgu sonuçları satış temsilcisi olmayan çalışanlar tarafından işlenmiş olan siparişlerin listesini görüntüler.

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#__top">Sayfanın Başı</link>

Alt sorguda kullanabileceğiniz genel SQL anahtar sözcükleri

Alt sorguyla kullanabileceğiniz birkaç SQL anahtar sözcüğü vardır.

Not: Bu liste tümünü kapsamaz. Veri tanımlama anahtar sözcükleri hariç olmak üzere herhangi bir geçerli SQL anahtar sözcüğünü kullanabilirsiniz.

  • <embeddedLabel>ALL</embeddedLabel> Alt sorgu tarafından döndürülen her satırla karşılaştırıldığında koşulu sağlayan satırları almak için WHERE yan tümcesinde ALL kullanın.

    Örneğin, bir üniversitede öğrenci verilerini çözümlediğinizi kabul edelim. Öğrencilerin, branştan branşa değişen bir en düşük not ortalamasını tutturmaları gerekmektedir. Branşlar ve en düşük not ortalamaları Branşlar adlı bir tabloda depolanmaktadır ve ilgili öğrenci bilgileri Öğrenci_Kayıtları adlı bir tabloda depolanmaktadır.

    Her öğrencinin en düşük not ortalamasını aştığı branşların (en düşük not ortalamalarının) listesini görmek için, aşağıdaki sorguyu kullanabilirsiniz:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • <embeddedLabel>ANY</embeddedLabel> Alt sorgu tarafından döndürülen satırlardan en az biriyle karşılaştırıldığında koşulu sağlayan satırları almak için WHERE yan tümcesinde ANY kullanın.

    Örneğin, bir üniversitede öğrenci verilerini çözümlediğinizi kabul edelim. Öğrencilerin, branştan branşa değişen bir en düşük not ortalamasını tutturmaları gerekmektedir. Branşlar ve en düşük not ortalamaları Branşlar adlı bir tabloda depolanmaktadır ve ilgili öğrenci bilgileri Öğrenci_Kayıtları adlı bir tabloda depolanmaktadır.

    Herhangi bir öğrencinin en düşük not ortalamasını tutturamadığı branşların (en düşük not ortalamalarının) listesini görmek için, aşağıdaki sorguyu kullanabilirsiniz:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] > ANY
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);

    Not: Aynı amaçla SOME anahtar sözcüğünü de kullanabilirsiniz; SOME anahtar sözcüğü ANY ile eş anlamlıdır.

  • <embeddedLabel>EXISTS</embeddedLabel> Alt sorgunun en az bir satır döndürmesi gerektiğini belirtmek için WHERE yan tümcesinde EXISTS kullanın. Alt sorgunun hiçbir satır döndürmemesi için EXISTS'in önüne NOT da ekleyebilirsiniz.

    Örneğin, aşağıdaki sorgu en az bir siparişte geçen ürünlerin listesini döndürür:

    SELECT *
    FROM [Products]
    WHERE EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);

    NOT EXISTS kullanıldığında, sorgu varolan siparişlerin en az birinde geçmeyen ürünlerin listesini döndürür:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • <embeddedLabel>IN</embeddedLabel> Ana sorgunun geçerli satırındaki bir değerin alt sorgunun döndürdüğü kümenin bir parçası olduğunu doğrulamak için WHERE yan tümcesinde IN kullanın.

    Örneğin, aşağıdaki sorgu satış temsilcisi olmayan çalışanlar tarafından işlenmiş olan siparişlerin (sipariş tarihleriyle birlikte) listesini döndürür:

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]<>'Sales Representative');

    NOT IN kullanarak, aynı soruyu aşağıdaki gibi yazabilirdiniz:

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] NOT IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]='Sales Representative');

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#__top">Sayfanın Başı</link>

Office yeteneklerinizi geliştirin
Eğitimleri keşfedin
Yeni özellikleri ilk olarak siz edinin
Office Insider Programına Katılın

Bu bilgi yararlı oldu mu?

Görüşleriniz için teşekkür ederiz!

Geri bildiriminiz için teşekkürler! Office destek temsilcilerimizden biriyle görüşmeniz yararlı olabilir.

×