KlavyeMonitor.com    


MENÜ

. ANASAYFA

. KABLOSUZ & TELSİZ

. AVUÇİÇİ & CEP

. LINUX

. WINDOWS

. WEB

. INTERNET

. BİLGİSAYAR

. ANTİK BİLGİ

. ARAMA

. BAĞLANTILAR

POPÜLERLER

htmlders

linux kitapları

proxy adresleri kablo

sayisal loto sans topu

elmekyonlen

TDGTW-WarXing

eposta yazim kurallari

BearShare Morpheus ve iMeshi Hizlandirma Yolu

proxy-hiz

komutlar

web hosting hizmetleri

inet-hiz

linux ile windowslari uyutmak

squidle2kat

yedekleme

internet hizi

database oracle mysql sql komutlari

windows mydoom virus

PDA ve cep telefonu icin www sayfasi yapimi


= = =

Favorilere ekle
Google

(SQL) Structured Query Language (Yapılandırılmış Sorgu Dili)


Structured Query Language (SQL) kılavuzu. Database engine'ler için, oracle, mysql, sql server 2000 vb. uyumlu SQL komutları.

İçindekiler


  • Önsöz

  • Veri Kullanma Dili

  • Deyimler

  • Select Deyimi .................................................................... 3

  • Delete Deyimi .................................................................... 8

  • Insert Into Deyimi .............................................................. 9

  • Select...Into Deyimi ............................................................11

  • Uptade Deyimi.................................................................... 12

  • Transform Deyimi ............................................................... 14

  • Execute Deyimi................................................................... 17

  • TRANSACTION Deyimi.......................................................... 18

  • Yan Tümceler

  • From Yan Tümcesi ................................................................ 18

  • Group By Yan Tümcesi........................................................... 22

  • Having Yan Tümcesi.............................................................. 25

  • In Yan Tümcesi .................................................................... 26

  • Order By Yan Tümcesi ........................................................... 28

  • Where Yan Tümcesi ............................................................... 29

  • Constraint Yan Tümcesi .......................................................... 32

  • Procedure Yan Tümcesi ........................................................... 34

  • İşlemler

  • Union İşlemi .......................................................................... 36

  • INNER JOIN İşlemi .................................................................. 37

  • LEFT JOIN, RIGHT JOIN İşlemleri .............................................. 39

  • İşleçler

  • Like İşleci ............................................................................... 41

  • Between...And İşleci ................................................................ 43

  • In İşleci ................................................................................. 43

  • Sql Toplam İşlevleri


  • Avg İşlevi ......................................................................................... 45

  • Count İşlevi ...................................................................................... 46

  • First, Last İşlevi ................................................................................ 47

  • Min, Max İşlevi ................................................................................. 50

  • Stdev, StDevP İşlevi .......................................................................... 51

  • Sum İşlevi ........................................................................................ 52

  • Var, VarP İşlevi .................................................................................. 53

  • Veri Tanımı Dili

  • Create Table Deyimi

  • Create Index Deyimi

  • Create Procedure Deyimi

  • Create User veya Group Deyimi

  • Create View Deyimi

  • Add User Deyimi

  • Drop User veya Group Deyimi

  • Alter Table Deyimi

  • Alter User veya Database Deyimi

  • Drop Deyimi

  • Grant Deyimi

  • Revoke Deyimi


  • Diğer

  • ALL, DISTINCT, DISTINCTROW, TOP Doğrulamaları ............................ 67

  • WITH OWNERACCESS OPTION Bildirimi ............................................. 71

  • SQL İşlevlerinde Alanları Hesaplama .................................................. 71

  • PARAMETERS Bildirimi ..................................................................... 72

  • SQL Alt Sorguları ... ......................................................................... 74

  • SQL Ayrılmış Sözcükleri .................................................................... 77

  • SQL Veri Türleri ............................................................................... 80

  • ODBC Tek Verili İşlevleri ................................................................... 81

  • Microsoft Jet SQL ve ANSI SQL Karşılaştırması ..................................... 82

  • Microsoft Jet SQL'in Gelişmiş Özellikleri ....... ....................................... 83

  • Microsoft Jet SQL İçinde Desteklenmeyen ANSI SQL Özellikleri ............... 83

  • Eşdeğer ANSI SQL Veri Türleri ........................................................... 83

  • Dize Karşılaştırmasında Joker Karakterlerini Kullanma .......................... 84

  • Sözlük


  • Başlangıç ......................................................................................... 84

  • Aralık .............................................................................................. 85

  • Text Veri türü .................................................................................. 85

  • Unicode Temsil Biçimi ........................................................................ 85

  • Yordam ........................................................................................... 85

  • Görünüm ......................................................................................... 85




Önsöz


Bu dokümanı benim gibi sql öğrenmek isteyenler ve sql hakkında Türkçe kaynak bulamayanlar için MS Access'in yardım bölümünden yararlanarak hazırladım. İtiraf etmek gerekirse her ne kadar yazıları hazır alsamda bu yazıları belirli bir düzene sokmak için çok uğraştım. Bu dokümanda en çok kullanılan sql komutlarını açıklama ve örnekleriyle birlikte bulacaksanız. Yararlı olacağı inancındayım. Belgede birtakım eksiklikler olabilir onlarıda mazur görün. Son olarakta bu belgeyi başka yerlerde kullanmak isteyen arkadaşlarımız (yazılar için değil çünkü ben yazmadım ) bu belgeyi hazırlamak için sarf ettiğim emeği göz önünde bulundurup kaynak belirtirlerse sevinirim.


Saadettin POLAT

(SQL)

Structured Query Language (Yapılandırılmış Sorgu Dili)


Sql Nedir?


İlişkisel veritabanlarını sorgulamak, güncellemek için kullanılan bir dildir.



Sql Nerelerde Kullanılır?


Programcılıkta (Delphi, VB v.b.), veritabanı programlarında ve veritabanına bağlı web sayfalarında (Asp v.b.) kullanılır.



VERİ KULLANMA DİLİ


  • Deyimler


SELECT Deyimi

Veritabanından bir kayıt kümesi şeklinde bilgi döndürmek Microsoft Jet veritabanı alt yapısına komut verir.

Sözdizimi

SELECT [doğrulama] { * | tablo.* | [tablo.]alan1 [AS diğerad1] [, [tablo.]alan2 [AS diğerad2] [, ...]]}
    FROM tabloifadesi [, ...] [IN dışveritabanı]
    [WHERE... ]
    [GROUP BY... ]
    [HAVING... ]
    [ORDER BY... ]
    [WITH OWNERACCESS OPTION]

SELECT deyiminin bölümleri şunlardır:

Bölüm

Açıklama

doğrulama

Şu doğrulamalardan biridir: ALL, DISTINCT, DISTINCTROW, or TOP. Doğrulamayı, döndürülecek kayıtların sayısını sınırlandırmak için kullanırsınız. Bunların hiçbiri belirtilmezse, varsayılan değer ALL'dur.

*

Belirtilen tablodan veya tablolarda tüm kayıtların seçileceğini belirtir.

tablo

İçinden kayıtların seçileceği alanları içeren tablonun adıdır.

alan1, alan2

Almak istediğiniz verileri içeren alanların adıdır. Birden fazla alan yazarsanız, alanlar listelendikleri sırada alınırlar.

diğerad1, diğerad2

Tablodaki özgün sütun adları yerine, sütun başlıkları olarak kullanılacak adlardır.

tabloifadesi

Almak istediğiniz verileri içeren tablo veya tabloların adıdır.

dışveritabanı

Tabloifadesi içindeki tablolardan, geçerli veritabanı içinde olmayanları içeren veritabanının adıdır.


Uyarılar

Bu işlemi gerçekleştirmek için, Microsoft® Jet veritabanı alt yapısı, belirtilen tablo veya tabloları arar, seçili sütunları tarar, ölçütlere uyan satırları seçer ve sonuç satırları belirtilen sırada sıralar veya gruplandırır.

SELECT deyimleri veritabanındaki verileri değiştirmezler.

SELECT genellikle bir SQL deyiminin ilk sözcüğüdür. Çoğu SQL deyimi SELECT veya SELECT...INTO deyimleridir.

SELECT deyiminin en kısa sözdizimi şöyledir:

SELECT alanlar FROM tablo

Tablodaki tüm dizinleri seçmek için bir yıldız (*) simgesi de kullanabilirsiniz. Aşağıdaki örnek, Çalışanlar tablosundaki tüm alanları seçer.

SELECT * FROM Çalışanlar;

FROM yan tümcesinde bir alan adı birden fazla tabloda yer alıyorsa, alan adından önce tablo adını ve ardından . (nokta) işaretini yazın. Aşağıdaki örnekte, Bölüm alanı hem Çalışanlar hem de Denetçiler tablosunda bulunmaktadır. SQL deyimi, Çalışanlar tablosundan bölümleri ve Denetçiler tablosundan denetçi adlarını seçer:

SELECT Çalışanlar.Bölüm, Denetçiler.DenetçiAdı

FROM Çalışanlar INNER JOIN Denetçiler

WHERE Çalışanlar.Bölüm = Denetçiler.Bölüm;

Bir RecordSet nesnesi oluşturulduğunda, Microsoft Jet veritabanı alt yapısı tablonun alan adını recordset nesnesi içinde Field nesnesi adı olarak kullanır. Farklı bir alan adı isterseniz veya alan oluşturmak üzere kullanılan ifadede bir ad belirtilmezse, AS saklı sözcüğünü kullanın. Aşağıdaki örnek, sonuç recordset nesnesinde döndürülen field nesnesini adlandırmak için Doğum başlığını kullanır:

SELECT DoğumTarihi

AS Doğum FROM Çalışanlar;

Tanımsız veya yinelenen Alan nesne adları döndüren toplam işlevleri veya sorgular kullanırken, Field nesnesi için farklı bir ad sağlamak üzere AS yan tümcesini kullanmalısınız. Aşağıdaki örnek, sonuç RecordSet nesnesinde döndürülen Field nesnesini adlandırmak için Merkez başlığını kullanır:

SELECT COUNT(ÇalışanNo)

AS Merkez FROM Çalışanlar;

Döndürülecek verileri daha fazla kısıtlamak veya düzenlemek üzere, SELECT deyiminde başka yan tümceleri de kullanabilirsiniz.

SELECT Deyimi, FROM Yan Tümcesi Örneği

Aşağıdaki örneklerden bazıları, Çalışanlar tablosunda Maaş alanının bulunduğunu varsayar. Bu alan gerçekte Nortwind veritabanının Çalışanlar tablosunda bulunmaz.

Bu örnek, Çalışanlar tablosundaki tüm kayıtların Adı ve Soyadı alanlarını seçen bir SQL deyimini temel alan bir Recordset devingen küme türü oluşturur. Recordset nesnesinin içeriklerini Hata Ayıklama penceresine yazdıran EnumFields yordamını çağırır.

Sub SelectX1()

    Dim dbs As Database, rst As Recordset

    ' Bu satırı, bilgisayarınızdaki Northwind yolunu

    ' bulundurmak üzere değiştirin.

    Set dbs = OpenDatabase("Northwind.mdb")

    ' Çalışanlar tablosundaki tüm kayıtların adı ve soyadı

    ' değerlerini seçer.

    Set rst = dbs.OpenRecordset("SELECT Soyadı, " _

        & "Adı FROM Çalışanlar;")

    ' Yeni kayıt kümesini başlatır.

    rst.MoveLast

' Recordset içeriklerini yazdırmak üzere EnumFields

' yordamını çağırır.

    EnumFields rst,12

dbs.Close

End Sub

Bu örnek, Posta Kodu alanında girilmiş değeri olan kayıt sayısını sayar ve geri döndürülen alanı Sayaç olarak adlandırır.

Sub SelectX2()

    Dim dbs As Database, rst As Recordset

    ' Bu satırı, bilgisayarınızdaki Northwind yolunu

    ' bulundurmak üzere değiştirin.

    Set dbs = OpenDatabase("Northwind.mdb")

    ' PostaKodu değeri olan kayıt sayısını sayar ve

    ' sonucu Sayaç alanında verir.

    Set rst = dbs.OpenRecordset("SELECT Count " _

        & "(PostaKodu) AS Sayaç FROM Müşteriler;")

    ' Recordset'i başlatır.

    rst.MoveLast

    ' Recordset içeriklerini yazdırmak üzere EnumFields

    ' yordamını çağırır. Alan genişliğini 12 yapar.

    EnumFields rst, 12

    dbs.Close

End Sub

Bu örnek, çalışan sayısını ve maaşların ortalaması ile en yüksek değerini gösterir.

Sub SelectX3()

    Dim dbs As Database, rst As Recordset

    ' Bu satırı, bilgisayarınızdaki Northwind yolunu

    ' bulundurmak üzere değiştirin.

Set dbs = OpenDatabase("Northwind.mdb")

    ' Çalışan sayısını sayar, ortalama maaşı hesaplar

    ' ve en yüksek maaşı verir.

    Set rst = dbs.OpenRecordset("SELECT Count (*) " _

        & "AS ToplamÇalışan, Avg(Maaş) " _

        & "AS OrtalamaMaaş, Max(Maaş) " _

        & "AS EnYüksekMaaş FROM Çalışanlar;")

    ' Recordset'i başlatır.

    rst.MoveLast

    ' Recordset içeriklerini yazdırmak üzere EnumFields

    ' yordamını çağırır. Recordset nesnesini ve

    ' istenen alan genişliğini aktarır.

    EnumFields rst, 17

    dbs.Close

End Sub

EnumFields Sub yordamı, çağıran yordamdan bir Recordset nesnesi aktarır. Daha sonra, Recordset alanlarını biçimlendirir ve Hata Ayıklama penceresine yazdırır. intFldLendeğişkeni, istenen basılı alan genişliğidir. Birtakım alanlar düzgün basılmadan kesilebilir.

Sub EnumFields(rst As Recordset, intFldLen As Integer)

    Dim lngRecords As Long, lngFields As Long

    Dim lngRecCount As Long, lngFldCount As Long

    Dim strTitle As String, strTemp As String

    ' lngRecords değişkenini Recordset içindeki

    ' kayıt sayısına eşitler.

    lngRecords = rst.RecordCount

    ' lngFields değişkenini Recordset içindeki

    ' alan sayısına eşitler.

    lngFields = rst.Fields.Count

    

    Debug.Print "Kayyt kümesinde " & lngRecords _

        & " kayyt " & lngFields _

        & " alan var."

    Debug.Print

    

    ' Sütun başlığını yazdırmak üzere bir dize oluşturur.

    strTitle = "Kayyt "

    For lngFldCount = 0 To lngFields - 1

        strTitle = strTitle _

        & Left(rst.Fields(lngFldCount).Name _

        & Space(intFldLen), intFldLen)

    Next lngFldCount

    

    ' Sütun başlığını yazdırır.

    Debug.Print strTitle

    Debug.Print

    

    ' Recordset içinde dönerek kayyt sayysyny ve

    ' alan değerlerini yazdırır.

    rst.MoveFirst

    For lngRecCount = 0 To lngRecords - 1

        Debug.Print Right(Space(6) & _

            Str(lngRecCount), 6) & " ";

        For lngFldCount = 0 To lngFields - 1

            ' Null değerleri denetler.

            If IsNull(rst.Fields(lngFldCount)) Then

                strTemp = "<null>"

            Else

                ' strTemp içeriğini alan içeriği olarak ayarlar.

                Select Case _

                    rst.Fields(lngFldCount).Type

                    Case 11

                        strTemp = ""

                    Case dbText, dbMemo

                        strTemp = _

                            rst.Fields(lngFldCount)

                    Case Else

                        strTemp = _

                            str(rst.Fields(lngFldCount))

                End Select

            End If

            Debug.Print Left(strTemp _

                & Space(intFldLen), intFldLen);

        Next lngFldCount

        Debug.Print

        rst.MoveNext

    Next lngRecCount

End Sub



  • DELETE Deyimi

WHERE yan tümcesini sağlayan FROM yan tümcesinde listelenen tablolardan bir veya daha fazlasından kayıt silen bir silme sorgusu oluşturur.

Sözdizimi

DELETE [tablo.*]
    FROM tablo
    WHERE ölçüt

DELETE deyiminin bölümleri şunlardır:

Bölüm

Açıklama

Tablo

İçinden kayıtların silineceği tablonun isteğe bağlı adıdır.

Tablo

İçinden kayıtların silineceği tablonun adıdır.

Ölçütler

Silinecek kayıtları belirleyen bir ifade dir.


Uyarılar

DELETE, özellikle çok sayıda kayıt silmek istiyorsanız kullanışlıdır.

Veritabanından tablonun tümünü silmek için, Execute yöntemini DROP deyimi ile birlikte kullanabilirsiniz. Ancak tabloyu silerseniz, tablonun yapısı da kaybolur. Buna karşılık DELETE'i kullanırsanız yalnızca veriler silinir, tablo yapısı ve alan özellikleri ve dizin gibi tablo özelliklerinin tümü bozulmadan kalır.

Diğer tablolarla bir-çok ilişkisi olan tablolardan kayıt silmek için DELETE'i kullanabilirsiniz. Ardarda silme işlemleri, ilişkinin "bir" tarafında olan tabloda bulunan bir kaydın silinmesi halinde, ilişkinin "çok" tarafında olan tablodaki ilgili kayıtların silinmesine neden olur. Örneğin, Müşteriler ve Siparişler tablolarındaki ilişkide, Müşteriler tablosu ilişkinin "bir" tarafında ve Siparişler tablosu da "çok" tarafındadır. Ardarda silme seçeneği belirtilmişse, Müşteriler tablosunda bir kayıt silindiğinde ilgili Siparişler tablosu kayıtları da silinecektir.

Bir silme sorgusu, yalnızca belirli alanlardaki verileri değil kayıtların tamamını siler. Yalnızca belirli bir alandaki verileri silmek istiyorsanız, değerleri Null olarak değiştiren bir güncelleştirme sorgusu oluşturun.


Önemli

  • Silme sorgusunu kullanarak kayıt sildikten sonra, işlemi geri alamazsınız. Hangi kayıtların silindiğini bilmek istiyorsanız, sonuçları önce aynı ölçütü kullanan bir seçme sorgusu ile denetleyin ve sonra silme sorgusunu çalıştırın.

  • Her zaman verilerinizin yedeklerini saklayın. Yanlış kayıtları silerseniz, kayıtları yedek kopyalardan alabilirsiniz.


DELETE Deyimi Örneği

Bu örnek, ünvanı Eğitmen olan tüm çalışanların kayıtlarını siler. FROM yan tümcesi yalnızca bir tablo içeriyorsa, DELETE deyiminde tablo adını listelemeniz gerekmez.

Sub DeleteX()

    Dim dbs As Database, rst As Recordset

    ' Bu satyry, bilgisayarynyzdaki Northwind yolunu

    ' bulundurmak üzere değiştirin.

    Set dbs = OpenDatabase("Northwind.mdb")

    ' Ünvanı Eğitmen olan çalışanların kayıtlarını siler.    

    dbs.Execute "DELETE * FROM " _

        & "Çalışanlar WHERE Ünvan = 'Eğitmen';"

        dbs.Close

End Sub



  • INSERT INTO Deyimi

Bir tabloya bir veya daha çok sayıda kayıt ekler. Buna ekleme sorgusu da denir.

Sözdizimi

Çok sayıda kayıt ekleme sorgusu:

INSERT INTO hedef [(alan1[, alan2[, ...]])] [IN dışveritabanı]
    SELECT [kaynak.]alan1[, alan2[, ...]
    FROM tabloifadesi

Tek kayıt ekleme sorgusu:

INSERT INTO hedef [(alan1[, alan2[, ...]])]
    VALUES (değer1[, değer2[, ...])

INSERT INTO deyiminin bölümleri şunlardır:

Bölüm

Açıklama

Hedef

İçine kayıt eklenecek tablo veya sorgunun adıdır.

alan1, alan2

Bir hedef değişkeninin ardından geliyorsa içine veri eklenecek alanların adı, bir kaynak değişkeninin ardından geliyorsa içinden veri alınacak alanların adıdır.

dışveritabanı

Bir dış veritabanı na olan yoldur. Yolun açıklaması için IN yan tümcesine bakın.

Kaynak

İçinden kayıtların kopyalanacağı tablo veya sorgunun adıdır.

tabloifadesi

İçinden kayıtların eklendiği tablo veya tabloların adıdır. Bu değişken; tek bir tablo adı , kaydedilmiş bir sorgu adı veya INNER JOIN , LEFT JOIN veya RIGHT JOIN sonucu olan bir birleşim olabilir.

değer1, değer2

Yeni kaydın belirli alanlarına eklenecek olan değerlerdir. Her değer, listede değerin konumuna göre ilgili alanın içine eklenir: değer1 yeni kaydın alan1 alanına, değer2 yeni kaydın alan2 alanına şeklinde eklenir. Değerleri virgül ile ayırmalı ve metin alanlarını tırnak imleri (' ') içine almalısınız.


Uyarılar

INSERT INTO deyimini, yukarıda gösterildiği gibi tek kayıt ekleme sorgusu sözdizimini kullanarak tabloya tek bir kayıt eklemek üzere kullanabilirsiniz. Bu durumda kodlarınız, kaydın her alanının adını ve değerini belirtir. Üzerine bir değerin atanacağı kayıt alanlarını ve bu alanların değerlerini belirtmelisiniz. Her alanı tek tek belirtmezseniz, eksik sütunlar için varsayılan değer veya Null değeri eklenir. Kayıtlar tablonun sonuna eklenir.

Yukarıda çok sayıda kayıt ekleme sorgusu sözdiziminde gösterildiği gibi, SELECT ... FROM yan tümcesini kullanarak bir kayıt kümesini bir başka tablodan veya sorgudan eklemek üzere INSERT INTO'yu da kullanabilirsiniz.Bu durumda SELECT yan tümcesi, belirtilen hedef tabloya eklenecek alanları belirtir.

Kaynak veya hedef tablo, bir tablo veya sorguyu belirtebilir. Bir sorgu belirtilirse, Microsoft Jet veritabanı alt yapısı , sorgu tarafından belirtilen herhangi bir tabloya ve tüm tablolara kayıt ekler.

INSERT INTO isteğe bağlıdır ancak belirtilirse, SELECT deyiminden önce gelir.

Hedef tablonuzda bir birincil anahtar varsa, birincil anahtar alan veya alanlarına benzersiz, Null olmayan değerler eklediğinizden emin olun; aksi takdirde Microsoft Jet veritabanı alt yapısı kayıtları eklemez.

İçinde OtomatikSayı alanı olan bir tabloya kayıt ekler ve eklenen kayıtların numaralarını değiştirmek isterseniz, sorgunuzda OtomatikSayı alanını bulundurmayın. OtomatikSayı alanının özgün değerlerini korumak istiyorsanız, alanı sorgu içinde bulundurun.

Kayıtları başka bir veritabanındaki tabloya eklemek için IN yan tümcesini kullanın.

Yeni bir tablo oluşturmak üzere bir tablo oluşturma sorgusu hazırlamak yerine SELECT... INTO deyimini kullanın.

Ekleme sorgusunu çalıştırmadan önce hangi kayıtların ekleneceğini görmek için, önce, aynı seçim ölçütünü kullanan bir seçme sorgusu çalıştırın ve sonuçları görün.

Bir ekleme sorgusu, bir veya daha çok tablodaki kayıtları bir başkasına kopyalar. Eklediğiniz kayıtları içeren tablolar, ekleme sorgusundan etkilenmezler.

Bir başka tablodan var olan kayıtları eklemek yerine, VALUES yan tümcesini kullanarak, tek bir yeni kaydın tüm alanlarının değerlerini belirtebilirsiniz. Alan listesini yazmazsanız VALUES yan tümcesi tablodaki her alanın değerini içermelidir; aksi takdirde INSERT işlemi başarısız olur. Oluşturmak istediğiniz her ek kayıt için, VALUES yan tümcesi ile birlikte ek bir INSERT INTO deyimi kullanın.

INSERT INTO Deyimi Örneği

Bu örnek, bulunduğu varsayılan Yeni Müşteriler tablosundaki tüm müşterileri seçer ve bunları Müşteriler tablosuna ekler. Tek tek sütunlar belirtilmezse, SELECT tablosu sütun adları ile, INSERT INTO tablosundaki sütun adları tam olarak eşleşmelidir.

Sub InsertIntoX1()

    Dim dbs As Database

    ' Bu satyry, bilgisayarynyzdaki Northwind yolunu

    ' bulundurmak üzere değiştirin.

    Set dbs = OpenDatabase("Northwind.mdb")

    

    ' Yeni Müşteriler tablosundaki tüm kayıtları seçer

    ' ve bunları Müşteriler tablosuna ekler.

    dbs.Execute " INSERT INTO Müşteriler " _

        & "SELECT * " _

        & "FROM [Yeni Müşteriler];"

        dbs.Close

End Sub

Bu örnek Çalışanlar tablosunda yeni bir kayıt oluşturur.

Sub InsertIntoX2()

    Dim dbs As Database

    ' Bu satyry, bilgisayarynyzdaki Northwind yolunu

    ' bulundurmak üzere değiştirin.

    Set dbs = OpenDatabase("Northwind.mdb")

    

    ' Çalışanlar tablosunda yeni bir kayıt oluşturur. Yeni

    ' kaydyn ady Gamze, soyady Etikan ve

    ' iş ünvanı Eğitmen'dir.

    dbs.Execute " INSERT INTO Çalışanlar " _

        & "(Ady,Soyady, Ünvan) VALUES " _

        & "('Gamze', 'Etikan', 'Eğitmen');"

         dbs.Close

End Sub



  • SELECT...INTO Deyimi

Bir tablo oluşturma sorgusu oluşturur.

Sözdizimi

SELECT alan1[, alan2[, ...]] INTO yenitablo [IN dışveritabanı]
    FROM kaynak

SELECT...INTO deyiminin bölümleri şunlardır:

Bölüm

Açıklama

alan1, alan2

Yeni tabloya kopyalanacak alanların adıdır.

Yenitablo

Oluşturulacak tablonun adıdır. Standart adlandırma kuralları na uymalıdır. Yenitablo, var olan bir tablonun adı ile aynıysa, algılanabilir bir hata oluşur.

dışveritabanı

Bir dış veritabanı na olan yoldur. Yolun açıklaması için IN yan tümcesine bakın.

kaynak

İçinden kayıtların seçileceği var olan bir tablonun adıdır. Bu, tek veya çok tablo veya sorgu olabilir.


Uyarılar

Kayıtların arşivini oluşturmak, tabloları yedeklemek veya farklı bir veritabanına vermek üzere veya belirli bir zaman aralığındaki verileri görüntüleyen raporlarda temel olarak kullanmak üzere tabloların kopyalarını oluşturmak için tablo oluşturma sorgularını kullanabilirsiniz. Örneğin, aynı tablo oluşturma sorgusunu her ay çalıştırarak, Bölgelere Göre Aylık Satışlar raporunu oluşturabilirsiniz.


Notlar

  • Yeni tablo için bir birincil anahtar tanımlamak isteyebilirsiniz. Tablo oluşturduğunuzda, yeni tablodaki alanlar, sorgunun temel aldığı tablolardaki her alanın veri türü nde ve alan boyutunda olurlar; ancak başka alan ve tablo özellikleri aktarılmaz.

  • Var olan bir tabloya veri eklemek için, bir ekleme sorgusu oluşturmak yerine INSERT INTO deyimini kullanın.

  • Tablo oluşturma sorgusunu çalıştırmadan önce hangi kayıtların seçileceğini görmek için, önce, aynı seçim ölçütünü kullanan bir SELECT deyimi çalıştırın ve sonuçları görün.


SELECT...INTO Deyimi Örneği

Bu örnek, Çalışanlar tablosundaki tüm kayıtları seçer ve bunları Çalışanlar Yedeği adlı yeni bir tabloya ekler.

Sub SelectIntoX()

    Dim dbs As Database

    Dim qdf As QueryDef

    ' Bu satyry, bilgisayarynyzdaki Northwind yolunu

    ' bulundurmak üzere değiştirin.

    Set dbs = OpenDatabase("Northwind.mdb")

    ' Çalışanlar tablosundaki tüm kayıtları seçer

    ' ve bunları yeni Çalışanlar Yedeği tablosuna kopyalar.

    dbs.Execute "SELECT Çalışanlar.* INTO " _

        & "[Çalışanlar Yedeği] FROM Çalışanlar;"

        

    ' Bu bir örnek olduğu için tabloyu siler.

    dbs.Execute "DROP TABLE [Çalışanlar Yedeği];"

    

    dbs.Close

End Sub



  • UPDATE Deyimi

Belirtilen ölçütleri temel alan belirtilen tablodaki alanların değerlerini değiştiren bir güncelleştirme sorgusu oluşturur.

Sözdizimi

UPDATE tablo
    SET yenideğer
    WHERE ölçüt;

UPDATE deyiminin bölümleri şunlardır:

Bölüm

Açıklama

tablo

Değiştirmek istediğiniz verileri içeren tablonun adıdır.

yenideğer

Güncelleştirilen kayıtlardaki belirli bir alana eklenecek değeri belirten bir ifade dir.

ölçütler

Hangi kayıtların güncelleştirileceğini belirleyen bir ifadedir. Yalnızca ifadeyi sağlayan kayıtlar güncelleştirilir.


Uyarılar

UPDATE özellikle, çok sayıda kaydı değiştirmek istediğinizde veya değiştirmek istediğiniz kayıtlar çok sayıda tablo içinde iken kullanışlıdır.

Aynı anda çok sayıda alanı değiştirebilirsiniz. Aşağıdaki örnek Sipariş Miktarı değerlerini yüzde 10 arttırır ve Navlun değerlerini İngiltere'deki taşımacılar için yüzde 3 arttırır:

UPDATE Siparişler

SET SiparişMiktarı = SiparişMiktarı * 1.1,

Navlun = Navlun * 1.03

WHERE Ülke = 'İngiltere';

Önemli

  • UPDATE, bir sonuç kümesi oluşturmaz. Ayrıca, güncelleştirme sorgusunu kullanarak kayıtları güncelleştirdikten sonra, işlemi geri alamazsınız. Hangi kayıtların güncelleştirildiğini bilmek istiyorsanız, sonuçları önce aynı ölçütü kullanan bir seçme sorgusu ile denetleyin ve sonra güncelleştirme sorgusunu çalıştırın.

  • Her zaman verilerinizin yedeklerini saklayın. Yanlış kayıtları güncelleştirirseniz, kayıtları yedek kopyalardan alabilirsiniz.

UPDATE Deyimi Örneği

Bu örnek, Raporla alanının değeri 2 olan tüm çalışan kayıtlarının Raporla alanını 5 olarak değiştirir.

Sub UpdateX()

    Dim dbs As Database

    Dim qdf As QueryDef

    ' Bu satyry, bilgisayarynyzdaki Northwind yolunu

    ' bulundurmak üzere değiştirin.

    Set dbs = OpenDatabase("Northwind.mdb")

    

    ' Raporla alanındaki değeri 2 olan tüm çalışan

    ' kayıtlarının Raporla alanının değerini 5 olarak

    ' değiştirir.

    dbs.Execute "UPDATE Çalışanlar " _

        & "SET Raporla = 5 " _

        & "WHERE Raporla = 2;"

        

    dbs.Close

End Sub



  • TRANSFORM Deyimi

Bir çapraz sorgu oluşturur.

Sözdizimi

TRANSFORM toplamişlevi
    seçmedeyimi
    PIVOT özetalanı [IN (değer1[, değer2[, ...]])]

TRANSFORM deyiminin bölümleri şunlardır:

Bölüm

Açıklama

toplamişlevi

Seçili veriler üzerinde işlem yapan bir SQL toplam işlevi dir.

seçmedeyimi

Bir SELECT deyimidir.

özetalanı

Sorgunun sonuç kümesinde sütun başlığı oluşturmakta kullanmak istediğiniz alan veya ifade dir.

değer1, değer2

Sütun başlıklarını oluşturmak üzere kullanılan sabit değerlerdir.


Uyarılar

Bir çapraz sorguyu kullanarak verileri özetlerken, belirtilen alanlardaki veya ifadelerdeki değerleri sütun başlıkları olarak seçersiniz; böylece verileri, seçme sorgusu ile olduğundan daha açık bir biçimde görüntüleyebilirsiniz.

TRANSFORM isteğe bağlıdır, ancak seçildiğinde, bir SQL dizesi nin ilk deyimidir. Satır başlıkları olarak kullanılan alanları belirten SELECT deyiminden ve satır gruplandırmasını belirten GROUP BY yan tümcesinden önce gelir. İsterseniz, ek seçim veya sıralama ölçütleri belirten WHERE gibi başka yan tümceleri de bulundurabilirsiniz. Bir çapraz sorguda alt sorguları doğrulama olarak da kullanabilirsiniz (özellikle WHERE yan tümcesinde bulunanları).

Özetalanın döndürdüğü değerler, sorgunun sonuç kümesinde sütun başlıkları olarak kullanılır. Örneğin, aylık satışların satış değerlerini özetlemek, 12 sütunu olan bir çapraz sorgu oluşturur. Başlıkları, isteğe bağlı IN yan tümcesinde listelenen sabit değerlerle (değer1, değer2 ) oluşturmak üzere özetalanını kısıtlayabilirsiniz. Ek sütunlar oluşturmak için, ilgili verileri olmayan sabit değerleri de bulundurabilirsiniz.

TRANSFORM Deyimi Örneği

Bu örnek, 1994 yılının her üç aylık dönemi için çalışanların verdikleri sipariş miktarını gösteren bir çapraz sorgu oluşturmak üzere bir SQLTRANSFORM yan tümcesi kullanır. SQLTRANSFORMOutput işlevi, bu yordamın çalışması için gereklidir.

Sub TransformX1()

    Dim dbs As Database

    Dim strSQL As String

    Dim qdfTRANSFORM As QueryDef

    strSQL = "PARAMETERS prmYear SHORT; TRANSFORM " _

        & "Count(SiparişNo) " _

        & "SELECT Ady & "" "" & Soyady AS " _

        & "TamAdı FROM Çalışanlar INNER JOIN Siparişler " _

        & "ON Çalışanlar.ÇalışanNo = " _

        & "Siparişler.ÇalışanNo WHERE TarihAralığı " _

        & "(""yyyy"", SiparişTarihi) = [prmYear] "

   

       strSQL = strSQL & "GROUP BY Ady & " _

        & """ "" & Soyady " _

        & "ORDER BY Ady & "" "" & Soyady " _

        & "PIVOT TarihAralığı(""q"", SiparişTarihi)"

    

    ' Bu satyry, bilgisayarynyzdaki Northwind yolunu

    ' bulundurmak üzere değiştirin.

    Set dbs = OpenDatabase("Northwind.mdb")

    Set qdfTRANSFORM = dbs.CreateQueryDef _

        ("", strSQL)

    

    SQLTRANSFORMOutput qdfTRANSFORM, 1994

    

    dbs.Close

End Sub

Bu örnek, 1994 yılının her üç aylık dönemi için çalışanların verdikleri siparişlerin toplam TL miktarını gösteren daha karmaşık bir çapraz sorgu oluşturmak üzere bir SQLTRANSFORM yan tümcesi kullanır. SQLTRANSFORMOutput işlevi, bu yordamın çalışması için gereklidir.

Sub TransformX2()

    Dim dbs As Database

    Dim strSQL As String

    Dim qdfTRANSFORM As QueryDef

    strSQL = "PARAMETERS prmYear SMALLINT; TRANSFORM " _

        & "Sum(AltToplam) SELECT Ady & "" """ _

        & "& Soyady AS TamAdy " _

        & "FROM Çalışanlar INNER JOIN " _

        & "(Siparişler INNER JOIN [Sipariş Alt Toplamları] " _

        & "ON Siparişler.SiparişNo = " _

        & "[Sipariş Alt Toplamları].SiparişNo) " _

        & "ON Çalışanlar.ÇalışanNo = " _

        & "Siparişler.ÇalışanNo WHERE TarihAralığı " _

        & "(""yyyy"", SiparişTarihi) = [prmYear] "

   

       strSQL = strSQL & "GROUP BY Ady & "" """ _

        & "& Soyady " _

        & "ORDER BY Ady & "" "" & Soyady " _

        & "PIVOT TarihAralığı(""q"",SiparişTarihi)"        

        

    ' Bu satyry, bilgisayarynyzdaki Northwind yolunu

    ' bulundurmak üzere değiştirin.

    Set dbs = OpenDatabase("Northwind.mdb")

    Set qdfTRANSFORM = dbs.CreateQueryDef _

        ("", strSQL)

    

    SQLTRANSFORMOutput qdfTRANSFORM, 1994

    

    dbs.Close

End Sub

Function SQLTRANSFORMOutput(qdfTemp As QueryDef, _

    intYear As Integer)

    

    Dim rstTRANSFORM As Recordset

    Dim fldLoop As Field

    Dim booFirst As Boolean

    qdfTemp.PARAMETERS!prmYear = intYear

    Set rstTRANSFORM = qdfTemp.OpenRecordset()

    

    Debug.Print qdfTemp.SQL

    Debug.Print

    Debug.Print , , "Üç Ay"

    With rstTRANSFORM

        booFirst = True

        For Each fldLoop In .Fields

            If booFirst = True Then

                Debug.Print fldLoop.Name

                Debug.Print , ;

                booFirst = False

            Else

                Debug.Print , fldLoop.Name;

            End If

        Next fldLoop

        Debug.Print

        

        Do While Not .EOF

            booFirst = True

            For Each fldLoop In .Fields

                If booFirst = True Then

                    Debug.Print fldLoop

                    Debug.Print , ;

                    booFirst = False

                Else

                    Debug.Print , fldLoop;

                End If

            Next fldLoop

            Debug.Print

            .MoveNext

        Loop

    End With

    

End Function



  • EXECUTE Deyimi

Bir yordam ın yürütülmesini başlatmak için kullanılır.

Sözdizimi

EXECUTE yordam [parametre1[, parametre2[, ...]]

EXECUTE deyiminin bölümleri şunlardır:

Bölüm

Açıklama

yordam

Yürütülecek yordam ın adıdır.

parametre1, parametre2

Yordam tarafından tanımlanan parametre lerin değerleridir.


  • TRANSACTION Deyimi

Dolaysız hareketler i başlatmak ve sonuçlandırmak için kullanılır.

Sözdizimi

Yeni bir hareket başlatma:

BEGIN TRANSACTION

Hareket sırasında gerçekleştirilmiş tüm işleri kaydederek hareketi sonlandırma:

COMMIT [TRANSACTION | WORK]

Hareket sırasında gerçekleştirilmiş tüm işleri geri alarak hareketi sonlandırma:

ROLLBACK [TRANSACTION | WORK]

Uyarılar

Hareketler otomatik olarak başlatılmaz. Bir hareketi başlatmak için, bunu BEGIN TRANSACTION'i kullanarak dolaysız olarak yapmalısınız.

Hareketler içiçe en çok beş düzeyde olabilirler. Bir alt düzey hareketini başlatmak için, var olan bir hareketin içeriği içinde BEGIN TRANSACTION'i kullanın.

Hareketler, bağlı tablolarda desteklenmezler.

  • Yan Tümceler

    • FROM Yan Tümcesi

SELECT deyiminde listelenen alanları içeren tabloları veya sorguları belirtir.

Sözdizimi

SELECT alanlistesi
    FROM tablodeyimi [IN dışveritabanı]

FROM yan tümcesi içeren bir SELECT deyiminin bölümleri şunlardır:

Bölüm

Açıklama

alanlistesi

Herhangi bir alan diğeradı , SQL toplam işlevi , doğrulamalar (ALL, DISTINCT, DISTINCTROW veya TOP ) veya başka SELECT deyimi seçenekleri ile alınabilecek alan veya alanların adı.

tabloifadesi

İçinden verilerin alınacağı bir veya daha fazla tabloyu belirten bir ifadedir. İfade; tek bir tablo adı, kaydedilmiş bir sorgu adı veya INNER JOIN , LEFT JOIN veya RIGHT JOIN sonucu olan bir birleşim olabilir.

dışveritabanı

Tabloifadesi içindeki tüm tabloları içeren dış veritabanının tam yolu.


Uyarılar

FROM gereklidir ve her SELECT deyiminin ardından gelir.

Tablodeyimi içindeki tablo adlarının sırası önemli değildir.

Daha yüksek bir başarımı ve daha kolay kullanım sağlamak için, dış bir veritabanından veri almak üzere IN yan tümcesini kullanmak yerine bağlı tablo kullanmanız önerilir.

Aşağıdaki örnek, Çalışanlar tablosundan nasıl veri alabileceğinizi gösterir:

SELECT Soyadı, Adı

FROM Çalışanlar;


SELECT Deyimi, FROM Yan Tümcesi Örneği

Aşağıdaki örneklerden bazıları, Çalışanlar tablosunda Maaş alanının bulunduğunu varsayar. Bu alan gerçekte Nortwind veritabanının Çalışanlar tablosunda bulunmaz.

Bu örnek, Çalışanlar tablosundaki tüm kayıtların Adı ve Soyadı alanlarını seçen bir SQL deyimi ni temel alan bir Recordset devingen küme türü oluşturur. Recordset nesnesinin içeriklerini Hata Ayıklama penceresine yazdıran EnumFields yordamını çağırır.

Sub SelectX1()

    Dim dbs As Database, rst As Recordset

    ' Bu satyry, bilgisayarynyzdaki Northwind yolunu

    ' bulundurmak üzere değiştirin.

    Set dbs = OpenDatabase("Northwind.mdb")

    ' Çalışanlar tablosundaki tüm kayıtların adı ve soyadı

    ' değerlerini seçer.

    Set rst = dbs.OpenRecordset("SELECT Soyady, " _

        & "Adı FROM Çalışanlar;")

    ' Yeni kayıt kümesini başlatır.

    rst.MoveLast

' Recordset içeriklerini yazdyrmak üzere EnumFields

' yordamını çağırır.

    EnumFields rst,12

dbs.Close

End Sub

Bu örnek, PostaKodu alanında girilmiş değeri olan kayıt sayısını sayar ve geri döndürülen alanı Sayaç olarak adlandırır.

Sub SelectX2()

    Dim dbs As Database, rst As Recordset

    ' Bu satyry, bilgisayarynyzdaki Northwind yolunu

    ' bulundurmak üzere değiştirin.

    Set dbs = OpenDatabase("Northwind.mdb")

    ' PostaKodu değeri olan kayıt sayısını sayar ve

    ' sonucu Sayaç alanynda verir.

    Set rst = dbs.OpenRecordset("SELECT Count " _

        & "(PostaKodu) AS Sayaç FROM Müşteriler;")

    ' Recordset'i başlatır.

    rst.MoveLast

    ' Recordset içeriklerini yazdyrmak üzere EnumFields

    ' yordamını çağırır. Alan genişliğini 12 yapar.

    EnumFields rst, 12

    dbs.Close

End Sub

Bu örnek, çalışan sayısını ve maaşların ortalaması ile en yüksek değerini gösterir.

Sub SelectX3()

    Dim dbs As Database, rst As Recordset

    ' Bu satyry, bilgisayarynyzdaki Northwind yolunu

    ' bulundurmak üzere değiştirin.

Set dbs = OpenDatabase("Northwind.mdb")

    ' Çalışan sayısını sayar, ortalama maaşı hesaplar

    ' ve en yüksek maaşı verir.

    Set rst = dbs.OpenRecordset("SELECT Count (*) " _

        & "AS ToplamÇalışan, Avg(Maaş) " _

        & "AS OrtalamaMaaş, Max(Maaş) " _

        & "AS EnYüksekMaaş FROM Çalışanlar;")

    ' Recordset'i başlatır.

    rst.MoveLast

    ' Recordset içeriklerini yazdyrmak üzere EnumFields

    ' yordamını çağırır. Recordset nesnesini ve

    ' istenen alan genişliğini aktarır.

    EnumFields rst, 17

    dbs.Close

End Sub

EnumFields Sub yordamı, çağıran yordamdan bir Recordset nesnesi aktarır. Daha sonra, Recordset alanlarını biçimlendirir ve Hata Ayıklama penceresine yazdırır. intFldLendeğişkeni, istenen basılı alan genişliğidir. Birtakım alanlar düzgün basılmadan kesilebilir.

Sub EnumFields(rst As Recordset, intFldLen As Integer)

    Dim lngRecords As Long, lngFields As Long

    Dim lngRecCount As Long, lngFldCount As Long

    Dim strTitle As String, strTemp As String

    ' lngRecords değişkenini Recordset içindeki

    ' kayıt sayısına eşitler.

    lngRecords = rst.RecordCount

    ' lngFields değişkenini Recordset içindeki

    ' alan sayısına eşitler.

    lngFields = rst.Fields.Count

    

    Debug.Print "Kayyt kümesinde " & lngRecords _

        & " kayyt " & lngFields _

        & " alan var."

    Debug.Print

    

    ' Sütun başlığını yazdırmak üzere bir dize oluşturur.

    strTitle = "Kayyt "

    For lngFldCount = 0 To lngFields - 1

        strTitle = strTitle _

        & Left(rst.Fields(lngFldCount).Name _

        & Space(intFldLen), intFldLen)

    Next lngFldCount

    

    ' Sütun başlığını yazdırır.

    Debug.Print strTitle

    Debug.Print

    

    ' Recordset içinde dönerek kayyt sayysyny ve

    ' alan değerlerini yazdırır.

    rst.MoveFirst

    For lngRecCount = 0 To lngRecords - 1

        Debug.Print Right(Space(6) & _

            Str(lngRecCount), 6) & " ";

        For lngFldCount = 0 To lngFields - 1

            ' Null değerleri denetler.

            If IsNull(rst.Fields(lngFldCount)) Then

                strTemp = "<null>"

            Else

                ' strTemp içeriğini alan içeriği olarak ayarlar.

                Select Case _

                    rst.Fields(lngFldCount).Type

                    Case 11

                        strTemp = ""

                    Case dbText, dbMemo

                        strTemp = _

                            rst.Fields(lngFldCount)

                    Case Else

                        strTemp = _

                            str(rst.Fields(lngFldCount))

                End Select

            End If

            Debug.Print Left(strTemp _

                & Space(intFldLen), intFldLen);

        Next lngFldCount

        Debug.Print

        rst.MoveNext

    Next lngRecCount

End Sub



  • GROUP BY Yan Tümcesi

Belirtilen alan listesindeki benzer değerlere sahip kayıtları tek bir kayıt olarak birleştirir. SELECT deyiminde Sum veya Count gibi bir SQL toplam işlevi bulundurursanız, her kayıt için bir özet değer oluşturulur.

Sözdizimi

SELECT alanlistesi
    FROM tablo
    WHERE ölçüt
    [GROUP BY grupalanlistesi]

GROUP BY yan tümcesi içeren bir SELECT deyiminin bölümleri şunlardır:

Bölüm

Açıklama

alanlistesi

Herhangi bir alan diğeradı , SQL toplam işlevi, doğrulamalar (ALL, DISTINCT, DISTINCTROW veya TOP ) veya başka SELECT deyimi seçenekleri ile alınabilecek alan veya alanların adı.

tablo

İçinden kayıtların seçileceği tablonun adıdır. Ayrıntılı bilgi için FROM yan tümcesine bakın.

ölçütler

Seçim ölçütü. Deyim bir WHERE yan tümcesi içeriyorsa, Microsoft Jet veritabanı alt yapısı , kayıtlara WHERE koşullarını uyguladıktan sonra değerleri gruplandırır.

grupalanlistesi

Kayıtları gruplandırmak için kullanılan en çok 10 alanın adı. Grupalanlistesi içindeki alan adlarının sırası, grupta en üstten en alta doğru gruplandırma düzeylerini belirler.


Uyarılar

GROUP BY isteğe bağlıdır.

SELECT deyiminde SQL toplam işlevi yoksa özet değerler göz ardı edilir.

GROUP BY alanlarındaki Null değerleri gruplandırılır ve dikkate alınır. Ancak, Null değerleri herhangi bir SQL toplam işlevinde değerlendirilmez.

Gruplandırmak istemediğiniz satırları dışarıda tutmak için WHERE yan tümcesini kullanın ve kayıtları gruplandırma işleminden sonra süzmek için HAVING yan tümcesini kullanın.

GROUP BY alan listesindeki bir alan Not veya OLE Nesnesi verileri içermiyorsa, bu alan, SELECT deyiminde bulundurulmamış olsa bile SELECT deyimi en az bir SQL toplam işlevi içeriyorsa, FROM yan tümcesinde listelenen tablolardaki herhangi bir alana başvurabilir. Microsoft® Jet veritabanı alt yapısı Not veya OLE Nesnesi alanlarını gruplandıramaz.

SELECT alan listesindeki tüm alanlar, ya GROUP BY yan tümcesinde ya da bir SQL toplam işlevinin değişkeni olarak bulundurulmalıdır.

GROUP BY Yan Tümcesi Örneği

Bu örnek, benzersiz iş ünvanlarının ve bu ünvanlara sahip olan çalışan sayısının listesini verir.

Bu örnek, SELECT deyimi örneğinde bulabileceğiniz EnumFields yordamını çağırır.

Sub GroupByX1()

    Dim dbs As Database, rst As Recordset

    ' Bu satyry, bilgisayarynyzdaki Northwind yolunu

    ' bulundurmak üzere değiştirin.

    Set dbs = OpenDatabase("Northwind.mdb")

    ' Her ünvan için, bu ünvana sahip çalışanları

    ' sayar.

    Set rst = dbs.OpenRecordset("SELECT Ünvan, " _

        & "Count([Ünvan]) AS Sayaç " _

        & "FROM Çalışanlar GROUP BY Ünvan;")

    

    ' Recordset'i başlatır.

    rst.MoveLast

    

    ' Recordset içeriklerini yazdyrmak üzere EnumFields

    ' yordamını çağırır. Recordset nesnesini ve

    ' istenen alan genişliğini aktarır.

    EnumFields rst, 25

    dbs.Close

End Sub

Bu örnek benzersiz her iş ünvanı için, bu ünvana sahip İstanbul'daki çalışan sayısını hesaplar.

Sub GroupByX2()

    Dim dbs As Database, rst As Recordset

    ' Bu satyry, bilgisayarynyzdaki Northwind yolunu

    ' bulundurmak üzere değiştirin.

    Set dbs = OpenDatabase("Northwind.mdb")

    

    ' Her ünvan için, bu ünvana sahip çalışanları

    ' sayar. Yalnyzca Ystanbul bölgesindeki

    ' çalışanları bulundurur.

    Set rst = dbs.OpenRecordset("SELECT Ünvan, " _

        & "Count(Ünvan) AS Sayaç " _

        & "FROM Çalışanlar WHERE Bölge = 'İS' " _

        & "GROUP BY Ünvan;")

    

    ' Recordset'i başlatır.

    rst.MoveLast

    ' Recordset içeriklerini yazdyrmak üzere EnumFields

    ' yordamını çağırır. Recordset nesnesini ve

    ' istenen alan genişliğini aktarır.

    EnumFields rst, 25

    dbs.Close

End Sub



  • HAVING Yan Tümcesi

GROUP BY yan tümcesi olan bir SELECT deyiminde hangi gruplandırılmış kayıtların görüntüleneceğini belirler. GROUP BY kayıtları birleştirdikten sonra, HAVING, HAVING yan tümcesinin koşullarını sağlayan ve GROUP BY yan tümcesi ile gruplandırılmış kayıtları görüntüler.

Sözdizimi

SELECT alanlistesi
    FROM tablo
    WHERE seçmeölçütü
    GROUP BY grupalanlistesi
    [HAVING grupölçütü]

HAVING yan tümcesi içeren bir SELECT deyiminin bölümleri şunlardır:

Bölüm

Açıklama

alanlistesi

Herhangi bir alan diğeradı , SQL toplam işlevi , doğrulamalar (ALL, DISTINCT, DISTINCTROW veya TOP ) veya başka SELECT deyimi seçenekleri ile alınabilecek alan veya alanların adı.

tablo

İçinden kayıtların seçileceği tablonun adıdır. Ayrıntılı bilgi için FROM yan tümcesine bakın.

seçimölçütü

Seçim ölçütüdür. Deyim bir WHERE yan tümcesi içeriyorsa, Microsoft Jet veritabanı alt yapısı , kayıtlara WHERE koşullarını uyguladıktan sonra değerleri gruplandırır.

grupalanlistesi

Kayıtları gruplandırmak için kullanılan en çok 10 alanın adı. Grupalanlistesi içindeki alan adlarının sırası, grupta en üstten en alta doğru gruplandırma düzeylerini belirler.

grupölçütü

Hangi gruplandırılmış kayıtların görüntüleneceğini belirleyen bir ifadedir.


Uyarılar

HAVING isteğe bağlıdır.

HAVING, WHERE'e benzer ve hangi kayıtların seçileceğini belirler. Kayıtlar GROUP BY ile gruplandırıldıktan sonra HAVING de hangi kayıtların görüntüleneceğini belirtir.

SELECT KategoriNo,

Sum(StoktakiBirim)

FROM Ürünler

GROUP BY KategoriNo

HAVING Sum(StoktakiBirim) > 100 And Like "BOS*";

Bir HAVING yan tümcesi, And ve Or gibi mantıksal işleçlerle birbirine bağlı en çok 40 ifade içerebilir.


HAVING Yan Tümcesi Örneği

Bu örnek, İstanbul bölgesindeki birden çok çalışana atanmış iş ünvanlarını seçer.

Bu örnek, SELECT deyimi örneğinde bulabileceğiniz EnumFields yordamını çağırır.

Sub HavingX()

    Dim dbs As Database, rst As Recordset

    ' Bu satyry, bilgisayarynyzdaki Northwind yolunu

    ' bulundurmak üzere değiştirin.

    Set dbs = OpenDatabase("Northwind.mdb")

    ' İstanbul bölgesindeki birden çok çalışana atanmış

    ' iş ünvanlarını seçer.

    Set rst = dbs.OpenRecordset("SELECT Ünvan, " _

        & "Count(Ünvan) as Toplam FROM Çalışanlar " _

        & "WHERE Bölge = 'YS' " _

        & "GROUP BY Ünvan HAVING Count(Ünvan) > 1;")

    

    ' Recordset'i başlatır.

    rst.MoveLast

    

    ' Recordset içeriklerini yazdırmak üzere EnumFields'i çağırır.

    EnumFields rst, 25

    dbs.Close

End Sub



  • IN Yan Tümcesi

Microsoft Jet database alt yapısı nın bağlanabileceği, dBASE veya Paradox veritabanı veya bir dış Microsoft® Jet veritabanı gibi herhangi bir dış veritabanı ndaki tabloları belirler.

Sözdizimi

Hedef bir tablo belirlemek için:

[SELECT | INSERT] INTO hedef IN
    {yol | ["yol" "tür"] | ["" [tür; DATABASE = yol]]}

Kaynak bir tablo belirlemek için:

FROM tabloifadesi IN
    {yol | ["yol" "tür"] | ["" [tür; DATABASE = yol]]}

IN yan tümcesi içeren bir SELECT deyiminin bölümleri şunlardır:

Bölüm

Açıklama

Hedef

İçine verilerin ekleneceği dış tablonun adıdır.

Tabloifadesi

İçinden verilerin alınacağı tablo veya tabloların adıdır. Bu değişken; tek bir tablo adı, kaydedilmiş bir sorgu adı veya INNER JOIN , LEFT JOIN veya RIGHT JOIN sonucu olan bir birleşim olabilir.

Yol

Tabloyu içeren dizin veya dosyanın tam yoludur.

Tür

Veritabanı bir Microsoft Jet veritabanı (örneğin, dBASE III, dBASE IV, Paradox 3.x veya Paradox 4.x) değilse, tablo oluşturmak için kullanılan veritabanı türünün adıdır.


Uyarılar

IN yan tümcesini bir anda yalnızca tek bir dış veritabanı na bağlanmak için kullanabilirsiniz.

Bazı durumlarda yol değişkeni, veritabanı dosyalarını içeren dizini gösterir. Örneğin dBASE, Microsoft FoxPro® veya Paradox veritabanı tabloları ile çalışırken, yol değişkeni .dbf veya .db dosyalarını içeren dizini belirtir. Tablonun dosya adı, hedef veya tabloifadesi değişkeninden türetilir.

Microsoft Jet veritabanı dışında bir veritabanı belirtmek için, ada bir noktalı virgül (;) ekleyin ve adı tek (' ') veya çift (" ") tırnak imi içine alın. Örneğin 'dBASE IV;' veya "dBASE IV;" olabilir.

Dış veritabanı belirlemek için DATABASE saklı sözcüğünü de kullanabilirsiniz. Örneğin, aşağıdaki satırlar aynı tabloyu belirtir:

... FROM Tablo IN "" [dBASE IV; DATABASE=C:\DBASE\DATA\SALES;];

... FROM Tablo IN "C:\DBASE\DATA\SALES" "dBASE IV;"


Notlar

Daha fazla başarım ve daha kolay kullanım sağlamak için, IN yerine bağlı tablo kullanın.

IN saklı sözcüğünü, bir ifade içinde bir karşılaştırma işleci olarak da kullanabilirsiniz. Ayrıntılı bilgi için In işlecine bakın.


IN Yan Tümcesi Örneği

Aşağıdaki tablo, dış bir veritabanından veri almak için IN yan tümcesini nasıl kullanabileceğinizi gösterir. Her örnekte, dış veritabanında Müşteriler tablosunun bulunduğunu varsayın.

Dış veritabanı

SQL deyimi

Microsoft® Jet veritabanı

SELECT MüşteriNo
FROM Müşteriler
IN DiğerVeritabanı.mdb
WHERE MüşteriNo Like "A*";

dBASE III veya IV.
Bir dBASE III tablosundan veri almak için, "dBASE IV;" yerine "dBASE III;" yazın.

SELECT MüşteriNo
FROM Müşteriler
IN "C:\DBASE\VERİ\SATŞLAR" "dBASE IV;"
WHERE MüşteriNo Like "A*";

Veritabanı sözdizimi kullanan dBASE III veya IV.

SELECT MüşteriNo
FROM Müşteriler
IN "" [dBASE IV; Database=C:\DBASE\VERİ\SATIŞ;]
WHERE MüşteriNo Like "A*";

Paradox 3.x veya 4.x.
Paradox sürüm 3.x tablosundan veri almak için, "Paradox 4.x;" yerine "Paradox 3.x;" yazın.

SELECT MüşteriNo
FROM Müşteriler
IN "C:\PARADOX\VERİ\SATŞLAR" "Paradox 4.x;"
WHERE MüşteriNo Like "A*";

Veritabanı sözdizimi kullanan Paradox 3.x veya 4.x.

SELECT MüşteriNo
FROM Müşteriler
IN "" [Paradox 4.x;Database=C:\PARADOX\VERİ\SATIŞLAR;]
WHERE MüşteriNo Like "A*";

Microsoft Excel çalışma sayfası

SELECT MüşteriNo, ŞirketAdı
FROM [Müşteriler$]
IN "c:\belgeler\xlveri.xls" "EXCEL 5.0;"
WHERE MüşteriNo Like "A*"
ORDER BY MüşteriNo;

Çalışma sayfası içinde adlandırılmış bir aralık

SELECT MüşteriNo, ŞirketAdı
FROM MüşterilerAralığı
IN "c:\belgeler\xlveri.xls" "EXCEL 5.0;"
WHERE MüşteriNo Like "A*"
ORDER BY MüşteriNo;




  • ORDER BY Yan Tümcesi

Sorgunun sonuç kayıtlarını belirtilen alan veya alanlara göre artan veya azalan sırada sıralar.

Sözdizimi

SELECT alanlistesi
    FROM tablo
    WHERE seçmeölçütü
    [ORDER BY alan1 [ASC | DESC ][, alan2 [ASC | DESC ]][, ...]]]

ORDER BY yan tümcesi içeren bir SELECT deyiminin bölümleri şunlardır:

Bölüm

Açıklama

alanlistesi

Herhangi bir alan diğeradı , SQL toplam işlevi , doğrulamalar (ALL, DISTINCT, DISTINCTROW veya TOP ) veya başka SELECT deyimi seçenekleri ile alınabilecek alan veya alanların adı.

tablo

İçinden kayıtların seçileceği tablonun adıdır. Ayrıntılı bilgi için FROM yan tümcesine bakın.

seçimölçütü

Seçim ölçütüdür. Deyim bir WHERE yan tümcesi içeriyorsa, Microsoft Jet veritabanı alt yapısı , kayıtlara WHERE koşullarını uyguladıktan sonra değerleri gruplandırır.

alan1, alan2

Kayıtları sıralamada temel alınacak alanların adıdır.


Uyarılar

ORDER BY isteğe bağlıdır. Ancak, kayıtların sıralanmış olarak görüntülenmesini istiyorsanız ORDER BY'ı kullanmalısınız.

Varsayılan sıralama düzeni artan düzendir (A'dan Z'ye, 0'dan 9'a). Aşağıdaki örneklerden her ikisi de, çalışan adlarını soyadına göre sıralar:

SELECT Soyady, Ady

FROM Çalışanlar

ORDER BY Soyady;

SELECT Soyady, Ady

FROM Çalışanlar

ORDER BY Soyady ASC;

Azalan sırada sıralamak için (Z'den A'ya, 9'dan 0'a), azalan sırada sıralamak istediğiniz her alanın sonuna DESC saklı sözcüğünü ekleyin. Aşağıdaki örnek maaşları seçer ve bunları azalan sırada sıralar:

SELECT Soyadı, Maaş

FROM Çalışanlar

ORDER BY Maaş DESC, Soyadı;

ORDER BY yan tümcesinde Not veya OLE Nesnesi verileri içeren bir alanı belirtirseniz bir hata oluşur. Microsoft Jet veritabanı alt yapısı bu bu türdeki alanları gruplandıramaz.

ORDER BY genellikle bir SQL deyimi nin son sözcüğüdür.

ORDER BY yan tümcesinde ek alanlar da bulundurabilirsiniz. Kayıtlar, ORDER BY'dan sonra listelenen ilk alana göre sıralanır. Bu alanda aynı değere sahip olan kayıtlar, listelenen ikinci alana göre sıralanır ve bu böylece devam eder.

ORDER BY Yan Tümcesi Örneği

Aşağıdaki örnekte gösterilen SQL deyimi, soyadlarını azalan sırada (Z-A) sıralamak için ORDER BY yan tümcesini kullanır.

Bu örnek, SELECT deyimi örneğinde bulabileceğiniz EnumFields yordamını çağırır.

Sub OrderByX()

    Dim dbs As Database, rst As Recordset

    ' Bu satyry, bilgisayarynyzdaki Northwind yolunu

    ' bulundurmak üzere değiştirin.

    Set dbs = OpenDatabase("Northwind.mdb")

    ' Çalışanlar tablosundan adı ve soyadı değerlerini

    ' seçer ve bunlary azalan syrada syralar.

    '

    Set rst = dbs.OpenRecordset("SELECT Soyady, " _

        & "Adı FROM Çalışanlar " _

        & "ORDER BY Soyady DESC;")

    

    ' Recordset'i başlatır.

    rst.MoveLast

    

    ' Recordset içeriklerini yazdırmak üzere EnumFields'i çağırır.

    EnumFields rst, 12

    dbs.Close

End Sub



  • WHERE Yan Tümcesi

FROM yan tümcesinde listelenen tablolardaki hangi kayıtların SELECT , UPDATE veya DELETE deyiminden etkilendiğini belirtir.

Sözdizimi

SELECT alanlistesi
    FROM tabloifadesi
    WHERE ölçüt

WHERE yan tümcesi içeren bir SELECT deyiminin bölümleri şunlardır:

Bölüm

Açıklama

Alanlistesi

Herhangi bir alan diğeradı , doğrulamalar (ALL, DISTINCT, DISTINCTROW veya TOP ) veya başka SELECT deyimi seçenekleri ile alınabilecek alan veya alanların adı.

Tabloifadesi

İçinden verilerin alınacağı tablo veya tabloların adıdır.

Ölçütler

Kayıtların, sorgu sonuçları içinde yer alabilmesi için sağlamaları gereken bir ifade dir.


Uyarılar

Microsoft Jet veritabanı alt yapısı , WHERE yan tümcesinde listelenen koşullara uyan kayıtları seçer. Bir WHERE yan tümcesi belirlemezseniz, sorgunuz tablodaki tüm satırları geri döndürür. Sorgunuzda birden fazla tablo belirtir ve WHERE ya da JOIN yan tümcesi bulundurmazsanız, sorgunuz tabloların bir Kartezyen çarpımı nı oluşturur.

WHERE isteğe bağlıdır ancak varsa FROM'un ardından gelir. Örneğin, satış bölümündeki tüm çalışanları seçebilir (WHERE Bölüm = 'Satış') veya yaşı 18 ile 30 arasındaki tüm müşterileri seçebilirsiniz (WHERE Yaş Between 18 And 30).

Çok sayıda tabloda SQL birleşim işlemini gerçekleştirmek için bir JOIN yan tümcesi kullanmazsanız, sonuç Recordset nesnesi güncelleştirilebilir durumda olmaz.

WHERE, HAVING yan tümcesine benzer. WHERE, hangi kayıtların seçileceğini belirler. Benzer biçimde, kayıtlar GROUP BY ile gruplandırıldıktan sonra HAVING de hangi kayıtların görüntüleneceğini belirtir.

GROUP BY yan tümcesi ile gruplandırmak istemediğiniz kayıtları elemek için WHERE yan tümcesini kullanın.

SQL deyiminin döndüreceği kayıtları belirlemek için değişik ifadeler kullanın. Örneğin aşağıdaki SQL deyimi, yıllık maaşları 600 Milyon TL'den yüksek olan çalışanları seçer.

SELECT Soyadı, Maaş

FROM Çalışanlar

WHERE Maaş > 21000;

Bir WHERE yan tümcesi, And ve Or gibi mantıksal işleçlerle birbirine bağlı en çok 40 ifade içerebilir.

Bir boşluk veya noktalama işareti içeren bir alan adı girerken, adı köşeli ayraçlar ([ ]) içine alın.  Örneğin bir müşteri bilgileri tablosu, belirli müşteriler hakkında bilgiler içerebilir:

SELECT [Müşterinin En Sevdiği Lokanta]

Ölçüt değişkenini belirttiğinizde, tarih rakamları , Microsoft® Jet veritabanı alt yapısının A.B.D. sürümünü kullanmıyor olsanız bile A.B.D. biçiminde olmalıdır. Örneğin 10 Mayıs 1996, İngilizce biçiminde 10/5/96 şeklinde ve A.B.D. biçiminde 5/10/96 olarak yazılır. Tarih rakamlarını, aşağıdaki örnekte görüldüğü gibi diyez işareti (#) içine aldığınızdan emin olun.

Bir İngiltere veritabanında 10 Mayıs 1996 tarihli kayıtları bulmak için, aşağıdaki SQL deyimini kullanmalısınız.

SELECT *

FROM Siparişler

WHERE YüklemeTarihi = #5/10/96#;

Ayrıca, Microsoft Windows® tarafından belirlenen uluslararası ayarları algılayan DateValue işlevini de kullanabilirsiniz. Örneğin, A.B.D. için şu kodları kullanın:

SELECT *

FROM Siparişler

WHERE YüklemeTarihi = TarihDeğeri('5/10/96');

Ve İngiltere için şu kodları kullanın:

SELECT *

FROM Siparişler

WHERE YüklemeTarihi = TarihDeğeri('10/5/96');


Not Ölçüt dizesinde başvurulan sütun GUID türünde ise, ölçüt ifadesi biraz farklı bir sözdizimi kullanır:

WHERE YinelemeNo = {GUID {12345678-90AB-CDEF-1234-567890ABCDEF}}

Gösterildiği gibi içiçe parantezler ve tireler eklediğinizden emin olun.


WHERE Yan Tümcesi Örneği

Aşağıdaki örnek, Çalışanlar tablosunda Maaş alanının bulunduğunu varsayar. Bu alan gerçekte Nortwind veritabanının Çalışanlar tablosunda bulunmaz.

Bu örnek, soyadı Etikan olan kayıtların Adı ve Soyadı bilgilerini seçer.

Bu örnek, SELECT deyimi örneğinde bulabileceğiniz EnumFields yordamını çağırır.

Sub WhereX()

    Dim dbs As Database, rst As Recordset

    ' Bu satyry, bilgisayarynyzdaki Northwind yolunu

    ' bulundurmak üzere değiştirin.

    Set dbs = OpenDatabase("Northwind.mdb")

    ' Çalışanlar tablosundan, soyadı Etikan olan

    ' kayytlary seçer.

    Set rst = dbs.OpenRecordset("SELECT Soyady, " _

        & "Adı FROM Çalışanlar " _

        & "WHERE Soyady = 'Etikan';")

    

    ' Recordset'i başlatır.

    rst.MoveLast

    

    ' Recordset içeriklerini yazdyrmak üzere EnumFields

    ' yordamını çağırır.

    EnumFields rst, 12

    dbs.Close

End Sub



CONSTRAINT Yan Tümcesi

Bir kısıtlama bir dizin e benzer, ancak bir başka tablo ile ilişki kurmak için de kullanılabilir.

CONSTRAINT yan tümcesini ALTER TABLE ve CREATE TABLE deyimlerinde, kısıtlama oluşturmak veya silmek üzere kullanabilirsiniz. İki tür CONSTRAINT yan tümcesi vardır: tek bir alanda bir kısıtlama oluşturmak için bir tane ve birden çok alanda bir kısıtlama oluşturmak için bir tane.


Not Microsoft Jet veritabanı alt yapısı , Microsoft Jet veritabanları dışında ALTER TABLE kullanımını veya herhangi bir veri tanımı dili (DDL) deyimini desteklemez. Bunun yerine DAO Create yöntemlerini kullanın.


Sözdizimi

Tek alan kısıtlaması:

CONSTRAINT adı {PRIMARY KEY | UNIQUE | NOT NULL |
    REFERENCES yabancıtablo [(yabancıalan1, yabancıalan2)]
    [ON UPDATE CASCADE | SET NULL]
    [ON DELETE CASCADE | SET NULL]}

Çok alan kısıtlaması:

CONSTRAINT adı
    {PRIMARY KEY (birincil1[, birincil2 [, ...]]) |
    UNIQUE (benzersiz1[, benzersiz2 [, ...]]) |
    NOT NULL (nulldeğil1[, nulldeğil2 [, ...]]) |
    FOREIGN KEY [NO INDEX] (başvuru1[, başvuru2 [, ...]]) REFERENCES yabancıtablo [(yabancıalan1 [, yabancıalan2 [, ...]])]
    [ON UPDATE CASCADE | SET NULL]
    [ON DELETE CASCADE | SET NULL]}

CONSTRAINT yan tümcesinin bölümleri şunlardır:

Bölüm

Açıklama

adı

Oluşturulacak kısıtlamanın adı.

birincil1, birincil2

Birincil anahtar olarak belirlenecek alan veya alanların adı.

benzersiz1, benzersiz2

Benzersiz anahtar olarak belirlenecek alan veya alanların adı.

nulldeğil1, nulldeğil2

Null olmayacak şekilde kısıtlanan alan veya alanların adı.

başvuru1, başvuru2

Başka bir tablodaki alanlara başvuran yabancı anahtar alan veya alanlarının adıdır.

yabancıtablo

Yabancıanahtar tarafından belirtilen alan veya alanları içeren yabancı tablo nun adıdır.

yabancıalan1, yabancıalan2

Başvuru1 ve başvuru2 tarafından belirtilen yabancıtablo içindeki alan veya alanların adıdır. Başvurulan alan yabancıtablonun birincil anahtarı ise bu yan tümceyi ihmal edebilirsiniz.


Uyarılar

Tek alan kısıtlaması sözdizimini, ALTER TABLE veya CREATE TABLE deyiminin alan tanımı yan tümcesinde alanın veri türünün belirtiminin hemen ardından kullanabilirsiniz.

Çok alan kısıtlaması sözdizimini, ALTER TABLE veya CREATE TABLE deyiminde alan tanımı yan tümcesinin dışında CONSTRAINT saklı sözcüğü nü her kullandığınızda kullanırsınız.

CONSTRAINT yan tümcesini kullanarak, bir alanı aşağıdaki kısıtlama türlerinden biri olarak belirleyebilirsiniz:

  • UNIQUE saklı sözcüğünü, bir alanı benzersiz anahtar olarak belirlemek üzere kullanabilirsiniz. Bu, tablodaki iki farklı kaydın bu alanda aynı değere sahip olamaması anlamına gelir. Herhangi bir alanı veya alan gurubunu, benzersiz olarak kısıtlayabilirsiniz. Çok alanlı bir kısıtlama bir benzersiz anahtar olarak belirlendiyse, dizindeki tüm alanların birleştirilmiş değerlerinin benzersiz olması gerekir; bu alanlardan yalnızca birindeki değer bir veya daha çok kayıtta aynı olabilir.

  • PRIMARY KEY saklı sözcüklerini, bir alanı veya bir alan kümesini bir tabloda birincil anahtar olarak belirlemek üzere kullanabilirsiniz. Birincil anahtardaki tüm değerlerin benzersiz olması ve Null olmaması gerekir; ayrıca, bir tabloda yalnızca bir tek birincil anahtar olabilir.



Not Zaten birincil anahtarı olan bir tabloda PRIMARY KEY kısıtlaması belirlemeyin, aksi takdirde hata oluşur.



  • FOREIGN KEY saklı sözcüğünü, bir alanı yabancı anahtar olarak belirlemek üzere kullanabilirsiniz. Yabancı tablonun birincil anahtarı birden fazla alandan oluşuyorsa, başvuran tüm alanları, yabancı tablonun adını ve başvuran alanların listelendiği sırada yabancı tablonun başvurulan alanlarını listeleyen çok alanlı bir kısıtlama tanımı kullanmalısınız. Başvurulan alan veya alanlar yabancı tablonun birincil anahtarı ise, başvurulan alanları belirtmeniz gerekmez. Veritabanı alt yapısı varsayım olarak, yabancı tablonun birincil anahtarının başvurulan alanlar olduğunu varsayar.

Yabancı anahtar kısıtlamaları, ilgili bir birincil anahtar değeri değiştiğinde gerçekleştirilecek olan belirli eylemleri tanımlar.

  • CONTRAINT yan tümcesinin tanımlı olduğu tablodaki birincil anahtarda yürütülecek ilgili eylemi temel alan ve yabancı tabloda gerçekleştirilecek eylemleri belirleyebilirsiniz. Örneğin, Müşteriler tablosunda aşağıdaki tanımın yapıldığını düşünelim:

CREATE TABLE Müşteriler (MüştNo INTEGER PRIMARY KEY, İstNo NCHAR VARYING (50))

Siparişler tablosunda da, Müşteriler tablosunun birincil anahtarına başvuran yabancı anahtar ilişkisinin tanımlandığını düşünelim:

CREATE TABLE Siparişler (SiparişNo INTEGER PRIMARY KEY, MüştNo INTEGER, SiparişNotları NCHAR VARYING (255), CONSTRAINT YASiparişlerMüştNo FOREIGN KEY (MüştNo) REFERENCES Müşteriler ON UPDATE CASCADE ON DELETE CASCADE

Yabancı anahtarda hem ON UPDATE CASCADE hem de ON DELETE CASCADE yan tümcesi tanımlıdır. ON UPDATE CASCADE yan tümcesi, müşterinin numarası (MüştNo) Müşteriler tablosunda güncelleştirildiğinde bu güncelleştirmenin Siparişler tablosunda da yapılmasını sağlar. İlgili müşteri numarası değeri içeren her sipariş, otomatik olarak yeni değer ile güncelleştirilir. ON DELETE CASCADE yan tümcesi, Müşteriler tablosunda bir müşteri silindiğinde Siparişler tablosundaki aynı müşteri numarası değerini içeren tüm satırların silinmesini sağlar.

Şimdi de, Siparişler tablosunda CASCADE eylemi yerine SET NULL eylemini kullanarak farklı bir tanım yapıldığını düşünelim:

CREATE TABLE Siparişler (SiparişNo INTEGER PRIMARY KEY, MüştNo INTEGER, SiparişNotları NCHAR VARYING (255), CONSTRAINT YASiparişlerMüştNo FOREIGN KEY (MüştNo) REFERENCES Müşteriler ON UPDATE SET NULL ON DELETE SET NULL

ON UPDATE SET NULL yan tümcesi, müşterinin numarası (MüştNo) Müşteriler tablosunda güncelleştirildiğinde, Siparişler tablosunda otomatik olarak ilgili yabancı anahtar değerlerinin NULL olarak belirlenmesini sağlar. Benzer biçimde, ON DELETE SET NULL yan tümcesi, müşteri Müşteriler tablosundan silindiğinde, Siparişler tablosunda otomatik olarak tüm ilgili yabancı anahtarların NULL olarak belirlenmesini sağlar.

Yabancı anahtarlar için dizinlerin otomatik olarak oluşturulmasını engellemek için, NO INDEX değiştiricisi kullanılabilir. Bu yabancı anahtar tanımı şekli, ancak sonuç dizin değerleri sık sık yinelenecekse kullanılmalıdır. Yabancı anahtar dizinindeki değerlerin sık sık yinelendiği durumlarda, bir dizin kullanmak, basit biçimde bir tablo tarama işlemi yapmaktan daha az verimli olabilir. Tablodan satırların silindiği ve tabloya satırların eklendiği bu tür bir dizini tutmak, başarımı düşürür ve herhangi bir yarar sağlamaz.



PROCEDURE Yan Tümcesi

Sorgu için bir ad ve isteğe bağlı parametreler tanımlar.


Not PROCEDURE yan tümcesi PROCEDURE deyiminden sonra gelir. PROCEDURE yan tümcesi desteklenir ancak; PROCEDURE deyimi PROCEDURE yan tümcesinin yeteneklerinin bir üst kümesini sağlar ve önerilen sözdizimidir.


Sözdizimi

PROCEDURE adı [parametre1 veritürü[, parametre2 veritürü[, ...]]

PROCEDURE yan tümcesinin bölümleri şunlardır:

Bölüm

Açıklama

Adı

Yordamın adıdır. Standart adlandırma kuralları na uymalıdır.

param1, param2

Bir veya daha fazla alan adı veya parametre dir. Örneğin:

PROCEDURE Ülkelere_Göre_Satışlar [Başlangıç Tarihi] TarihSaat, [Bitiş Tarihi] TarihSaat;

Parametreler hakkında ayrıntılı bilgi için parametreler konusuna bakın.

Veritürü

Birincil Microsoft Jet SQL veri türleri veya onların eşanlamlılarından biridir.


Uyarılar
Bir SQL yordamı, yordamın adını belirten PROCEDURE yan tümcesinden, isteğe bağlı bir parametre tanımları listesinden ve tek bir SQL deyimi nden oluşur. Örneğin, Parça_Numarasını_Al yordamı, belirtilen parça numarasını alan bir sorgu çalıştırabilir.


Notlar

  • Yan tümce birden fazla alan tanımı içeriyorsa (yani parametre-veritürü çiftse), bunları virgüllerle ayırın.

  • PROCEDURE yan tümcesinin ardından bir SQL deyimi (örneğin bir SELECT veya UPDATE statement) gelmelidir.



CREATE PROCEDURE Deyimi, PROCEDURE Yan Tümcesi Örneği

Bu örnek, sorguyu KategoriListesi olarak adlandırır.

Bu örnek, SELECT deyimi örneğinde bulabileceğiniz EnumFields yordamını çağırır.

Sub ProcedureX()

    Dim dbs As Database, rst As Recordset

    Dim qdf As QueryDef, strSql As String

    

    ' Bu satyry, bilgisayarynyzdaki Northwind yolunu

    ' bulundurmak üzere değiştirin.

    Set dbs = OpenDatabase("Northwind.mdb")

    

    strSql = "PROCEDURE KategoriListesi; " _

        & "SELECT DISTINCTROW KategoriAdy, " _

        & "KategoriNo FROM Kategoriler " _

        & "ORDER BY KategoriAdy;"

    

    ' SQL deyimini temel alan bir adlandırılmış

    ' bir QueryDef oluşturur.

    Set qdf = dbs.CreateQueryDef("YeniSorgu", strSql)

    ' Geçici bir anlık görüntü türünde Recordset oluşturur.

    Set rst = qdf.OpenRecordset(dbOpenSnapshot)

    ' Recordset'i başlatır.

    rst.MoveLast

            

    ' Recordset içeriklerini yazdyrmak üzere EnumFields

    ' yordamını çağırır. Recordset nesnesini ve

    ' istenen alan genişliğini aktarır.

    EnumFields rst, 15

    

    ' Bu bir örnek olduğu için QueryDef'i

    ' siler.

    dbs.QueryDefs.Delete "YeniSorgu"

    

    dbs.Close

End Sub




  • İşlemler

    • UNION İşlemi

İki veya daha fazla bağımsız sorgu veya tablonun sonuçlarını birleştiren bir birleşim sorgusu oluşturur.

Sözdizimi

[TABLE] sorgu1 UNION [ALL] [TABLE] sorgu2 [UNION [ALL] [TABLE] sorgun [ ... ]]

UNION işleminin bölümleri şunlardır:

Bölüm

Açıklama

sorgu1-n

Bir SELECT deyimi , saklı bir sorgunun adı veya TABLE anahtar sözcüğünden sonra gelen saklı bir tablonun adıdır.


Uyarılar

İki veya daha fazla sorgunun, tablonun ve SELECT deyiminin sonuçlarını herhangi bir birleşimde tek bir UNION işleminde birleştirebilirsiniz. Aşağıdaki örnek, Yeni Hesaplar adlı var olan bir tablo ile bir SELECT deyimini birleştirir:

TABLE [Yeni Hesaplar] UNION ALL

SELECT *

FROM Müşteriler

WHERE SiparişMiktarı >= .1000);

Varsayım olarak, UNION işlemini kullandığınızda yinelenen kayıt döndürülmez; ancak, tüm kayıtların döndürüldüğünden emin olmak için ALL doğrulamasını bulundurabilirsiniz. Bu ayrıca, sorguyu daha hızlandırır.

UNION işlemindeki tüm sorgular aynı sayıda alan istemelidir; ancak, alanların aynı boyutta veya aynı veri türü nde olması gerekmez.

Diğeradları yalnızca ilk SELECT deyiminde kullanın; bunlar başka deyimlerde dikkate alınmaz. ORDER BY yan tümcesinde alanlara, ilk SELECT deyiminde adlandırıldıkları şekilde başvurun.

Notlar

  • Bir GROUP BY veya HAVING yan tümcesini döndürülen verileri gruplandırmak üzere her sorgu değişkeninde kullanabilirsiniz.

  • ORDER BY yan tümcesini, döndürülen verileri belirli bir sırada görüntülemek için son sorgu değişkeninin sonunda kullanabilirsiniz.


UNION İşlemi Örneği

Bu örnek, Brezilya'daki tüm sağlayıcıların şehirlerini ve adlarını alır.

Bu örnek, SELECT deyimi örneğinde bulabileceğiniz EnumFields yordamını çağırır.

Sub UnionX()

    Dim dbs As Database, rst As Recordset

    ' Bu satyry, bilgisayarynyzdaki Northwind yolunu

    ' bulundurmak üzere değiştirin.

    Set dbs = OpenDatabase("Northwind.mdb")

    

    ' Brezilya'daki tüm sağlayıcıların ve müşterilerin

    ' adlarını ve şehirlerini alır.

    Set rst = dbs.OpenRecordset("SELECT ŞirketAdı," _

        & " Şehir FROM Sağlayıcılar" _

        & " WHERE Ülke = 'Brezilya' UNION" _

        & " SELECT ŞirketAdı, Şehir FROM Müşteriler" _

        & " WHERE Ülke = 'Brazil';")

    

    ' Recordset'i başlatır.

    rst.MoveLast

    

    ' Recordset içeriklerini yazdyrmak üzere EnumFields

    ' yordamını çağırır. Recordset nesnesini ve

    ' istenen alan genişliğini aktarır.

    EnumFields rst, 12

    dbs.Close

End Sub



  • INNER JOIN İşlemi

Ortak bir alanda eşleşen değerler olduğunda iki tablonun kayıtlarını birleştirir.

Sözdizimi

FROM tablo1 INNER JOIN tablo2 ON tablo1.alan1 karşılaştırma tablo2.alan2

INNER JOIN işleminin bölümleri şunlardır:

Bölüm

Açıklama

tablo1, tablo2

İçinden kayıtların birleştirileceği tabloların adıdır.

alan1, alan2

Birleştirilen alanların adıdır. Alanlar sayısal değilse, aynı veri türü nde olmalı ve aynı türde veriler içermelidir, ancak alanların aynı ada sahip olmaları gerekmez.

karşılaştırma

Herhangi bir karşılaştırma işlecidir: "=," "<," ">," "<=," ">=," or "<>."


Uyarılar

INNER JOIN işlemini herhangi bir FROM yan tümcesinde kullanabilirsiniz. Bu, en sık kullanılan birleştirme türüdür. İç birleşimler, iki tabloda ortak olan bir alanda eşleşen değerler olduğunda her iki tablonun kayıtlarını birleştirirler.

INNER JOIN'i, Bölümler ve Çalışanlar tablolarında, bölümlerdeki tüm çalışanları seçmek için kullanabilirsiniz. Buna karşılık, tüm bölümleri (bölüme atanmış çalışan olmasa bile) veya tüm çalışanları (herhangi bir bölüme atanmamış olsa bile) seçmek için, bir dış birleşim oluşturmak üzere LEFT JOIN veya RIGHT JOIN işlemini kullanabilirsiniz.

Not veya OLE Nesnesi verileri içeren alanları birleştirmeyi denerseniz bir hata oluşur.

Benzer türdeki herhangi iki sayısal alanı birleştirebilirsiniz. Örneğin, benzer türlerde olduklarında OtomatikSayı ve Uzun alanlarını birleştirebilirsiniz. Ancak, Tek ve Çift türündeki alanları birleştiremezsiniz.

Aşağıdaki örnek, Kategoriler ve Ürünler tablolarını KategoriNo alanına göre nasıl birleştirebileceğinizi gösterir:

SELECT KategoriAdy, ÜrünAdy

FROM Kategoriler INNER JOIN Ürünler

ON Kategoriler.KategoriNo = Ürünler.KategoriNo;

Önceki örnekte KategoriNo, birleştirilen alandır ancak SELECT deyiminde yer almadığı için sorgu sonuçlarında bulunmaz. Birleştirilen alanı bulundurmak için, alan adını SELECT deyiminde yazın (örneğimizde Kategoriler.KategoriNo).

Aşağıdaki sözdizimini kullanarak, JOIN deyimi içinde çok sayıda ON yan tümcesini de bağlayabilirsiniz:

SELECT alanlar
FROM tablo1 INNER JOIN tablo2
ON tablo1.alan1 karşılaştırma tablo2.alan1 AND
ON tablo1.alan2 karşılaştırma tablo2.alan2) OR
ON tablo1.alan3 karşılaştırma tablo2.alan3)];

Aşağıdaki sözdizimini kullanarak içiçe JOIN deyimleri de oluşturabilirsiniz:

SELECT alanlar
FROM tablo1 INNER JOIN
(tablo2 INNER JOIN [( ]tablo3
[INNER JOIN [( ]tablox [INNER JOIN ...)] 
ON tablo3.alan3 karşılaştırma tablox.alanx)]
ON tablo2.alan2 karşılaştırma tablo3.alan3
ON tablo1.alan1 karşılaştırma tablo2.alan2;

Bir LEFT JOIN veya bir RIGHT JOIN bir INNER JOIN içinde içiçe yer alabilir ancak bir INNER JOIN bir LEFT JOIN veya RIGHT JOIN içinde yer alamaz.

INNER JOIN İşlemi Örneği

Bu örnek iki benzer-birleşim oluşturur: biri Sipariş Ayrıntıları ve Siparişler tabloları arasında, diğeri Siparişler ve Çalışanlar tabloları arasında. Bu, Çalışanlar tablosu satış verilerini içermediği ve Sipariş Ayrıntıları tablosu da çalışan verilerini içermediği için gereklidir. Sorgu, bir çalışan listesi ve bu çalışanların toplam satışlarını verir.

Bu örnek, SELECT deyimi örneğinde bulabileceğiniz EnumFields yordamını çağırır.

Sub InnerJoinX()

    Dim dbs As Database, rst As Recordset

    ' Bu satyry, bilgisayarynyzdaki Northwind yolunu

    ' bulundurmak üzere değiştirin.

    Set dbs = OpenDatabase("Northwind.mdb")

    

    ' Sipariş Ayrıntıları ve Siparişler tablosu arasında

    ' bir birleşim ve Siparişler ile Çalışanlar tabloları

    ' arasında da bir birleşim oluşturur. Çalışanların listesini

    ' ve onların toplam satış miktarlarını alır.

    Set rst = dbs.OpenRecordset("SELECT DISTINCTROW " _

        & "Sum(BirimFiyatı * Miktar) AS Satışlar, " _

        & "(Ady & Chr(32) & Soyady) AS Ad " _

        & "FROM Çalışanlar INNER JOIN(Siparişler " _

        & "INNER JOIN [Sipariş Ayrıntıları] " _

        & "ON [Sipariş Ayrıntıları].SiparişNo = " _

        & "Siparişler.SiparişNo ) " _

        & "ON Siparişler.ÇalışanNo = " _

        & "Çalışanlar.ÇalışanNo " _

        & "GROUP BY (Ady & Chr(32) & Soyady);")

    

    ' Recordset'i başlatır.

    rst.MoveLast

    

    ' Recordset içeriklerini yazdyrmak üzere EnumFields

    ' yordamını çağırır. Recordset nesnesini ve

    ' istenen alan genişliğini aktarır.

    EnumFields rst, 20

    dbs.Close

End Sub



  • LEFT JOIN, RIGHT JOIN İşlemleri

Herhangi bir FROM yan tümcesinde kullanıldığında kaynak tablo kayıtlarını birleştirir.

Sözdizimi

FROM tablo1 [ LEFT | RIGHT ] JOIN tablo2
    ON tablo1.alan1 karşılaştırma tablo2.alan2

LEFT JOIN ve RIGHT JOIN işlemlerinin bölümleri şunlardır:

Bölüm

Açıklama

tablo1, tablo2

İçinden kayıtların birleştirileceği tabloların adıdır.

alan1, alan2

Birleştirilen alanların adıdır. Alanlar aynı veri türü nde olmalı ve aynı türde veriler içermelidir, ancak alanların aynı ada sahip olmaları gerekmez.

karşılaştırma

Herhangi bir karşılaştırma işlecidir: "=," "<," ">," "<=," ">=," or "<>."


Uyarılar

Bir sol dış birleşim oluşturmak için LEFT JOIN işlemini kullanın. Sol dış birleşimler, ikinci tablonun (sağdaki) kayıtlarında eşleşen değer olmasa bile, iki tablodan ilkinin (soldaki) tüm kayıtlarını içerir.

Bir sağ dış birleşim oluşturmak için RIGHT JOIN işlemini kullanın. Sağ dış birleşimler, ilk tablonun (soldaki) kayıtlarında eşleşen değer olmasa bile, iki tablodan ikincisinin (sağdaki) tüm kayıtlarını içerir.

Örneğin, Bölümler (sol) ve Çalışanlar (sağ) tabloları ile, bölüme atanmış çalışan olmasa bile tüm bölümleri seçmek için LEFT JOIN işlemini kullanabilirsiniz. Herhangi bir bölüme atanmamış olanlar da dahil, tüm çalışanları seçmek için RIGHT JOIN'i kullanmalısınız.

Aşağıdaki örnek, Kategoriler ve Ürünler tablolarını KategoriNo alanına göre nasıl birleştirebileceğinizi gösterir. Sorgu, ürün içermeyenler de dahil olmak üzere tüm kategorilerin bir listesini oluşturur:

SELECT KategoriAdy,

ÜrünAdy

FROM Kategoriler LEFT JOIN Ürünler

ON Kategoriler.KategoriNo = Ürünler.KategoriNo;

Bu örnekte KategoriNo, birleştirilen alandır ancak SELECT deyiminde yer almadığı için sorgu sonuçlarında bulunmaz. Birleştirilen alanı bulundurmak için, alan adını SELECT deyiminde yazın (örneğimizde Kategoriler.KategoriAdı).


Notlar

Yalnızca verileri birleştirilmiş alanlardaki verilerle aynı olan kayıtları bulunduran bir sorgu oluşturmak için, bir INNER JOIN işlemi kullanın.

  • Bir LEFT JOIN veya bir RIGHT JOIN bir INNER JOIN içinde içiçe yer alabilir ancak bir INNER JOIN bir LEFT JOIN veya RIGHT JOIN içinde yer alamaz. Birleşimlerin başka birleşimlerin içine nasıl konulabileceği konusunda, INNER JOIN konusundaki içiçe yerleştirme tartışmasına bakın.

  • Çok sayıda ON yan tümcesini bağlayabilirsiniz. Bunun nasıl yapıldığı konusunda, INNER JOIN konusundaki yan tümce bağlama tartışmasına bakın.

Not veya OLE Nesnesi verileri içeren alanları birleştirmeyi denerseniz bir hata oluşur.

LEFT JOIN, RIGHT JOIN İşlemleri Örneği

Bu örnek, Çalışanlar tablosunda Bölüm Adı ve Bölüm No alanlarının bulunduğunu varsayar. Bu alanlar gerçekte Nortwind veritabanının Çalışanlar tablosunda bulunmaz.

Bu örnek, içinde çalışan bulunmayanlar dahil tüm bölümleri seçer.

Bu örnek, SELECT deyimi örneğinde bulabileceğiniz EnumFields yordamını çağırır.

Sub LeftRightJoinX()

    Dim dbs As Database, rst As Recordset

    ' Bu satyry, bilgisayarynyzdaki Northwind yolunu

    ' bulundurmak üzere değiştirin.

    Set dbs = OpenDatabase("Northwind.mdb")

    

    ' Çalışanı bulunmayanlar dahil tüm bölümleri

    ' seçer.

    Set rst = dbs.OpenRecordset _

        ("SELECT [Bölüm Ady], " _

        & "Ady & Chr(32) & Soyady AS Ad " _

        & "FROM Bölümler LEFT JOIN Çalışanlar " _

        & "ON Bölümler.[Bölüm No] = " _

        & "Çalışanlar.[Bölüm No] " _

        & "ORDER BY [Bölüm Ady];")

    

    ' Recordset'i başlatır.

    rst.MoveLast

    

    ' Recordset içeriklerini yazdyrmak üzere EnumFields

    ' yordamını çağırır. Recordset nesnesini ve

    ' istenen alan genişliğini aktarır.

    EnumFields rst, 20

    dbs.Close

End Sub

  • İşleçler

    • Like İşleci

Bir dize ifadesi ile bir SQL ifadesindeki bir örnek ile karşılaştırır.

Sözdizimi

ifade Like "örnek"

Like işlecinin bölümleri şunlardır:

Bölüm

Açıklama

ifade

WHERE yan tümcesi nde kullanılan SQL ifadesidir.

örnek

İfadenin karşılaştırılacağı dize veya karakter metinleridir.


Uyarılar

Like işlecini, belirlediğiniz örnek ile eşleşen alan değerlerini bulmak için kullanabilirsiniz. Örnek için, kesin bir değer belirtebilir (örneğin, Like "gamze") veya bir değer aralığını bulmak için joker karakterleri ni kullanabilirsiniz (örneğin, Like "Ga*").

Bir ifadede Like işlecini, bir alan değerini bir dize ifadesi ile karşılaştırmak için kullanabilirsiniz. Örneğin bir SQL sorgusunda Like "C*"yazarsanız, sorgu, C harfi ile başlayan tüm alan değerlerini verir. Bir parametre sorgusu nda, kullanıcıya aranacak örneği sorabilirsiniz.

Aşağıdaki örnek, P harfi ile başlayan ve A ile F arasında bir harf ile devam eden ve toplam üç hane olan verileri verir:

Like "P[A-F]###"

Aşağıdaki tablo, ifadeleri farklı örneklerle sınamak için Like işlecini nasıl kullanacağınızı gösterir.


Eşleme türü


Örnek

Eşleme
(True verir)

Eşleme yok
(False verir)

Çok sayıda karakter

a*a

aa, aBa, aBBBa

aBC

 

*ab*

abc, AABB, Xab

aZb, bac

Özel karakter

a[*]a

a*a

aaa

Çok sayıda karakter

ab*

abcdefg, abc

cab, aab

Tek karakter

a?a

aaa, a3a, aBa

aBBBa

Tek hane

a#a

a0a, a1a, a2a

aaa, a10a

Karakter aralığı

[a-z]

f, p, j

2, &

Aralık dışı

[!a-z]

9, &, %

b, a

Hane değil

[!0-9]

A, a, &, ~

0, 1, 9

Birleşik

a[!b-m]#

An9, az0, a99

abc, aj0

Like İşleci Örneği

Bu örnek, adları A ile D harfleri arasındaki harflerle başlayan çalışanların listesini verir.

Bu örnek, SELECT deyimi örneğinde bulabileceğiniz EnumFields yordamını çağırır.

Sub LikeX()

    Dim dbs As Database, rst As Recordset

    ' Bu satyry, bilgisayarynyzdaki Northwind yolunu

    ' bulundurmak üzere değiştirin.

    Set dbs = OpenDatabase("Northwind.mdb")

    ' Adları A ile D arasındaki harflerle başlayan

    ' çalışanların listesini verir.

    Set rst = dbs.OpenRecordset("SELECT Soyady," _

        & "Adı FROM Çalışanlar" _

        & " WHERE Soyady Like '[A-D]*';")

    ' Recordset'i başlatır.