SQL Nedir?

BÖLÜM-1

Yapısal Sorgulama Dili  (SQL)

İlişkisel veri tabanı yönetim sistemleri (RDBS) modeli ilk önce 1970 yılında Dr.E.F. Codd tarafından tarif edilmiştir. SQL veya Structured English Query Language (SEQUEL), IBM firması tarafından Codd’un modeli kullanılmak için geliştirilmiştir. SEQUEL sonraları SQL olmuştur. 1979 yılında, Relational Software ,SQL’in ilk ticari uygulamasını geliştirmiştir. Bugün  SQL, ilişkisel veri tabanı yönetim sistemleri standartı olarak kabul edilmektedir.

SQL, ilişkisel veri tabanlarındaki bilgileri sorgulamak için kullanılan bir dildir. SQL, tüm kullanıcıların ve uygulamaların veri tabanına erişmek için kullandıkları komutlar bütünüdür. Uygulama programları ve veri tabanı araçları kullanıcılara çoğu durumda SQL kullanmadan veri tabanına erişim imkanını sunmaktadırlar fakat bu uygulamalarda geri planda SQL kullnmaktadırlar.

Oracle SQL’I, standartlara uygundur. Daha da ötesinde, Oracle,SQL standartlarının gelişmesinde motor güç olan bir kurumdur. American National Standarts Institue (ANSI) ve International Standarts Organization (ISO) tarafından belirlenen son SQL standartı, SQL-92’dir. SQL-92’de üç aşamalı uygunluk vardır,

  • İlk seviye (Entry Level)
  • Orta seviye (Intermediate Level)
  • İleri seviyedir (Full Level)

SQL, ilişkisel veri tabanları ile uygulamaların diyaloğunu sağlamaktadır. SQL temelde verilerle mantıksal seviyede çalışmaktadır. Yani, bir tablodan birkaç kayıt seçebilmek için, o kayıtları seçebilecek bir koşul belirtilir. Koşula uyan tüm kayıtlar bir basamakta gelir ve bunlar kullnıcıya gösterilebildiği gibi, bir başka SQL’e veya uygulamaya da gönderilebilir. Kayıtların tek tek nasıl geldiği ve fiziksel olarak veri tabanının neresinde ve nasıl tutulduğu ile SQL ilgilenmektedir.

SQL komutları ile ,

  • Veri sorgulama
  • Bir tabloya kayıt ekleme, değiştirme ve silme
  • Veri tabanı nesneleri (database objects) yaratma, değiştirme ve silme
  • Veri tabanına ve nesnelerine erişimi kontrol etme
  • Veri tabanı bütünlüğünü ve tutarlılığını sağlama işlemleri yapılabilmektedir.

SQL komutları bir veya daha fazla satır olbilmektedir. SQL cümlelerinin sonuna noktalı virgül (;) konmaktadır. Birden fazla satır olan komutlarda en son satırın sonuna “ / ” işareti isteğe bağlı olarak konabilmektedir. PL/SQL , Oracle’in SQL komutlarına yapısal dillere AİT özellikleri (begin, end, loop, for, if, elsif, vb.) eklediği kendi standardı olan bir dildir. SQL*Plus, SQL ve PL/SQL komutlarının kullanılabildiği Oracle ürünüdür.

1.1  Veri Tipleri (Data Types)

Bir tablo oluştururken her sütunun; bir yordam veya fonksiyon oluştururken de her argümanın veri tipi olmak zorundadır. Bu veri tipleri o alana girilecek veriyi veya o yordamda kullanılacak argümanı sınırlandırır. Bu veri tipleri şunlardır:

  • CHAR(sayı)
  • DATE
  • MSLABEL
  • NUMBER (tam,ondalık)
  • VARCHAR2 (sayı)
  • LONG
  • LONG RAW
  • RAW (sayı)
  • ROWID

Şimdi bu tanımları açıklayalım.

CHAR (sayı): Sabit uzunluktaki alfanümerik (karakter) verilerin tutulabildiği alanlar için kullanılır. Maksimum 255 karakter olabilir. Eğer sayı ile ifade edilen numaralardan daha kısa uzunlukta veriler girilirse Oracle kaydın sonuna boşluk ekleyerek sabit uzunuğa jadar getirir.

DATE: Tarih tutan alanlar için kullanılır. Bu tip alanlarda, tarih bilgileri ve saat bilgileri tutulabilir. Tarih formatları, ülkelere göre değişmektedir. Tarih alanları ile aritmatik işlemleri yapılabilmektedir. Standart olanı, DD-MON-YY’dir fakat bu amerikalıların kullandıkları şekildir, bu formatta MON yerine JAN, FEB, MAR gibi ayların ingilizce karşılıklarının ilk üç karakteri yazılmaktadır.

MLSLABEL:  Trusted Oracle’ da ( Oracle’ nın güvenlik açısından biraz daha gelişmiş versiyonu) kullanılan işletim sistemine ait binary dosyadır.

NUMBER (tam, ondalık): Nümerik verilerin tutulduğu  alanlar için kullanılır. Tam kısım maksimum   38 basamak olabilir. Ondalık kısmın basamak sayısı da –84 ile 127 arasındadır.

LONG: 2 GB’ a kadar karakter bilgi tutabilen alanlar için kullanılır.Bir tabloda birden fazla long veri tipine sahip olamaz. LONG veri tipine sahip olan alanlar üzerinde indeks oluşturulamaz. LONG alanlar aşağıdaki tip SQL cümlelerinde kullanılamazlar:

*WHERE  *GROUP BY  * ORDER BY  * DISTINC  * CREATE CLUSTER  *CREATE TABLE AS SELECT  *SUBSTR, INSTR  gibi …

LONG RAW: 2 GB’ a kadar binary bilgi tutabilen alanlar için kullanılır.

RAW (sayı): Maksimum 255 byte’a kadar bilgi tutabilen binary alanlar için kullnılır.

RAWID: Bir Kaydın tekil adresini tutan alanlar için kullanılır. Veri tabanındaki her kaydın bir adresi vardır. Bu değer , SQL cümlesi içinde diğer sütunlar ile birlikte

ROWID yazarak öğRenilebilir. ROWID üç  kısımdan oluşmaktadır: BLOK.KAYIT.DOSYA ‘dır.

VARCHAR2 (sayı) : Değişken  uzunluktaki alfanümerik dataların tutulabildiği alanlar için kullanılır. Maksimum 2000 karakter olabilir.

1.2  SQL’ in Bölümleri :

 

SQL, temel olarak aşağıdaki bölümlerden oluşmaktadır.

  • SELECT: Seçilecek alanların yazıldığı bölümdür.
  • FROM: Kullanılacak tabloların yazıldığı bölümdür.
  • WHERE: Sorgu şartlarının yazıldığı bölümdür.
  • GROUP BY: Belli alanlara göre kayıtları gruplayıp getirmek için kullanılan bölümdür.
  • HAVING: Group By’ ın kullanıldığı SQL’lerdeki grupla ilgili şart bölümüdür.
  • ORDER  BY: Sorgu sonucunda dönen kayıtlar için sıralamanın tanımlandığı bölümdür.

SQL KOMUTLARI

FROM Deyimi

From deyimi sorgulanacak ve kullanılacak bilgilerin hangi tablodan alınacağını belirtir. Tablodan hangi hücrelerin içindeki bilgilerin kullanılacağını ise;
TabloAdı.Hücre1, TabloAdı.Hücre2, …    veya    * jokeri ile belirleriz. Bir örnek ile daha iyi anlayacağız.

Ögrenci Tablosu;

ADI SOYADI NO
metin[20] metin[20] sayı

Örnek :   Ögrenci tablosu ADI, SOYADI, NO omak üzere 3 hücreden oluşan bir tablo olsun. SQL ile, Bu tabodan ADI ve SOYADI hücrelerini seçerek yeni bir tablo (Bu bir sorgudur{Query} ) oluşturunuz.

Select ögrenci.ADI, ögrenci.SOYADI From ögrenci

Eğer tüm hücreleri seçin deseydik ; o zaman yazacağımız SQL cümlesi şöyle olmalı idi. :

Select ögrenci.ADI, ögrenci.SOYADI, ögrenci.NO From ögrenci

yada

Select * From ögrenci

WHERE Deyimi

Where deyimini de ; bir tablodan istediğimiz hücreleri seçerken, o tabloda bulunan kayıtlardan hangilerini, hangi kriterlere göre almak istersek kullanırız. Yani tabloda bulunan kayıtlardan hangilerini almak istiyorsak istediğimiz koşulu where deyiminden sonra kullanarak bu kayıtları elde edebiliriz. Aşağıdaki örnekleri inceleyelim…

Örnek 1 :  Yine ögrenci tablosunda bulunan kayıtlardan Adı Serkan olan öğrencileri seçmemizi sağlayan SQL cümlesi şöyledir..:

Select * From ögrenci Where ögrenci.ADI = “Serkan”

Örnek 2:  Yada soyadında ” r ” harfi geçen öğrencileri aşağıdaki SQL cümlesi ile seçeriz..:

Select * From ögrenci Where ögrenci.SOYADI = “%r%”

Örnek 3:   Eğer Tabloda bulunan kayıtlardan diyelim ki; numarası 1044 ile 2866 arasında olan öğrencileri seçmek istersek aşağıdaki SQL cümlesini kullanırız..:

Select * From ögrenci Where 1044<ögrenci.NO<2866

###############################################

GROUP BY Deyimi

Group by deyimi SUM, COUNT kullanarak toplam bir sonuç ile bir tablodan istenilen kritere göre istenilen hücreler alınır ve yine group by ‘dan sonra yazılan hücrelere göre gruplanır. GROUP BY isteğe bağlıdır. SELECT deyiminde SQL toplam işlevi yoksa özet değerler gözardı edilir.

Örnek 1 :   Yine ögrenci tablomuzu kullanarakdan soyadı Türkel olan öğrencileri seçerek AD, SOYAD ve NO fieldlarına göre gruplandıralım…:

Select ögrenci.AD, ögreci.SOYAD, ögrenci.NO From ögrenci Whereögrenci.SOYAD=’Türkel’ Group By ögrenci.AD, ögreci.SOYAD, ögrenci.NO

###############################################

ORDER BY Deyimi

Order By deyimi ile de; sorgulama sonucunda bulunan kayıtlar verilen hücrelere göre, Büyükten küçüğe yada Küçükden büyüğe doğru sıralanır.

Örnek 1 :    Adı Serkan olan Öğrencilerin numaralarını küçükden büyüğe doğru sıralayınız..:

Select * From ögrenci Where ögrenci.AD=’Serkan’ Order By ögrenci.NO [asc]

asc yi yazmasakda burada default değer olduğu için küçükden büyüğe doğru sıralama yapardı. Eğer büyükden küçüğe doğru sırala dese idik o zaman şöyle bir SQL cümlesi yazmalıydık…:

Select * From ögrenci Where ögrenci.AD=’Serkan’ Order By ögrenci.NO Desc

###############################################

HAVING Deyimi

Having Deyimi de; GROUP BY yan tümcesi olan bir SELECT deyiminde hangi gruplandırılmış kayıtların görüntüleneceğini belirler. Yani GROUP BY kayıtları birleştirdikten sonra, HAVING deyimide, 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.

Örnek 1 :    ögrenci tablosundan AD, SOYAD ve NO fieldlarını alıp bunları gruplayan ve sonra bunlarıda Numarası 1000 ile 2000 arasında olan kayıtlara göre listeleyen SQL cümlesini yazınız..:

Select ögrenci.AD, ögrenci.SOYAD, ögrenci.NO From ögrenci 
Group By
 ögrenci.AD, ögrenci.SOYAD, ögrenci.NO 
Having
 1000<ögrenci.NO<2000

###############################################

INSERT INTO Deyimi

Insert Into Deyimi bir tabloya bir veya daha çok sayıda kayıt eklemeye yarayan SQL komutudur. Buna ekleme sorgusu da denir. Esas kullanılma kalıbı aşağıdaki gibidir..:

Çok sayıda kayıt ekleme sorgusu:

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

Tek kayıt ekleme sorgusu:

INSERT INTO TabloAdı [(alan1[, alan2[, …]])] VALUES (değer1[, değer2[, …])

Örnek 1 :    ögrenci tablosuna AD = “Serkan”  SOYAD = “Türkel”  NO = 4683 bilgilerini ekleten SQL cümlesini yazın..:

Insert Into ögrenci (AD,SOYAD,NO) Values(‘Serkan’,’Türkel’,4683)

###############################################

DELETE Deyimi

Delete deyimini bir tablodan bir yada daha fazla kayıt silmek için kullanırız. aşağıdaki gibi bir yazılış kalıbı vardır..:

DELETE [Tablo.*] FROM Tablo WHERE sorgulama ifadesi

Örnek 1 :    Yine ögrenci tablosundan numarası 4556 olan öğrencinin kaydını silen SQL cümlesiniz yazınız..:

Delete * From ögrenci Where ögrenci.NO=4556

###############################################

UPDATE Deyimi

Belirtilen kriterlere göre tablodan ilgili kayıt/kayıtları alarak değerlerini değiştirmeye yarayan SQL komutudur. Kullanılış Kalıbı aşağıdaki gibidir..:

UPDATE Tablo SET yenideğer WHERE Sorgulama İfadesi

Örnek 1 :    ögrenci tablosuna eklediğimiz 4683 numaraları Serkan Türkel ‘in adını ve soyadını değiştirelim. Adı = “Ali”, Soyadı = “Sert” olsun. SQL cümlesini yazın…:

  UPDATE ögrenci SET ögrenci.AD = ‘Ali’,ögrenci.SOYAD = ‘Sert’ Where ögrenci.NO = 4683

 

1.3  SQL’ de aritmatiksel ifadeler ve fonksiyonlar :

 

1.3.1  Aritmatiksel ifadeler:

 

SELECT komutu ile, veri tabanında mevcut tablolardan listeleme yaparken, tabloda ayrı bir sütun olarak yer almamış ve ancak bir hesaplama sonucunda üretilebilecek bilgileri de liste içine katmak mümkündür.

Aşağıdaki SELECT komutu ile personelin şu anda geçerli olan maaşı ile bu maaşın %32 zamlı şekli listelenmektedir:

SELECT  ad,  soyad,  maaş,  maaş*1.32

FROM  personel;

Hesaplanmış alanları elde etmek için oluşturulacak aritmatiksel ifadelerde, aşağıda belirtilen tablodaki sembollerden yararlanılır:

Tablo1.1.

SQL’de Aritmatiksel semboller
Operatör İşlevi
**  veya  ^ Üs alma
* Çarpma
/ Bölme
+ Toplama
Çıkarma

Öncelik sırası matematikte ve diğer bilgisayar dillerinde olduğu gibidir.Üs alma hepsinden önceliklidir. Sonra * ve / gelir. * ve / aynı önceliğe sahiptir. + ve – en son önceliklidir. Parantezler kullanılarak öncelik sırası değiştirilebilir.

1.3.2  Kümeleme Fonksiyonları :

SQL, tablo içinden çeşitli matematiksel işlemlerin sonucunu otomatik olarak üretmeyi sağlayan fonksiyonlara sahiptir. Bu fonksiyonlar örneklerle birlikte aşağıda verilmiştir.

  • Sum Fonksiyonu :

Fonksiyonun argümanı olarak belirtilen sütun ile ilişkili olarak toplama işlemini gerçekleştirir.

Örnek : İşletmedeki personelin brüt maaşları toplamı ne kadardır?

Çözüm :    SELECT SUM (brüt)

FROM personel;

Örnek : Bilgi işlem bölümündekilerin toplam maaşı ne kadardır?

Çözüm : Bilgi işlem bölümünün bölüm numarasını 5 olarak kabul edelim;

SELECT SUM ( brüt)

FROM personel

WHERE bol_no=5;

İfadesi ile sonuç elde edilebilir. Sonuç sadece bilgi işlem bölümündekilerin maaşlarının toplamı olacaktır.

Örnek : Satış, muhasebe, ve bilgi işlem bölümlerindeki personelin maaşları toplamı nedir?

Çözüm : Satış bölümü için, böl_no 1, muhasebe için 2 ve bilgi iþlem için 5 olarak alınırsa ;

SELECT SUM (brüt)

FROM personel

WHERE böl_no IN (1,2,5);

Örnek : Maaşları 5000000 TL’ nin altında olan bayan personelin maaşları toplamı nedir?

Çözüm : Bayan personeli, daha önceden cins alanına .F. yerleştirerek kodlamış isek ;

SELECT  SUM(brüt)

FROM personel

WHERE cins=.F. AND

Brüt  < 5000000;

İfadesi istenen çözüm verecektir.

AVG Fonksiyonu :

Aritmatiksel ortalama hesaplamak için kullanılır.

SELECT AVG (brüt)

FROM personel;

Komutu , işletmedeki ortalama maaşı hesaplayarak görüntüleyecektir. Bu fonsiyon ile de , koşula bağlı olarak hesaplatma yaptırılabilir.

Örnek : Bilgi işlem bölümündekilerin maaş ortalamaları ne kadardır?

Çözüm : Bilgi işlem bölümünün böl_nosu 5 ise

SELECT AVG (brüt)

FROM personel

WHERE böl_no =5

 

MAX Fonksiyonu :

 

Tablo içinde , belirtilen sütun (alan) içindeki en büyük değeri bulur.

Örnek : İşletme içindeki en yüksek maaş ne kadardır?

Çözüm : SELECT MAX (brüt)

FROM personel ;

Örnek : Bilgi işlem bölümündeki en yüksek maaş ne kadardır ?

Çözüm : SELECT MAX (brut)

FROM personel

WHERE  böl_no=5;

Örnek : Bayan personel içinde en yüksek maaş ne kadardır ?

Çözüm : SELECT MAX (brüt)

FROM personel

WHERE cins=.F. ;

 

MIN Fonksiyonu :

Tablo içinde, belirlenen sütun içindeki en küçük değeri bulur.

Örnek : İşletme içinde 4 Mayıs 1970’ den önce doğanlar için asgari ücret nedir?

Çözüm : SELECT MIN (brüt)

FROM personel

WHERE dog_tar < {05/04/70} ;

COUNT Fonksiyonu :

Tablo içinde herhangi bir sayma işlemi gerçekleştirmek için kullanılır.

Örnek : Personel tablosunda kaç satır vardır ? (Bu , her satırda farklı bir personel olduğu                               düşünülürse personel sayısı  anlamına da gelmektedir.)

Çözüm : SELECT COUNT (*)

FROM personel;

Bu koşula bağlı olarak da saydırma yapmak mümkündür.

Örnek : Ücreti 6000000 ‘dan fazla olan personel sayısı nedir ?

Çözüm : SELECT COUNT (*)

FROM personel

WHERE brüt > 6000000 ;

COUNT fonksiyonu, DISTINCT sözcüğü ile de kullanılabilir. Örneğin personel tablosunda mevcut personelin, işletme içinde  kaç tane farklı bölümde çalıştığı bulunmak istenirse aşağıdaki SELECT komutu kullanılabilir.

SELECT COUNT ( DISTINC böl_no)

FROM personel;

Count (böl_no)

5

Sonuçta 5 farklı bölüm olduğu listelenmiştir.

COUNT komutunda , * argümanının kullanılması, tüm sütunların (alanların) işleme sokulmasını, alan adının belirtilmesi  ise (COUNT (böl_no) gibi), sadece belirtilen sütunun işleme sokulmasını sağlar.

1.3.3  Gruplandırarak işlem yapma :

Yukarıda anlatılan fonksiyonları, tablodaki bilgileri , bazı özelliklere göre gruplandırarak bu gruplandırılmış veri üzerinde de uygulama yapmak mümkündür.Bu işlem GROUP BY sözcükleri ile gerçekleştirilmektedir.

Örnek : Her bölümdeki ortalama maaş nedir?

Çözüm :  Burada istenen, bölümler bazında ortalama maaş olduğuna göre, personel tablosundaki satırlar, bölüm numaralarına göre (böl_no) gruplandırılarak her bir grubun maaş ortalaması ayrı ayrı hesaplanarak listelenebilir.Aşağıda SELECT komutu ile bu işlem gerçekleştirilektedir:

SELECT böl_no , AVG (brüt)

FROM personel

GROUP BY böl_no ;

Sonuç :

Böl_no             AVG (brüt)

1                      2500000

2                      6800000

3                      7400000

4                      12500000

Her bölümdeki en yüksek maaşı olan kişiler listelenmek istenirse, aşağıdaki komut kullanılabilir:

SELECT böl_no , MAX (brüt) , ad , soyad

FROM personel

GROUP BY böl_no ;

Tablo1.2.   Peronel tablosundaki bilgiler :

Brüt Ad soyad Böl_no
5000000 Ali Can 1
3000000 Ayşe Okan 1
8000000 Akın Oran 2
10000000 Rana Şensoy 2

Tablo1.3.  Şeklinde ise yukarıdaki SELECT komutunun çıktısı

Böl_no Max_brüt Ad Soyad
1 5000000 Ali Can
2 10000000 Rana Şensoy

 

Şeklinde olacaktır.

Gruplandırarak kümeleme fonsiyonlarını uygularken koşul da verilebilir. Bu durumda grup üzerindeki hesaplamalarla ilgili koşul belirtilirken HAVING sözcüğünü kullanmak gerekir.

Örnek : En yüksek maaşın 9000000’ dan fazla olduğu bölümlerdeki personele ait ortalama maaşları listeleyiniz.

Çözüm :

SELECT böl_no , AVG (brüt)

FROM personel

GROUP BY böl_no

HAVING AVG (brüt) > 9000000 ;

Tablo1.4.   Personel tablosunda şu bilgiler mevcut olsun :

……………… Böl_no ………………… Brüt
1 6000000
1 17000000
2 7500000
2 8000000
3 12000000
3 11000000
1 14000000
1 18000000

Yukarıdaki SELECT komutu sonrasında

Böl Avg_brüt
1 13750000
3 11500000

Tablosu elde edilecektir.

HAVING sözcüğü SELECT komutunda GROUP BY sözcükleri bulunmadığı zaman geçersizdir. HAVING sözcüğünü içeren ifade içinde SUM , COUNT , (*), AVG ,MAX , MIN gibi diğer kümeleme elemanlarından enaz biri bulunmalıdır.

WHERE sözcüğü bir tablonun tek tek satırları üzerinde işlem yapan koşullar için geçerli iken,

HAVING sözcüğü sadece gruplanmış veriler üzerindeki işlemlerde geçerlidir.Bazı durumlarda HAVING ve WHERE sözcükleri birlikte SELECT komutu içinde kullanılabilir.

Örnek :P ersonel tablosu içinde her bölümde erkek personele ait maaşlar için ortalamanın 9000000’ den fazla olduğu bölümleri listeleyiniz.

Çözüm :

SELECT böl_no ,AVG (brüt)

FROM personel

WHERE cins =.T.

GROUP BY böl_no

HAVING AVG (brüt) >9000000 ;

Tablo1.5.   Personel tablosunda aşağıdaki bilgiler olsun :

Böl_no brüt Cins
1 6000000 .T.
1 17000000 .F.
2 7500000 .F.
2 8000000 .F.
3 12000000 .T.
3 11000000 .F.
1 14000000 .T.
1 18000000 .T.

Yukarıda uygulanan SELECT komutu , her bölümdeki erkek ppersonele ait ortalama brüt maaşı hesaplayacak (erkek personel .T. ile belirlenmiştir.) ve erkek personel maaş ortalaması 9000000’ den yüksek olan bölümler listelenecektir. Komutun çıktısı aşağıdaki gibidir :

Böl_no Avg_brüt
1 12666666.67
3 12000000

1.4  Tabloların Yaratılması :

SOL ‘de bazı tabloların yaratılması için CREATE TABLE komutunu uygun şekilde kullanmak gerekir.Yaratacaağımız tablolar  personel , bölüm, yer, proje, çalışma, bağımlı, parca, satıcı olsun ve bunların içinde şunlar yer alsın :

Personel tablosu : Sicil no  , sos.güv.no,ad, soyad, dogum-tarihi,  adres, cinsiyet,  brüt maaş, böl_no,yönetici sos.güv.no

Bölüm Tablosu : Bölüm adı, bölüm_no, yönetici sos.güv.no

Yer Tablosu : Bölüm_no, bulunduğu yer

Proje Tablosu : Proje adı, proje no, yer, bölüm_no

Çalışma Tablosu : Personel sos.güv.no, proje no, saat

Bağımlılık Tablosu : Personel sos.güv.no, bağl.old.isim, cinsiyet, doğum tarihi, ilişki

Parça Tablosu : Parça no, parça adı, proje no, fiyat, ağırlık

Satıcı Tablosu : Satıcı no, adı, adres

Parça Satıcı Tablosu : Satıcı no , parça no, miktar

Bu tabloların her sütunu tabloda saklanan verilerle ilişkili bir özelliği belirtmektedir.Her tablo satırı birbiri ile ilişkili verileri saklamaktadır.Örneğin : İstanbul’ da yürütülen projelerde çalışan kişileri listeleyiniz: şeklinde bir talep proje, çalışma ve personel tabloları arasında ilişki kurulmasını gerektirecek ve çalışma tablosundan proje noları mukayese edilecek, aynı olanlar için çalışma tablosundan alınacak olan Personel sos.güv.no’ları personel tablosunda arama yapılacak, bulunan kişilere ait bilgiler listelenecektir.

Şimdi bu tabloları yaratacak SQL komutlarını inceleyelim :

CREATE TABLE personel

(sicil INTEGER NOT NULL,

sos.g.no CHAR (8) NOT NULL,

ad CHAR(10) NOT NULL ,

soyad CHAR (10) NOT NULL,

dog_tar DATE,

adres CHAR (50),

cins LOGICAL,

brüt NUMERIC (13,2),

böl_no SMALLINT,

yon_s_g_n CHAR(8));

CREATE TABLE bölüm

( bölüm_ad CHAR (15) ,

bölüm_no SMALLINT,

y_sos_g_no CHAR (8),

y_ıs_b_tar DATE) ;

CREATE TABLE yer

( bölüm_no SMALLINT,

bul_yer VARCHAR (15)) ;

CREATE TABLE proje

( proj_ad CHAR (10),

proj_no SMALLINT,

yer VARCHAR (15),

bl_no SMALLINT) ;

CREATE TABLE çalışma

( Per_s_g_no CHAR (8),

proje_no SMALLINT,

saat SMALLINT) ;

CREATE TABLE bağımlı

( Per_s_g_no CHAR (8),

baglı_isim CHAR (10),

cinsi LOGICAL,

dog_t DATE,

ilişki VARCHAR (7)) ;

CREATE TABLE parca

( par_no SMALLINT,

par_ad CHAR (10),

pr_no SMALLINT,

fiyat FLOAT,

agırlık INTEGER) ;

CREATE TABLE satıcı

( satıcı_n SMALLINT,

adı CHAR (10),

adres CHAR (50)) ;

CREATE TABLE par_sat

( sat_no SMALLINT,

parca_n SMLLINT,

miktar  INTEGER) ;

SQL ‘de Veri Tipleri :

Tablo1.6.

SQL’de veri tipleri

Veri tipi SQL komutu Özelliği
Sabit uzunluklu karakter CHAR (uzunluk) Sayısal işleme sokulmayacak veriler.
Değişken uzunluklu karakter VARCHAR (uzunluk) Buradaki uzunluk max.uzunluktur. Karakter tipindeki veriler gibidir.Tek fark uzunluk değişkendir.
Nümerik tam sayı INTEGER -2147483648 ile 2147483647 arasındaki tam sayılardır.Bellekte 4 Byte’ lık yer kaplarlar.
Ondalık sayı DECIMAL (x,y) REAL(x,y) ya da NUMERIC (x,y) X sayısının max. hanesayısı  y ondalık notadan sonraki hane sayısıdır.x en fazla 20, y ise 0-18 arasındadır.
Üstel sayı FLOAT (x,y)örnek: 3.1E+17 gibi X sayısının toplam hane sayısıdır.max. değer 20 dir.0.1E-307 ile 0.9E+308 arasındaki değerleri alabilir.
Tarih türü veriler DATE Tarih türü veriler için işlem yapmayı sağlar.
Mantıksal veri LOGICAL Doğru (true .T.) ya da yanlış (false .F.) şeklinde değer alabilen veriler için kullanılır.
Zaman türü veriler TIME Ssddsnsn şeklindeki veriler için kullanılır.
Tarih ve zaman türü veriler TIMESTAMP Tarih ve zaman türü verilerin bir karışımı şeklinde kullanılan veriler içindir.
Grafik türü veriler GRAPHIC(n) N adet 16 bitlik karakterden oluşan bir sabit uzunluklu bilgi tanımlamak için kullanılır.
Değişken uzunluklu grafik türü veri VARGRAPHIC(n) N adet 16 bitlik karakterden oluşan değişken uzunluklu bir bilgi tanımlamak için kullanılır.

Tablo yaratılırken NOT NULL ifadesi kullanılmıştı. NOT NULL  ifadesi söz konusu olan alan ile ilişkili olarak mutlaka veri yüklemesi gerektiğini, ilgili alanın boş bırakılamayacağınıanlatmaktadır. Sicil gibi yada sos.güv.no’su gibi sıralamada kullanılabilecek alanlar bu şekilde kullanılmaktadır. NOT NULL ifadesi yoksa o alan NULL anlamındadır yani o alan ile ilişkili olarak tabloya veri yüklenmemesi durumuna da müseade edilmektedir. Bu tür alanlar genellikle veri konusunda belirsizlik olması durumunda tanımlanır.

1.5  Tablolara Veri Yüklenmesi :

Bir tabloya veri girişi işlemi için, SQL ‘ de mevcut olan komut

INSERT INTO/ VALUES komutudur.

Bu komut yardımı ile personel adlı tabloya, ilk satır bilgileri ,aşağıdaki gibi düzenlenmiş bir INSERT komutu ile girilebilir :

INSERT INTO personel

VALUES ( 1, ’27345627’ , ‘Ahmet’, ‘Okan’ , {01/05/62},’Cum.Cad.47/2 Taksim-İstanbul’, .T. , 17000000.00, 1, ‘23112244’ ) ;

Komut içindeki değerler incelendiğinde, sayısal değerler olduğu gibi yazılmakta, karakter veriler ‘ ’ sembolleri arasına alınmaktadır. Lojik türdeki veriler ise .T. ya da .F. şeklinde belirtilmektedir ve tarih türü bilgiler {} sembolleri ile ayırt edilmektedir.

INSERT INTO komutu ile belli bir anda tabloya  bir satır yüklenmektedir. Tabloya çok sayıda satır girilmek istenirse peşpeşe satır sayısı kadar INSERT komutu kullanılmalıdır. SQL dilinin tüm ekran üzerinde bilgi girişi için kolaylıksağlayan ve etkileşimli olarak çalışmayı sağlayacak komutları yoktur.

 

 

1.6  Tablodaki Sütun İsimleri Ve Tablo İsimleri İle İlişkili  Kurallar :

SQL dilinde bir tabloya ya da tablo içinde bir sütuna isim vermek için gerekli kurallar, bir SQL uyulamasından ötekine değişebilmektedir. Fakat genellikle , geçerli olan kurallar aşağıda verilmiştir :

  • İsim uzunlukları 18 karaktere kadar olabilir.
  • İlk karakter bir harf olmalıdır.Onu izleyen karakterler harf , rakam ya da alt çizgi (_) sembolü olabilir.

BÖLÜM  2

Temel SQL Sorgulamaları :

 

SELECT Komutu :

Tek tablodan gerekli bilgileri elde edbilmek için sorgulama yapabilecek SQL komutu olan SELECT ‘ in en basit hali aşağıdaki gibidir :

SELECT *

FROM personel ;

Bu komut, personel adlı tablo içindeki tüm bilgileri koşulsuz olarak listeleyecektir. SELECT sözcüğünü izleyen kısımda * sembolünün bulunması ilgili tablodaki tüm sütun isimlerinin ve ilgili bilgilerin listelenmesini sağlayacaktır.

SELECT sicil, sos_g_no, ad, soyad, dog_tar, adres, cins, brüt, böl_no, yön_s_g_n

FROM personel ;

Şeklinde olacaktır.SELECT sözcüğünden sonra gelen kısımda sütun adları, FROM sözcüğünden sonra gelen kısımda ise tablo ismi yer almaktadır.

2.1  Tekrarlı Satırların Ortadan Kaldırılması :

SQL ‘ de tablşo içinde birbirinin aynı data içeren satırlara müseade edilir. Birbirinin aynı olan satırların listeleme esnasında bir kez yazılması için SELECT komutuna DISTINC sözcüğü eklenir.

SELECT DISTINC sat_no

FROMpar_sat;
Bu komut ile par_sat adlı tablodan satıcı noları tekrarsız olarak listelenecektir.

 

 

 

2.2  Tablo Bilgilerinin Sıralanmış Olarak Listelenmesi :

Tablodan listelenecek bilgilerin belirli bir sütun adına göre sıralanmış olarak görüntülenmesi için SELECT komutuna ORDER BY sözcüğü ilave edilir. Örneğin personel tablosundaki bilgilerin sicil, ad, soyad, ve brüt sütunlarını maaşa göre sıralı olarak listeleyiniz:

SELECT sicil,ad,brüt

FROM personel

ORDER BY brüt asc ;

Sonuç : ASC sözcüğü artan anlamındadır.Veriler azalan sırada büyükten küçüğe ya da alfabetijk olarak Z ‘den A ‘ya sıralanmak istense idi bu sözcük yerine DESC kullanılacaktı.

2.3  Birden Çok Alana Göre Sıralama :

Bir tablo içindeki verileri aynı anda birden çok sütuna göre sıralamak da mümkündür. Örneğin personel tablosundaki personel adı ve MaaŞa göre listelemek isteyelim:

SELECT sicil, ad, soyad, brüt

FROM personel

ORDER BY ad, brüt ;

Burada tablo öncelikle ada göre artan sırada sıralanacak, sadece aynı ada sahip olanlar kendi aralarında BRÜTE göre artan sırada sıralanacaklardır:

Tablo2.1.  Ada ve maaşa göre sıralama

Sicil Ad Soyad Brüt
1215 Ali Can 2000000
3712 Ali Okan 6000000
8145 Birol Çelen 8500000
3712 Birol Akın 4000000

Burada çok sayıda alana göre sıralama , farklı sıralama kriterlerine göre gerçekleştirilebilir.

 

2.4  Koşula Bağlı Olarak Listeleme :

 

SELECT komutu ile bir tablonun satırlrı içinden sadece verilen bir koşulu sağlayanlar listelenebilir.Örneğin brüt maaşı  5000000’dan fazla olan personel listelenmek istenirse SELECT komutu aşağıdak gibi yazılmalıdır :

SELECT *

FROM personel

WHERE  brüt > 5000000 ;

Burada WHERE sözcüğünüizleyen kısımda koşul belirtilmektedir. Koşul belirtilirken iki veri birbiri ile karşılaştırlmaktadır. SQL içinde verileri çeşitli açılardan karşılaştırmak için karşılaştırma operatörleri kullanılmaktadır. Karşılaştırma ifadesinde karşılaştırılacak verilerin türleri aynı olmalıdır.

 

Tablo2.2   Karşılaştırma Operatörleri

SQL ‘ de Karşılaştırma Operatörleri
Operatör Anlamı
< …’den küçük
> …’den büyük
= Eşit
<= Küçük veya eşit
>= Büyük veya eşit
<> Eşit değil
!= Eşit değil

 

2.5  Birden Çok Koşula Dayalı Sorgulamalar :

 

Not, And, Or :

 

Not, And ve Or mantıksal operatörleri yardımı ile birden çok koşulun gerçekleştirilmesine bağlı olarak ifade edilebilecek karmaşık yada bileşik koşulu ile listelemeleri gerçekleştirmek mümkündür.

Örnek : Maaşı 5000000 TL’den fazla olan ve cinsiyeti erkek olan personelin listelenmesi gibi bir işlemde söz konusu personel için iki koşul verilmekte ve her ikisinin de gerçekleşmesi istenmektedir.

1.koşul : Maaşın 5000000 TL’den fazla oluşu

2.Koşul : Cinsiyetin ERKEK olması

SELECT *

FROM personel

WHERE brüt > 5000000 AND cins =.T. ;

Tablo2.3

 

NOT Operatörü
Koşul NOT Koşul
.T. .F.
.F. .T.

 

                        Tablo2.4

                       

AND OPERATÖRÜ
1.Koşul 2.Koşul 1.koşul AND 2.koşul
.T. .T. .T.
.T. .F. .F.
.F. .T. .F.
.F .F. .F.

                        Tablo2.5

                       

OR OPERATÖRÜ
1.Koşul 2.Koşul 1.Koşul AND 2.koşul
.T. .T. .T.
.T. .F. .T.
.F. .T. .T.
.F .F. .F.

Örnek : Doğum tarihi 1960’ dan önce olan ve maaşı 6000000-10000000 arasında olan             bayan personel kimlerdir?

Cevap :            SELECT *

FROM personel

WHERE dog_tar <{01/01/1960} AND brüt >=6000000 AND brüt                          <= 10000000

AND cins =.F. ;

Örnek : Satış bölümü ile muhasebe bölümündekiler kimlerdir ?

Çözüm : Satış bölümünün böl_no’sunun 1 ve muhasebe bölümünün böl_no’sunun 2 olduğunu varsayarsak ;

SELECT *

FROM personel

WHERE böl_no=1 OR böl_no=2 ;

2.6  Bir Veri Kümesi İçinde Arama –IN Operatörü

Aşağıda vereceğim örnek sorunun cevabını şu ana kadar anlattığım SQL komutları ile gerçekleştirebiliriz :

Örnek : böl_no’su 1,2 yada 3 olan personeli listeleyiniz.

  • SELECT *

FROM personel

WHERE böl_no=2 OR böl_no=2 OR böl_no=3 ;

Fakat SQL ‘de bu işlemi gerçekleştirmenin daha kısa ve daha şık bir yolu vardır; IN sözccüğü ;

  • SELECT *

FROM personel

WHERE böl_no IN (1,2,3) ;

Şeklindeki komut. Bu komut OR ile düzenlenen 1. SELECT’ denktir.Fakat belirtildiği gibi daha kısa ve anlaşılır bir ifade oluşmaktadır.

IN oparatörü NOT ile birlikte kullanılabilir.

 

 

2.7  Aralık Sorgulaması Between Sözcüğü :

 

Maaşı 5-10 Milyon arasında olan personel kimlerdir ? şelinde bir soruya

SELECT “

FROM personel

WHERE brüt >=5000000 AND brüt <=10000000 ;

Şeklinde birSELECT komutu ile cevap verilebilir.Aynı soruya daha kısa ve daha etkin bir cevap verilecek olursa BETWEEN sözcüğü kullanılır.

SELECT *

FROM  personel

WHERE  brüt BETWEEN 5000000 AND 10000000 ;

2.8  Karakter Türü Bilgi İçinde Arama Yapma –LIKE Sözcüğü :

 

Personel tablosu içinde adres alanı 50 karakter uzunluğunda karakter türü olarak tanımlanmıştı.Adres bilgisinin aşağıdaki şekilde verildiğini varsayalım :

Cumhuriyet Cad. 46/9 Taksim-İstanbul. Burada adres içinde , semtin de belirtildiğini ve bunun ayrı bir sütun olmadığına dikkat çekelim. Şimdi belirli bir semtte ikamet eden personeli listelemek istersek semt adını , adres alanı içinde aramak gerekecektir.Bu işlemi gerçekleştirmek için SQL 2 de LIKE sözcüğü kullanılır.

SELECT *

FROM personel

WHERE adres LIKE ‘% Taksim %’ ;

Bu komut ile “Taksim” semtinde ikamet eden personel listelenmek istenmektedir. Bu komut gerçekten de Taksim’ de  oturan personeli listeleyecektir. Ama bu arada

“Taksim Caddesi 22-7 Kadıköy – İstanbul”

şeklindeki adresleri de isteleyektir.

Adres LIKE ‘ % Taksim %’

İfadesi adres içinde Taksim’ I arayacaktır. Adres içinde herhangi bir yerde bulduğu taktirde bu satırı listeleyecektir.

% sembolü Taksim sözcüğünün öncesinde ve sonrasındaki karakterler ne olursa olsun  anlamındadır.

Yukarıdaki LIKE  ifadesi

“Taksim Cad.81-Fatih”

şeklindeki Taksim’in en başta ve en sonda olduğu adresleri listeleyecektir.

LIKE sözcüğünü , alt çizgi (_) sembolü ile birlikte de kullanmak da mümkündür.

BÖLÜM 3

 

Birden Fazla Tabloyu İlişkilendirerek Sorgulama :

3.1  Birleştirme ( JOIN ) İşlemi :

Birleştirme işemini anlayabilmek için konumuzun başında anlattığımız personel ve bölüm tablolarının içinde yer alan bölümleri hatırlayalım :

Personel tablosu : Sicil no  , sos.güv.no,ad, soyad, dogum-tarihi,  adres, cinsiyet,  brüt maaş, böl_no,yönetici sos.güv.no

Bölüm Tablosu : Bölüm adı, bölüm_no, yönetici sos.güv.no ‘sundan oluşuyordu

Bu tablolar ile ilişkili olarak aşağıdaki soruyu soralım :

Çalışan her personel ve bu personelin yöneticisi ile ilişkili bilgiler nelerdir ?

Belirli bir personel ile ilişkili bilgiler personel tablosunun o personele ait satırında mevcuttur. Ancak personelin yöneticisi ile ilişkili bilgilerin bir kısmına ise bölüm tablosundan erişilebilir. Bu durum zorunlu olarak personel ile bölüm tabloları arasında ilişki kurulmasını gerektirir. Bu ilişki ancak müşterek bir alan  yardımı ile kurulabilir.

Müşterek alan burada bölüm numarasıdır ve personel tablosunda böl_no, bölüm tablosunda ise bölüm_no adı ile yer almaktadır. Müşterek alana göre personel ve bölüm tablolarının birleştirilmesi ( JOIN ) demek , her iki tablodaki tüm sütunları içeren yeni bir tablo oluşturmak demektir. Yalnız bu tabloda sadece her iki tabloda da mevcut olan bölüm numaraları ile ilişkili satırlar yer alacaktır.

Birleştirme işlemi ile listeleme aşağıdaki SQL komutu ile gerçekleştirilmektedir :

SELECT *

FROM personel , bölüm

WHERE personel . böl_no =bölüm .bölüm_no ;

İlişkilendirme kolayca görülebileceği gibi
WHERE personel . böl_no = bölüm .bölüm_no

Tablo adı               Kolon adı

İfadesi ile sağlanmaktadır. Aşağıdaki örnek veri için bu JOIN işlemi sonucu, aşağıdaki tabloda görülmektedir. Örnek veri :

Tablo3.1  Personel

sicil Sos_g_no ad Soyad Dog_tar adres cins brüt Böl_no Yo_s_g_n
112 27641 Ali Can 01/05/60 Fatih .T. 8000000 1 037165
175 3777654 Ayşe Şen 04/07/65 Kadıköy .F. 7000000 1 037165
217 176241 Akın Öncel 11/07/64 Üsküdar .T. 6000000 2 277143
517 27615 Can Öner 05/08/65 Fatih .T. 4000000 2 277143
618 57253 Beril Meral 08/07/62 Pendik .F. 3750000 2 277143
1540 44721 Ayşe Cansu 07/08/63 Beşiktaş .F. 4800000 3 577211

Tablo3.2  Bölüm

Bölüm_ad Bölüm_no Y_sos_g_n Y_is_b_tar
Satış 1 037165 01/07/89
Muhasebe 2 277143 02/08/91
Üretim 3 577211 04/06/92
Eğitim 4 443421 01/05/91
Bilgi işlem 5 288111 05/02/92

Personel ve bölüm tablolarının müşterek alan olan bölüm numarası üzerinde JOIN birleştirme işlemine tabi tutulması sonucu elde edilen bilgi sadece her iki tabloda da aynı bölüm numaralarına ait satırlar alınarak birleştirilmiş ve her iki tablonun alanlarından oluşan büyük bir tablo halinde listelenecektir.

 

3.2  UNION  Sözcüğü :

Unıon sözcüğü küme birleştirme işlemi görür. İki ayrı SELECT komutunun sonucunda elde edilen tabloların birleşimi işlemini görür.

Örnek : Adı Ahmet ve soyadı Caner olan kişi ve kişileri işletmenin yürüttüğü projelerde çalışan kişi olarak bulunduran projelerin isimlerini ve projelerin yürütüldüğü yerleri listeleyiniz.

( SELECT proj_ad ,yer

FROM proje , bölüm , personel

WHERE bl_no=bölüm_no AND

Y_sos_g_no = sosy_g_no

AND ad=”Ahmet” AND Soyad =”Caner”)

UNION ( SELECT proj_ad ,yer

FROM proje , çalışma, personel

WHERE proj_no =proje_no AND

Per_s_g_no =sosy_g_no AND ad=”Ahmet”

AND soyaD =”Caner”)

UNION sözcüğü ile iki yada daha çok SELECT ‘in sonucu olan tabloların küme birleşimi işlemine tabi tutulması için iki koşul gereklidir :

  • SELECT komutları sonucunda elde edilecek tablolar aynı sayıda kolon içermeleridirler:

1.SELECT

sonuç tablosu

2.SELECT

sonuç tablosu

  • Sonuç tablolarının karşılıklı olarak kolonları aynı veri tipi ve aynı genişlikte olmalıdır.

 

3.3  ANY Sözcüğü :

Bunu bir örnekle açıklayalım :

Örnek : Satış bölümünde çalışan personelin herhangibirinden daha düşük maaş alan ve mühendislik bölümünde çalışan kişileri listeleyiniz :

Çözüm :

SELECT *

FROM personel

WHERE brüt < ANY

( SELECT brüt

FROM personel

WHERE böl_no =2) AND böl_no =1 ;

Bu çözümün eşdeğer ifadesi şöyledir :

SELECT *

FROM personel

WHERE brüt <( SELECT MAX (brüt)

FROM personel

WHERE böl_no =2) AND böl_no =1 ;

Burada satış bölümü kodu 2 ve mühendislik bölümü kodu ise 1 olarak kabul edilmiştir.İkinci çözüm ifadesinden de anlaşılacağı gibi içiçe SELECT ifadesinde içteki SELECT sorgulaması sonucun ; 2. Bölümde çalışan personelin içinde en yüksek maaş alan kişinin maaşı bulunmakta dıştaki SELECT ise mühendislik bölümünde bu maaştan düşük olan maaşa sahip kişiler listelenmektedir.

Buradaki düşünce tarzı şöyledir :

Mühendislik bölümünde çalışan ve satış bölümündeKİ en yüksek maaştan düşük maaş alan bir kişi “satış bölümündeki herhangi bir maaştan düşük olma “ koşulunu sağlayacaktır. ANY sözcüğünün yerine tamamen eşdeğeri olan SOME sözcüğü de kullanılabilir.

 

3.4  ALL Sözcüğü :

“Hepsi , tamamı “ anlamındaki bu sözcük SELECT komutu içerisinde belirli bir koşulu sağlayan bir grup datanın tamamınca sağlanan koşullarla ilişkili olarak kullanılır.

Örnek : Satış bölümünde çalışan ve mühendislik bölümündeki personelin hepsinden daha fazla maaş alan personeli listeleyiniz. Satış bölümü kodu 2 ve mühendislik bölümü kodu1 olarak alınırsa ;

Çözüm : 1. Altenatif

SELECT *

FROM personel

WHERE brüt > ALL (SELECT brüt FROM personel
WHERE böl_no=1)
AND böl_no=2 ;

3.5  EXISTS Operatörü :

“Var,mevcuttur” anamındaki bu sözcük, SQL’ de bir Boolean ( lojik,mantıksal) operatördür. İçteki SELECT komutunun sorgulaması sonucunda en az bir tablo satırı üretilmişse EXISTS operatörü true değerini , hiçbir tablo satırı üretilmemişse, EXISTS operatörü false değerini üretir.

EXISTS operatörü, AND ,OR ve NOT  gibi diğer mantıksal operatörlerle birlikte de kullanılabilir.

Örnek : Numarası 27 olan parçayı satan satıcılarla ilişkili tüm bilgileri listeleyiniz.

Çözüm : İlgili SELECT komutlarını yazabilmek için, sistemde satıcı adlı tabloda ve par_sat adlı tabloda aşağıdaki kolon ve verilerin olduğunu vrsayalım :

Tablo3.3

Satıcı_n Adı Adres
1 Ali akın İstanbul
2 Ayşe can İstanbul
3 AkınPeker Ankara
4 Can Ozan İzmir
5 Mert Ak Antalya

SELECT *

FROM satıcı

WHERE EXISTS

( SELECT *

FROM par_sat

WHERE sat_no =satıcı _n

AND parca_n=27) ;

Aşağıdaki sonuç elde edilir.

Tablo3.4

Satıcı_n Adı Adres
1 Ali akın Istanbul
2 Ayşe can Istanbul

Yukarıda da belirtildiği gibi , iç SELECT ‘te WHERE ‘I izleyen koşulu sağlayaan satırlar par_sat içinde bulundukça EXISTS operatörü true değerini verecek bu durumda dış SELECT’in WHERE kısmı doğru olacağı için o satıcı ile ilişkili bilgiler satıcı tablosundan listelenecektir.

 

 

 

BÖLÜM 4

 

View Oluşturmak :

 

Veri tabanı kavramı içinde teorik olarak mevcut olan view (bakış ) terimi ,farklı kullanıcıların veri tabanına nasıl baktıklarını yada bakış açılarını anlatan terimdir. Bu anlamda bir kullanıcı fiziksel olarak mevcut olan tabloların sadece bir kısmı ile ilgilenir.

4.1  VIEW Oluşturmanın Yararları :

 

4.1.1  Veri Güvenliği :

Veri tabanı içinde bulunan tablolardaki bazı sütunlarda bulunan bilgilerin herkes tarafından görülmesi istenmeyebilir.

Örneğin : Personelin brüt maaşlarının herkes tarafından listelenebilir olması mahsurlu olabilir. Bu durumda personel adlı temel tablodan persview adlı bir view oluşturulabilir:

CREATE VIEW persview

AS SELECT sicil , sosy_g_no, ad , soyad, dog_tar, adres, cins, böl_no,

yön_s_g_n

FROM personel ;

Persview adlı view, herkesin kullnımına açık , personel adlı tablo ise yetkili kişiler dışındakilere, erişilemez hale getirilirse, maaşların herkes tarafından erişilebilir bilgi olması önlenmiş olur.

Bir view’den bilgi listelenmesi temel tablodan bilgi listelenmesinden farklı değildir :

SELECT *

FROM persview ;

Persview’den maaşlar hariç tüm personel bilgileri listelenecektir. Bir temel tablodaki aynı sütun isimleri kullanılmak zorunda değildir.

 

 

4.1.2  Sorgulamanın Daha Basit Hale Gelmesi :

Karmaşık sorgulamalarda, bazı SELECT komutlarının sonuçları diğer SELECT  komutlarında kullanıldığında, sorgulanmanın düzenlenmesinde yanlışlıklar yapma olasılığını artar.

Karmaşık sorgulamalar, View özelliği kullanılarak daha basit hale getirilebilir. Burada temel fikir şudur: Mademki bir view, bir sorgulama sonucu elde edilen bilgiyi (tabloyu) isimlendirerek elde edilen bir virtüel tablodur; o halde karmaşık SELECT komutu içinde, sonucu kullanacak başka bir SELECT komutu yerine, bu sonucu bir view olarak isimlendirerek, view adını kullanmak. Bazı durumlarda ise, işletmenin veri tabanı uygulamasında çok sık olarak sorulan karmaşık soruları bir view yapısı ile saklayarak, daha sonra aynı tip sorgulamalar için bu view yapısını kullanarak daha basit ifadeler kullanmak da olasıdır.

ÖRNEK: Satış bölümünde çalışan personelin herhangi birinden daha düşük maaş alan ve mühendislik bölümünde çalışan kişileri listeleyiniz:

ÇÖZÜM:

            SELECT *

FROM personel

WHERE brut < ANY

(SELECT brut

FROM personel

WHERE bol_no=2) AND

            Bol_no=1;

(Satış bölümü kodu 2 ve mühendislik bölümü kodu ise 1 kabul ediliyor).

Şimdi bu sorunun cevabı olan tablo bir view olarak saklanırsa:

CREATE VIEW S1view

AS SELECT *

FROM personel

WHERE brut < ANY

(SELECT brut

FROM personel

WHERE bol_no=2) AND

bol_no=1;

Bundan sonra aynı tip sorgulama için sadece

            SELECT *

            FROM S1view;

yazmak yeterli olacaktır.

4.1.3  Sadece Vıew Kullanılarak Gerçekleşebilen Sorgulamalar

Bir tablodan elde edilecek bilgiler için, iki kademeli işlem gerektiren sorgulamalarda, iki adımda bir view oluşturup ikinci adımda esas sorgulamayı bu view yardımı ile gerçekleştirmek, çoğu kez kaçınılmaz bir durumdur.

Aşağıdaki soru ve bunun çözümü olan SQL ifadeleri bu konuda bir fikir verecektir:

ÖRNEK: Her bölümde, o bölümdeki ortalama maaştan daha yüksek maaş alanları listeleyiniz.

ÇÖZÜM: Bu sorunun cevaplandırılması için önce her bölümdeki ortalama maaşların bulunması gereklidir.

CREATE VIEW BOL_OR_VIEW (bol_no, ort_brut)

AS SELECT bol_no, AVG (brut)

FROM personel

GROUP BY bol_no;

Daha sonra, yaratılan BOL_OR_VIEW yardımı ile (bu view, bölüm no’ları ve bölüm ortalama maaşlarını saklamaktadır) sorulan sorunun cevabı elde edilebilir:

SELECT *

FROM personel

WHERE bol_no=BOL_OR_VIEW. Bol_no

.AND. brut > ort_brut;

BÖLÜM 5

Tablolarda Değişiklik Yapma

5.1  Tabloya Veri Ekleme

SQL’de, mevcut bir tabloya veri eklemek için kullanılacak olan komut INSERT komutudur.

Standart SQL’de, oluşturulan bir tabloya veri yüklemek için tek imkan INSERT komutudur.INSERT komutu ile, tabloya, belli bir anda, tek bir satır eklemek imkanı vardır. INSERT komutunun yazılış biçimi aşağıdaki gibidir:

INSERT INTO Tablo adı

(Sütun adı1, sütun adı2, ………..sütun adı(n))

VALUES (değer1, değer2,………değer(n));

Örneğin, persınel tablosuna, sicil no’su 275 olan personel ile ilişkili bilgiler aşağıdaki gibi bir INSERT komutu ile yüklenebilir:

INSERT INTO personel (sicil,

sosy_g_no, ad, soyad, dog_tar, adres,

cins, brüt, bol_no, yon_s_g_n)

VALUES (‘275’, ‘27652418’, ‘ali’, ‘caner’,

{01/05/1962}, ‘Merkez cad. 46-Fatih-Ist’,

.T., 27000000, 2, ‘876215342’);

Karakter türü verilen  “ sembolleri arasına yüklendiğine, diğer veriler içinse buna gerek olmadığına dikkat ediniz. Burada, tabloya tüm kolonlarla ilgili veri yüklendiği için, istenirse kolon isimleri ihmal edilebilir.

Standart SQL’deki INSERT komutunun, belli bir anda, tabloya, tek bir satırı tüklemesine karşılık, birçok SQL gerçekleştiriminde, yığın halinde veri yükleyen hizmet programlarından (utility) faydalanmak imkanı da vardır.

Ayrıca, INSERT komutunun bu şekli ile tabloya veri yüklemek pratikte tercih edilebilecek bir şekil değildir. (Her tablo satırı için bir INSERT komutu kullanılıyor) Daha kullanışlı olan yol, verilerin kullanıcın zorlanmayacağı bir ekran düzeni ile klavyeden yüklenmesi daha bunların INSERT ile tabloya yerleştirilmesidir.

SQL’de ekrandan interactive bilgi girişi ve ekran tasarımı sağlayacak komutlar yoktur. Fakat SQL’in bir veri tabanı yönetim yazılımının (dbase, foxpro, ORACLE) ya da bir üst düzey dilinin (C, Pascal, Cobol, vb.) interactive bilgi girişine uygun komutlarını kullanarak bu işlemi arzu edilen kalitede gerçekleştirmesi mümkündür.SQL’in diğer dillerle etkileşimi daha sonra incelenecektir.

5.2  Tablo Satırlarını Silme

 

Bir tablonun satırlarını silmek için gerekli komut DELETE komutudur.

Satır silme koşullu veya koşulsuz olarak gerçekleştirilebilir.

DELETE FROM personel;

25 Rows Deleted

Bu komut ile personel tablosundaki tüm satırlar silinecektir.

25 Rows Deleted

mesajı ile, o anda tabloda bulunan 25 satırın silindiği bildirilmektedir.

Koşula bağlı bağlı olarak satır silmenin de mümkün olduğunu söylemiştik.Bunu gerçekleştirmek için, DELETE komutuna WHERE sözcüğü eklenmeli ve bunu izleyen ifade koşulu göstermelidir.

ÖRNEK:

DELETE FROM personel

WHERE bol_no=2;

5 Rows Deleted

Bu komut ile, 2 numaralı bölümdeki personelin tümü tablodan silinecektir.

4                                        Rows Deleted

Mesajı ile de, o anda 2 numaralı bölümde çalışan 5 personele ait satırların silindiği belirtilmektedir.

Aşağıdaki örnekte ise brüt maaş alanı boş olmayan tüm personel silinmektedir:

DELETE FROM personel

WHERE brut IS NOT NULL;

25 Rows Deleted  

 

5.3  View’ ler Üzerinde Değişiklik , Ekleme, Silme işlemleri :

 

View’ler üzerinde ekleme, silme , ve değişiklik işlemleri esas itibarı ile tablolar üzerinde yapılan benzer işlemlerden çok farklı değildir. Fakat view’ler üzerinde bu tip işlemlerin gerçekleştirilmesinde bazı kısıtlamalar mevcuttur. Aşağıdaki hususlar bilinmelidir :

  • Bir view’in güncellenebilir nitelikte olması için bir birleştirme işlemi sonucunda üretilmiş olması gerekir. Başka bir deyişle CREATE VIEW komutunda FROM sözcüğünü .zleyen kısın-mda sadece bir tablo adı bulunmaktadır.
  • View içindeki hiçbir kolon bileşik fonksiyonlarca üretilmiş olmamalıdır. ( MAX, SUM vb.)
  • View’in üretildiği SELECT komutunda , DISTINC, GROUP BY ya da HAVING sözcüklerini içeren parçaların işlevleri yerine getirilmiş olmamalıdır.

Bu koşulları sağlamayan view’ler sadece okunabilir özellikteki view’lerdir , ve bunlar üzerinde değişiklik yapılamaz.

5.3.1  View İçine Satır Ekleme :

 

Daha önceden oluşturulmuş px adlı view ad, soyad , ve brüt alanlarını içermiş olsun. Bu view güncellenebilir nitelikte ise aşağıdaki INSERT komutu ile aynen tablolarda olduğu gibi kendisine bir satır eklemek mümkün olacaktır.

INSERT INTO Px

VALUES (‘ ali’, ‘çakır’, 12000000) ;

Daha önceden view oluşturulurken CHECK OPTION alternatifi kullanılmamışsa bu durumda ekleme esnasında view’ I oluşturan koşul ihlal ediliyorsa sistem eklemeye müseade etmeyip hata mesajı verecektir.

5.3.2  View İçinden Satır Silme :

Güncellenebilir bir view içinden satır silme işlemi, tablodan satır silme işlemi ile aynı şekilde gerçekleştirilebilir.

Örnek : DELETE FROM UST_PER_VIEW

WHERE brüt< 25000000 ;

5.3.3  View Satırları Üzerinde Güncelleme İşlemi :

Güncellenebilir view’lerde güncelleme işlemi tablolardakinin aynısıdır. Örneğin UST_PER_VIEW adlı view’de sicili 27251 olan kişinin maaşını 37000000 olarak değiştirmek için

UPDATE UST_PER_VIEW

SET brüt =37000000

WHERE  sicil =27251 ;

Komutu kullanılabilir.

5.3.4  Bir Viewi Silmek :

Tablolarsdan silinmesine benzer şekilde sistemden oluşturulan bir view DROP VIEW komutu ile silinebilir.

DROP VIEW UST_PER_VIEW ;

Bir viewin silinmesi ile o view’e bağlı olarak oluşturulmuş diğer tüm view’ler ve bu view’le ilişkisiolan önceliklerin hepsi silinmiş olur.

 

 

 

 

 

 

BÖLÜM  6

 

İndeks Oluşturmanın Amacı :

Bir indeks, veri tabanı ortamında bir tablo ya da bir view gibi bir nesnedir ve ilişkili olarak kullanıldığı tablo ya da view’deki satırların, indeksleme alanı olarak kullanılan kolondaki verilere göre sıralanmış biçimde işlenme sokulmasını sağlar.

Bir tablo, indekslenmiş ise , bu tablo içinde gerçekleştirilecek bir arama ya da koşullu listeleme ( SELECT komutu ile ) işlemi çok daha hızlı biçimde gerçekleştirecektir.

6.1  İndeks Yaratma :

SQL ‘de bir tablo ile ilişkili olarak bir indeks yaratmak için gerekli komut CREATE INDEKS komutudur.Komutun yazılış biçimi aşağıdaki gibidir :

CREATE INDEX indeks adı

ON tablo adı ( kolon adı1, koon adı2,………kolon adı (n)) ;

İndeksleme artan ya da azalan şekilde olabilir. A’dan Z’ye nümerik olarak küçükten büyüğe şeklindedir. Azalan ise bunun tam tersidir. Hiçbir özel sözcük kullnılmazsa indeksleme artan sayılır ya da alan adının yanında ASC sözcüğü kullanılırsa artan sıralama yapılacağı anlaşılır. Herhangi bir DESC sözcüğünün kullanılması ise azalan sıralama yapılacağı anlamına gelmektedir.

6.1.1  Tek Bir Alana Göre Artan Sırada İndeksleme :

İşletmede çalışan personeli brüt maaşlarına göre artan sırada listelemek istersek, brüt alanına göre bir indeks oluşturmalıyız.

CREATE INDEX pers_maas

ON personel (brüt) ;

Index created 127 rows

127 satırlık personel tablosu ile ilişkili olarak brüt kolonuna indeks anahtarı olarak kullanılan pers_maas adlı indeks oluşturuluştur. Bu durumda

SELECT *

FROM personel ;

Şeklindeki listeleme komutu sonucunda personel tablosundaki tüm personel brüt maaşlarına göre listelenecektir.

 

6.1.2  Tek Bir Alana Göre Azalan Sırada İndeksleme :

İşletmede çalışan personeli brüt maaşlarına göre azalan sırada listelemek istenirse brüt alanına göre aşağıdaki gibi indeks oluşturmak gerekir :

CREATE INDEX pers_maas

ON personel (brüt DESC) ;

6.1.3  Birden Fazla Alana Göre İndeksleme :

İşletmedeki personelin öncelikle adlarına göre aynı adda olanların soyadlarına göre hem adı hem soyadı aynı olanların maaşlarına göre sıralanmış olarak listelenmesi istenirse aşağıdaki komut kullnılmalıdır :

CREATE INDEX p_ad_soy_m

ON personel ( ad, soyad ,brüt ) ;

Bu durumda

SELECT *

FROM personel ;

Komutu sonucunda sıralanmış tablo görülecektir.

 

Unıque Sözcüğü :

Bir tablo , seçilen bir sütuna göre indekslenirken indeksleme alanı olarak seçilen sütundaki verilerin tekrarlanmasına izin verilmesi istenmiyorsa indeksleme yapılırken , CREATE INDEX komutu içinde UNIQUE sözcüğü kullanılır.

CREATE UNIQUE INDEX pers_sicil

ON personel ( sicil );

Mevcut Bir İndeksin Silinmesi :

Bir tablo üzerinde tanımlanmış herhangi bir indeks , o tablonun veri tabanından silinmesi ile otomatik olarak silinecektir.

Tablo silinmeksizin , o tablo üzerinde oluşturulan indeksin silinmesi içinse DROP INDEX komutu kullnılmalıdır.

DROP INDEX pers_in ;

komutu ile

INDEX DROPPED

Mesajı alınacaktır.

SQL ‘in Diğer Bilgisayar Dillerine Ve Yazılımlarına Katılımı :

 

SQL’in Katılım Amacı :

SQL için iki çalışma modu vardır :

  • Etkileşimli SQL modu
  • Katılımlı SQL modu

Buraya kadar SQL’in etkileşimli modu anlatıldı. Bu modda her komut , sisteme gönderilmekte ve sistem cevabı olarak bir sonuç ya da bir hata mesajı karşılığı alınmaktadır. Etkileşimli modda belirtilen 3 noktada güçlük vardır :

  • Tablolara bilgi girişi : Her tablo satırı girişi için ayrı bir INSERT komutuna gerek vardır. Bu oldukça önemli güçlük oluşur. Ayrıca kullnıcı için kolaylık sağlayan bilgi giriş ekranlarını etkileşimli modda ve SQL komutları ile gerçekleştirmek olanaksızdır.
  • Bilgi İşleme : Belli bir anda tek bir komut icra edebilir ve aynı zamanda bir komut otomatik olarak tekrar tekrar icra edebilme yeteneğine sahip değildir.
  • Bilgi Çıkışı : Gerçekleştirilen bir sorgulama sonucunu kullanıcının arzu edeceği düzen ve esneklikle ekrana aktarma imkanı yoktur.

SQL , tanım olarak bir veri tabanı alt dilidir. Yani bilgisayar dilinin gerek gösterdiği tüm yapılara saip değildir.

SQL’in sahip olduğu özellikler bu noktaya kadar görüldüğü gibi, veri tanımlam,bütünlük kontrolü, veriye erişim ve sorgulama ,veriyi güncelleme ile ilişkili komut yapılarıdır. Dolayısıyla eksik olan I/O, ekran tasarımı,loop ili ilişkili program  eksiklikleridir.

SQL, dili yordamsal bir dil değildir tamtersine küme esaslı bir dildir. Bunun anlamı şudur: SQL dili bir sorgulama esnasında SELECT komutu ile belli bir koşulu sağlayan tablo satırlarının tümü birden elde edilebilir.

Kürsör * Kullanımı :

SQL’deki kürsörün anlamı : SELECT komutu ile seçilmiş tablo satırları arasından belirli bir satırı işaret eden gösterge demektir. Belli bir anda kürsörün işaret ettiği satırın üzerinde güncelleme ya da silme işlemi yapılabilir.Bir SELECT işlemi ile ilişkili olarak bir kürsör tanımlama iki aşamalı bir süreçtir :

  • DECLARE CURSOR komutu  ile kürsör için bildiride bulunulur. 
  • OPEN komutu ile de kürsör açılır.

Kürsör açıldığı zaman veriye erişmek için FETCH deyimi kullanılmalıdır. Kürsör ile ilgili işlemler bitince CLOSE deyimi ile ürsör kapatılır.

DECLARE komutu bir kürsör ismini SELECT komutu ile ilişkili hale getirir.

DECLARE kürsör adı CURSOR

FOR SELECT –komutu [FOR READ [ONLY]]

Kullanım şeklidir.

OPEN komutu, DECLARE CURSOR komutundaki SELECT deyiminin icra edilmesi ile elde edilen tablo satırları kümesi içinden erişim yapılabilmesi işlemini başlatır.

OPEN kürsör1

Komutu ile küsör1 adlı kürsör açılmaktadır.

FETCH komutu ile açılan erişim seti içindeki tablo sütunlarındaki veriler SQL’in içinde kullanıldığı program içindeki değişkenlere aktarılabilir.

  1. Henüz yorum yapılmamış.
  1. No trackbacks yet.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: