Programlama | Programlama Dilleri | C Programlama Dili |C++

Anasayfa Dokümanlar SQL(Structured Query Language) SQL Server,Odbc, Ole Db ,Dao ,Ado Devam1


SQL(Structured Query Language) SQL Server,Odbc, Ole Db ,Dao ,Ado Devam1

VER?TABANINDAN VER? ÇEKMEK

SQL’in destekledi?i bütün veritabanlar? ili?kili veritabanlar?d?r.

SQL’de tablo ad?, verilen temel ünite veriyi organize eder. Tek bir sat?rdaki veriler birbirleriyle ili?kilidir ve her bir sat?r kay?t ad?n? al?r.

Tip: Özel Terimler tablolarla ili?kilendirilmi?tir. Tablodaki sat?r say?s? “cardinality” olarak adland?r?l?rken, sütun say?s? ise tablonun derecesi olarak adland?r?l?r. E?er iki sütun ayn? veri tipine dönü?türülebilir ise onlara alan uyumlu (domain compatible) denir. E?er iki tablo ayn? dereceye sahipse bunlara birle?me uyumlu (union compatible) ad? verilir.

Sütunlar veritaban?nda özel s?n?fland?rmada rol oynar. (Onlarda hangi tip veri tutulaca??n? belirler)

K?saca özetlersek: Veri, tablolarda depolan?r. Tablolar, veri parçalar?yla ili?kilendirilmi? grup olan sat?rlardan ve verinin tipine göre s?n?fland?rma olan sütunlardan olu?ur. Bu bölümde bizim amac?m?z veritaban?ndan veriyi almak oldu?u için bu, tablodan verinin al?nmas?na dönü?mü? olur. SQL bu i?lemi uygulamak için SELECT ad?nda bir eylem olu?turur. Tablodan veriyi almak için bu SELECT deyiminin de?i?ik formlar?n? kullanaca??z.

 

SELECT’? KULLANMAK

SELECT emri tek ba??na bir i? yapmaz. (Çal??t?rd???m?zda hata mesaj? verir) Bu yüzden SELECT’i ek nesne ve kelime gruplar?yla beraber kullanmal?s?n?z.

Bu deyimi kullan?rken tablodan çekece?imiz sütunlar? tek tek virgüllerle ay?rabilir ya da * ile bütün sütunlar? belirtebilirsiniz.

Bununla beraber FROM kelimesini de kullanman?z gerekir. Bu kelimenin nesnesi tablonun ismidir (birden çoksa virgüllerle ayr?l?r). Örnek verirsek:

SELECT * FROM authors

Burada dikkat etmeniz gereken hususlardan ilki, sütun isimlerinde bo?luk kullan?lmamas?d?r. E?er bo?luk kullanmak istiyorsan?z yazaca??n?z ismi kö?eli parantezler içine yazmal?s?n?z.

?kinci önemli husus ise, her bir kay?d?n kimlik numaras?n?n ayr? olmas?d?r. Kimlik numaralar?n?n oldu?u sütuna kimlik sütunu (identity column) ad? verilir. Bu numara ayn? ada sahip kay?tlar? birbirlerinden ay?rt etmeye yarar.

Üçüncü husus ise okunabilirlik ve anla??labilirlik aç?s?ndan kelime gruplar?n? birle?tirmek yerine “_” kullanmakt?r. (kimlikno yerine kimlik_no) Di?er bir yöntemi de kelimelerin ilk harfinin büyük yaz?lmas?d?r. Ayr?ca kullanaca??m?z kelimeler aç?k olmal? (Adres yerine A yazmak anla??labilirli?i olumsuz etkiler).

E?er bütün sütunlar? de?il de belli sütunlar? çekmek istiyorsak:

SELECT au_fname, au_lname FROM authors

?eklinde sütun isimlerini virgüllerle ay?rarak * yerine yazabiliriz.

Tip: SELECT deyimiyle döndürülen tablodaki sütunlar?n s?ralan??? ana tablodaki s?ralan?? olarak de?il, deyimde kullan?lan s?ralan?? olarak döndürülür.

Tablodaki sütunlar? döndürürken birle?tirme i?lemini de yapabiliriz. Önce a?a??daki örne?i inceleyelim:

SELECT au_lname + ‘, ’ + au_fname AS full_name FROM authors

Burada + i?lemi iki sütunu birle?tiriyor (string için tek t?rnak kullan?ld???na dikkat edin) ve sütunun ismi de AS deyimi yard?m?yla full_name olarak adland?r?l?yor.

Tip: Baz? veritabanlar? SQL deyimlerinin sonuna  “;” konmas?n? ister. Buna dikkat etmek gerekir. (SQL Server istemezken Access, Oracle ve Sybase ister)

 

WHERE

E?er tablodan döndürülecek kay?t say?s?n? s?n?rlamak istiyorsak SELECT’te WHERE ifadesini kullanmal?y?z.

Tablonun ba??ndan itibaren belli say?da kay?t çekmek istiyorsak TOP deyimini kullanabiliriz. Örne?in:

SELECT TOP 10 au_lname+‘, ’+au_fname AS full_name FROM authors

TOP deyimi sadece tablodan s?ras?yla kay?tlar? çeker. E?er belli bir ko?ula göre tablodan kay?t çekmek istersek WHERE ifadesini kullanmal?y?z. Kullan?m?na örnek verirsek:

SELECT * FROM authors WHERE state=’UT’

WHERE’i daha iyi incelemek için veri türlerini incelemeliyiz.

Tip: Baz? veri tiplerini baz? veritabanlar? tan?mayabilir. Örne?in MSSQL Server char ve varchar’?n Unicode extens. Kabul etmesine kar??n di?erleri etmez.

binary.................. 8000 byte’a kadar binary veri

bit....................... 0 veya 1 olan integer

char.................... Unicode olarak kodlanmam?? sabit uzunluktaki string

datetime.............. 1/1/1753 den 12/31/9999 a kadar tarih va zaman de?erleri

decimal............... -10^38-1’den 10^38-1’e kadar say?lar (31.2 gibi)

float.................... -1.79E+308’den 1.79E+308’ekayan noktal? say?lar

image.................. maximum 2^31 büyüklü?ünde de?i?ken uzunluk stringi

int....................... -10^38-1’den 10^38-1’e kadar onluk say?lar (31 gibi)

money................. -2^63 den 2^63 e kadar para ifade eden say?lar (10.68 gibi)

nchar.................. Unicode olarak kodlanm?? sabit uzunluktaki karakter stringi

ntext................... maximum 2^31-1 uzunlukta de?i?ken uzunluklu string

nvarchar.............. Unicode olarak kodlanm?? de?i?ik uzunlukta string

numeric............... decimal ile ayn?

real..................... -3.40E+38 den 3.40E+38 e kayan noktal? onluk say?lar

smalldatetime...... 1/1/1900 den 6/6/2079 a tarih ve zaman de?eri

smallint .............. -2^15-1 ten 2^15-12 e integer say?lar

smallmoney......... -214,748.3648 den 214,748.3647 ye para ifade eden say?lar

sysname............. nvarchar (128)

text..................... max 2^31 uzunluklu Unicode olamayan de?i?ken uzunluklu string

timestamp........... Veritaban?ndaki kendine has say?

tinyint.................. 0 dan 255 e integer

varbinary.............. max 8000 byte uzunluklu binary veri

varchar................ Unicode olamayan de?i?ken uzunluklu karakter stringi

uniqueidentifier..... Dünyada kendine has olan global belirleyici

 

SIRALAMA

Verinin s?ralanmas?n? ORDER BY deyimiyle gerçekle?tirebiliriz. Örne?in:

SELECT * FROM authors WHERE contract=1 ORDER BY au_lname

Burada s?ralama çe?idini belirtmezsek artan (ascending =ASC) olarak s?ralan?r. Azalan ?ekilde s?ralanmas?n? istiyorsak deyimin sonuna DESC ifadesini de koymal?y?z. (iste?e ba?l? olarak [DESC] de yazabiliriz.)

E?er birden çok sütuna göre s?ralama istiyorsak sütunlar? virgüllerle ay?rarak (ORDER BY au_lname, au_fname) ve öncelik s?ras?na göre yazmal?y?z.

 

ÖZET EKLEMEK

AVG : ortalama de?eri, COUNT : döndürülen eleman say?s? (bo? olmayan, say?labilir), MAX : en büyük de?eri, MIN : en küçük de?eri, SUM : toplam de?eri döndürür. Örnek verirsek:

SELECT AVG(qty) FROM sales

Bu örnek qty sütunundaki de?erlerin ortalamas?n? döndürür. (WHERE kullan?lsayd? sadece o ko?ulu sa?layanlar?n ortalamas? al?n?rd?)

 

GRUPLAMA

E?er kay?tlar? gruplamak istiyorsak GROUP BY ? kullanmal?y?z. Örnek üzerinde incelersek:

SELECT ord_num,SUM(qty) FROM sales WHERE qty>9 GROUP BY ord_num

Burada SQL ilk önce WHERE ko?uluna uyan kay?tlar? ord_num a göre gruplar. Ard?ndan da bu gruptaki her kay?t?n qty bilgilerini toplar ve ord_num sütununun yan?na qty toplamlar?n? da ayr? bir sütun ?eklinde yazar. E?er bu örnekte GROUP BY ? kullanmasayd?k SQL hata verirdi. (Ya GROUP BY kullanmal?s?n?z ya da sales.ord_num bir aggregate(toplam) de?er de?ildir diye bizi uyar?rd?)

E?er aggregate fonksiyonlar?n? WHERE’de kullanmak istiyorsak WHERE’de alt sorgulama kullan?l?yor olmal?d?r. Aksi halde WHERE yerine HAVING ifadesini kullanmal?y?z. HAVING, GROUP BY’dan sonra icra edilir.

Veritaban?ndan sadece birbirinden ayr? olan elemanlar?n? almak istiyorsak:

SELECT DISTINCT title_id FROM sales

yazar?z. Ba?ka bir örnek incelersek:

SELECT COUNT(title_id) FROM sales HAVING SUM(qty)>30

Burada COUNT ile geçerli olan 21 de?er al?n?yor. Bu 21 kay?d?n qty toplamlar? 30’dan büyük oldu?u için HAVING sa?lan?r ve COUNT’un sonucu olan 21 de?eri döner.

E?er toplama fonksiyonunda sütun ismi verilmemi?se GROUP BY’da verilmesi lâz?md?r.

Ayr?ca, bütün sütun isimleri toplama fonksiyonlar?nda içerilirse HAVING’i GROUP BY’s?z kullanabiliriz.

 

TABLOLARI B?RLE?T?RMEK

?imdiye kadar hep verilerimizi tek bir tablodan ald?k. SQL, join ad? verilen i?lemle birden çok tabloyla i?lem yapmaya izin verir.

SELECT * FROM table1, table2 WHERE table1.identity = table2.identity

Burada anla??ld??? üzere her iki tablonun da ayn? kimli?e sahip elemanlar? döndürülüyor. Bu tür birle?meye iç birle?tirme (inner join) ad? verilir. Burada tabloya eri?im tablo ad? ile sa?lan?yor.

(tablo_adi.sütun_adi = veritabani_ismi.sahip_adi.tablo_adi.sütun_adi)

Inner join olu?turmak için kullan?lan yap? SQLS2 standart?yla de?i?tirildi:

SELECT * FROM table1 INNER JOIN table2 ON table1.au_id = table2.au_id

Tip: Terminolojide, On yap?s?nda e?itlik içerene equi joins, di?er operatörleri içerene nonequi joins, bunlar?n her ikisine theta joins, ko?ulsuz joinlere de cross join ad? verilir.

Inner join haricinde iki tür birle?time daha var ki bunlara outer join de deniliyor. Bunlar right ve left join’dir.

Right join sa?daki tabloyu aynen al?r, soldaki tablodaki ayn? elemanlarla birle?tirir. Left ise tam tersidir. Genel yap? ?öyledir:

SELECT * FROM table1 LEFT JOIN table2 ON table1.au_id = table2. au_id

Ba?ka bir örnek verirsek: Diyelim ki bir tabloda yazarlar, di?er tabloda yaz?lar, ba?ka bir köprü tablosunda da yaz? ve yazar kimlikleri var. Bu tablolar? ?öyle birle?tirebiliriz:

SELECT * FROM authors INNER JOIN titleauthor ON authors.au_id = titleauthor.au_id INNER JOIN titles ON titleauthor.title_id = titles.title_id

Left ve right joinleri full join kullanarak birle?tirebiliriz (iki tabloyu birle?tirmek).

 

ALANLARI B?RLE?T?RMEK VE SÜTUN OLU?TURMAK

Alanlar? birle?tirmeyi daha önce görmü?tük. (+ operatörü ile) Bunun daha bir çok yolu vard?r. Önemli olan nokta, birle?tirilerek olu?turulan sütuna sonradan tekrar eri?ebilmek ve isimlendirmek için AS deyimi ile ad vermektir. Örne?in:

SELECT au_lname + ‘, ’ + au_fname AS full_name FROM authors

Ayr?ca matematik i?lemlerini de uygulayabiliriz (+, -, /, *, ^) Örne?in:

SELECT qty*price AS total_sale FROM sales

Bunlara ek olarak tabloya ek bir sütun ekleyip, bu sütunun elemanlar?na istedi?imiz sabit de?eri verebiliriz:

SELECT *, ‘Temmuz’ AS the_month FROM titles

Tip: As kullan?larak olu?turulan her isme ili?ki ismi (correlation name) denir.

SQL bir bilgisayar program? içinde kullan?lm??sa embedded SQL denir.

Outer join’in eski hali tablo isminden sonra + koymakt?.

 

ÖNCEK? SAYFA       SONRAK? SAYFA

 

Yorumlar (0)
Sadece kayıtlı kullanıcılar yorum yazabilir!
Son Güncelleme ( Salı, 04 Ağustos 2009 16:00 )  
404 Not Found

404

Not Found

The resource requested could not be found on this server!


Proudly powered by LiteSpeed Web Server

Please be advised that LiteSpeed Technologies Inc. is not a web hosting company and, as such, has no control over content found on this site.