Microsoft Certified Partner

 

 

SQL(İlişkisel Veritabanı Yönetim Sistemi) Kullanımı


 SQL Veritabanı Yönetimi Sistemi Nedir?

  •     DATABASE NEDİR
    • Veritabanı                                                                           
    • Veri Tabanı Yönetim Sistemi (VTYS)
    • Tablolar
    • Kolonlar
    • Indexler
    • Stored Procedures (SPL)
  •     SQL (Genel Örnekler)
    • Select
    • Update
    • Delete
    • Insert
  •     OSQL
DATABASE NEDİR?

Veritabanı:
Birbirleriyle ilişkileri olan verilerin tutulduğu, mantıksal ve fiziksel olarak tanımlarının olduğu bilgi depolarıdır. Veritabanları gerçekte var olan ve birbirleriyle ilişkisi olan nesneleri ve ilişkileri modeller.

Veri Tabanı Yönetim Sistemi (VTYS):
Veritabanlarının kurulmasında, tanımlanmasında ve işletilmesinde kullanılan yazılımların genel adıdır.
Bir veritabanı üzerinde birden fazla veritabanı bileşeni vardır; bu bileşenler, saklanmak istenen ham bilginin, belli bir formatta alınarak, veri haline gelmesi işleminde etkin rol oynarlar.

Tablolar:
Verilerin mantıksal olarak saklandığı ortamlardır. Tabloları adlandırırken tablonun içeriği ile uyumlu olmasına dikkat etmek gerekir. Tablo adlarının ve tablolarda kullanılan kolon adlarının kaç karakter uzunluğunda olduğu, üzerinde çalışılan veritabanının tablo ve kolon özelliklerinden öğrenilmelidir.
Örnek olarak, bir kurumda satış ve üretim bölümünü ilgilendiren iki ayrı tabloyu örnek alalım. Tablolar şöyle olsun:
SATIŞ bölümü  ÜRETİM bölümü
st_urun    ur_malzeme
st_musteri    ur_malzeme_tip
Tablolar veritabanında create table tablo_adı biçiminde yaratılırlar. Bir veritabanında tabloları mantıksal olarak gruplayabilmek de olasıdır. Örnekteki "st" satış bölümünü, "ur" üretim bölümünü anlatmaktadır. Bu şekilde bir tanımlama kullanarak mantıksal olarak bir gruplama ya da düzenleme yapılmış olur.

Kolonlar:
Kolonlar varlıkların özelliklerini tanımlar. Kolonlara verilen adlar, konusuna göre anlamlı olmalıdır. İlk iki ya da dört karakterlik kısmı, ait olduğu tablonun adının kısaltması olması tercih edilir. Bunun kullanımdaki avantajı join'li yapılan sorgularda "ambiguous column name" hatasına düşme olasılığının ortadan kalkmasıdır.
Örnek olarak;
st_urun(    st_malzeme(
urun_no smallint,    malz_no smallint,
urun_ad char(20))    malz_tip smallint))

Indexler:
Index'ler de herhangi bir tabloya bağlı olarak çalışırlar, adlandırılmaları ona göre olur.
Örnek olarak;
st-urun(
urun_no smallint,
urun_ad char(20))
Index'ler unique ya da non-unique (duplicate) olarak yaratılabilirler. Index yazım şekli şöyledir:
tablo_adı + kolon_adı + unique/non-unique + idx
"st_urun" tablosu "urun_no" kolonuna göre unique olarak şu şekilde index'lenir:
st_urun_urun_no_idx
"Composite index" kullanılıcaksa, yani birden fazla kolon üstünde index oluşturmak isteniyorsa şu biçimde olur:
st_urun_urun_no + urun_ad + idx
Yazım şekli şöyledir:
tablo_adı +     kolon_adı1 +     kolon_adı2 +     unique/non-unique +     idx
1                              2                           3                                4                            5
Burada 2 ve 3 nolu alanlarda kolon adlarını görüyoruz; bu aynı zamanda, index'in "urun_no" kolonu altında, "urun_ad" kolonuna göre yapılmasını sağlar. Index yaratılırken adlarının uzun olmasından kaynaklanan bir hatayla karşılaşılırsa, veritabanının kabul ettiği maksimum ad uzunluğuna göre, anlam bütünlüğünü bozmadan ismi kısaltmak gerekir.

Stored Procedures (SPL):
SPL yapılan bir iş sonucu uygulanan işlemlerdir. SPL'lere verilen adlar yaptıkları iş ve işlemlerle uyumlu olmalıdır.
SPL'ler yaptıkları işleme göre mantıksal olarak gruplandırılabilirler. Örneğin, satış bölümündeki üretim tablosunda insert (bilgi girişi) işlemi yapan bir SPL'in adı sp_ur_insert _bil, delete (silme) işlemi yapan bir SPL'in adı sp_ur_delete_bil olursa mantıksal olarak bir gruplandırma yapılmış olur.
SPL'ler veritabında create procedure SPL_adı ile yaratılıp execute SPL_adı ile çalıştırılırlar.

SQL (GENEL ÖRNEKLER)
select * from DEPO where SIRKET='01' and KOD LIKE 'A%'
Şirketi 01, Kodu A ile başlayan Depoları getirir.
select * from DEPO where SIRKET='01' and (KOD >= '11' AND KOD <= '20') order by KOD ASC
Şirketi 01, Kodu 10 dan büyük ve 21 den küçük olan depoları küçükten büyüğe doğru sıralayarak getirir. DESC olursa büyükten küçüğe sıralar.
select max(KOD) AS MAXKOD from DEPO where SIRKET='01' and KOD < '20'


Şirketi 01  olan, Kodu 20 den küçük en büyük Depo Kodlu Kaydı getirir.

select SKART.SIRKET, SKART.KOD, SKART.ADI, SKART.BARKOD, SKARTK.FSTOK, SKARTK.VERKON, SKARTK.ALKON FROM SKART LEFT JOIN SKARTK ON SKART.SIRKET = SKARTK.SIRKET AND SKART.KOD = SKARTK.KOD WHERE SKART.SIRKET = '01'

Şirketi 01 olan SKART tablosundaki stok kodlarına ait olan, FSTOK, VERKON, ALKON  alanlarını SKARTK dan alıp, ilgili stok kodlarıyla birleştirip getirir. INNER JOIN ifadesi iki tablodaki ortak bir veriye göre bu iki tabloyu birleştirip tek bir sonuç almada kullanılır.  INNER JOIN den sonra diğer tablo gelir, ON deyiminden sonra da birleştirmede kullanılacak karşılaştırmalar yeralır.

LEFT JOIN deyimi karşılaştırmaları soldaki alan verilerini getirip, sağdaki alanlarda aynılarını arar, bulamazsa NULL getirerek yapar.
RIGHT JOIN deyimi karşılaştırmaları sağdaki alan verilerini getirip, soldaki alanlarda aynılarını arar, bulamazsa NULL getirerek yapar.

select SKART.KOD,SKART.ADI,SFISD.MIKTAR,SFISD.FIYAT FROM SKART INNER JOIN SFISD ON ( SKART.SIRKET=SFISD.SIRKET AND SKART.KOD=SFISD.MKOD) WHERE SKART.KOD = '1100010' ORDER BY SFISD.TARIH,SFISD.TIP,SFISD.FISNO
update SFIS set TRFISNO=0 where SIRKET='01' and TIP=35 and TRFISNO=1255
SFIS tablosundaki şirketi 01 olan, tipi 35 olan ve transfer fiş no su 1255 olan kayda ait TRFFISNO alanına 0 değerini yazar.
delete from SFISD where SIRKET='01' and TIP=21 and FISNO=88 and SATIR=6
SFISD tablosundan şirketi 01, tipi 21, fiş no su 88, satırı 6 olan kaydı siler.
insert into SKART (SIRKET, KOD, ADI, BARKOD) VALUES  ('01', '000156', 'CEKET', '1548796853215')
 
OSQL
Yerel Sorgulamalar
Yerel sorgular, direk olarak sunucuya bağlanarak çalıştırılan sorgulardır. Yerel sorguyu çalıştırmak için, ilk önce sunucuya bağlantı sağlamamız gerekir. Bunun yanı sıra sorguyu çalıştırabilecek bir program kullanmamız gerekiyor. Bu yüzden, yerel sorguları çalıştırabilmek için, sunucuya bağlanıp, sorguyu çalıştırabilecek bir programa ihtiyaç vardır.

Transact-SQL ve SQL Yardımcı Programları
Yapısal Sorgu Dili (Structure Query Language (SQL))'ni kullanarak, veritabanları üzerinde tuttuğumuz verileri işletiriz. Bu sorgular, OSQL, Query Analyzer veya MS Query yardımcı programları veya harici bir program olan Visual Basic aracılığı ile oluşturulur. 

SQL Server'in eski versiyonunda, buna benzer bir yardımcı araç olan ISQL (Interactive SQL) bulunmaktaydı. OSQL, önceki versiyon olan SQL Server 6.5 versiyonunda kullanılan ISQL komutu yerine kullanılır. ISQL gibi bir araçtır, fakat ISQL'den farklı olarak SQL Server'a bağlanarak çalışır.
DB-Library SQL Server 2000'in bazı özelliklerini desteklememektedir. ISQL ile ntext veritürüne erişim sağlayamıyoruz. Bunun yanı sıra, 255 sekizli (byte) uzunluğundan daha uzun olan char, varchar, nchar veya nvarchar veritürlerine erişim sağlanamıyor. Bunun için, SQL Server 2000 ile beraber, OSQL'i kullanıyoruz. 

OSQL ile Sorguları Çalıştırma
OSQL (ODBC SQL) yardımcı aracı SQL Server ile bağlantı kurarak, T-SQL ifadelerini çalıştırmamızı sağlayan bir yardımcı araçtır. OSQL yardımcı aracına, komut satırından ulaşabiliriz. OSQL, SQL komutlarını çalıştırması açısından yardımcı bir araçtır, ancak grafik arayüzü gibi kullanımı basit değildir. 

OSQL, Transact- SQL ifadelerini, sistem prosedürlerini, ve komut dosyalarının çalıştırılmasında kullanılır. Bu işlemi yaparken, SQL Server ile aktif olarak çalışır. SQL Server 2000 ile haberleşebilmek için ODBC API kullanır. 

Komut cümleleri kullanılır dedik. Toplu komut cümlesinin bittiği yerde GO komutunu kullanılırız. GO komutu, komut cümlesinin bittiğini işaret eder, ve SQL Server servisleri üzerinde bu komutlar üzerinde işlem yapılmaya başlanır. Varsayılan değer olarak, sonuçlar, komut ekranına yansıtılır. Sonuçlar, bunun haricinde herhangi bir metin dosyasına da gönderilebilir. QUIT veya EXIT komutları ile, OSQL'den çıkıp, normal komut satırına dönebiliriz. 

OSQL aracılığı ile SQL Server 2000'e bağlanıldığında, bağlantı cümlesine ek olarak, bir çok parametre gönderebilirsiniz. Parametreleri kullanırken, küçük büyük harf duyarlı olduğuna dikkat etmemiz gerekir. Parametreyi belirtirken kesik çizgi (-) veya eğri çizgi (/) kullanabiliriz. Kesik çizgi (-) veya eğri çizgi (/) işaretlerini kendi aralarında değiştirilebilir, hangisini kullanacağımız farketmez. 

SQL Server'a bağlanma açısından iki parametre önemlidir. Bunlar; yetkilendirme metodu ve bağlanmak istediğimiz sunucu adıdır.
Windows 2000 veya Windows NT 4.0 kullanarak, Windows yetkilendirmesi ile bağlanıcaksak, -E argumanı kullanılır. Aksi takdirde, -U ve -P parametrelerinin kullanarak SQL Server için geçerli kullanıcı adı ve şifresini belirtiriz. Buradaki, kullanıcı adı ve şifresinin küçük büyük harf duyarlı olduğuna dikkat etmeniz gerekir. 

SQL Server kullanıcı hesabı kullanılacaksa, SQL Server Mixed Mode yetkilendirmesi olarak ayarlı olması gerekiyor. Eğer herhangi bir sunucu ismi belirtmezsek, OSQL aracı, yerel sunucu üzerinde varsayılan değer olan örnek isme (instance) bağlanır. 

-S argumanını kullanarak, belirttiğimiz sunucuya bağlanabiliriz. OSQL aracılığı ile yerel sunucuya erişmenin yanı sıra, uzaktaki bir sunucuya da erişebiliriz. 

-L argumanını kullaranak, bulunduğumuz ağ içerisindeki, diğer sunucuları veya yerel örnek isimleri (instances) listeleyebiliriz. 

OSQL yardımcı aracını kullanmak için örnekler yapacağız. İlk iki örnekte, sadece işleyiş sırasını gördükten sonra, diğer örneklerde, bu işleyişin nasıl olduğunu göreceğiz. En son örneğimizde de, dosyalar üzerinde işlem yapacağız.

1.Örnek:
OSQL aracını nerden ve nasıl başlatacağımızı öğreneceğimiz bir örnek yapalım.
Adım adım örnek uygulamamızı gerçekleştireceğiz :

1.Adım : Başlat-> Programlar-> Çalıştır sırasını izleyerek (işletim sistemine göre değişir bu sıra) veya kısayol tuşu olarak Bilgisayarım( ) + R aracılığı ile komut satırına gelelim.

2.Adım : Komut satırı aracılığı ile, SQL Server'a bağlanalım. Bağlanmak için, komut satırına aşağıdaki komuttaki gerekli bilgileri girelim.
osql /U <kullanıcı adı> /P <şifre> /S <sunucu adı>
Ben kendi SQL Server'ıma bağlanmak için komut satırına aşağıdaki komutu yazdım. (Şifrem olmadığı için /P parametresinden sonra herhangi bir şey belirtmedim. Şifresiz! Gel beni göçert diyen bir SQL Server'a sahibim :)
osql /U sa /P /S oz

3.Adım : Komut satırında, şimdi şu şekli almış olmalı: 1>

1.Şekil : OSQL aracı ile sunucuya bağlanılması.

4.Adım : Çalıştırmak istediğimiz, komutu bu satıra yazalım. Örneğimizde, kullandığımız sunucunun versiyonunu veren @@VERSION komutunu yazalım. Sonraki satıra ise, çalıştırma komutu vermek için GO ifadesini yazarız.

SELECT @@VERSION
GO

5.Adım : Enter tuşuna basıp çalıştırdığımızda, aşağıdaki gibi bir sonuçla karşılaşırız.

2.Şekil : Komutun çalıştırılması.
Bu sayede, istediğimiz komutu çalıştırmış olduk.

2.Örnek : İkinci örneğimizde bir SELECT ifadesi yazalım. pubs veritabanını kullanarak sorgu cümlesi yazalım.
Biraz önceki örnekte bağlandığımız sunucu üzerinde, (OSQL komut satırına) aşağıdaki sorgu ifadesini yazalım. Bu sorgu ifadesini yazarken, her bir satırdan sonra Enter tuşuna basalım. (Bütün komutu aynı sıraya yazarsak hata alırız.)

USE PUBS
GO
SELECT * FROM AUTHORS
GO
 
3.Şekil: Komutun yazılması.
Sorgumuzu çalıştırdığımızda, sonuçlar yine bulunduğumuz siyah ekrana dökülür. Ancak, bu sonuçları sözcük kaydırmalı ekranda okumak oldukça zorduk. Bu sebepten dolayı, grafik arayüzüne sahip olan Query Analyzer, bizim için oldukça faydalıdır.
OSQL, aracında komutları yazdığımız satırlardan çıkmak için EXIT komutunu kullanırız.
Komut satırını kapatmak için de, aynı şekilde EXIT komutunu kullanırız.

3.Örnek: Bu örnekte kullandığımız parametreler ve anlamları üzerinde duracağız.
Komut satırına
OSQL -E
komutunu yazıp Enter tuşuna basalım. Bu sayede, OSQL aracılığı ile yerel bilgisayar üzerinde ki SQL Server 2000'in varsayılan değeri olan örnek isme (instance) bağlanmış oluruz. Sonrasında, diğer örneklerde olduğu gibi, 1 > şeklinde, komut yazmamızı bekleyen bir satır çıkar.
Not: Veritabanına bağlanılamadığında, ODBC hata mesajı alırız. 

Not: En genel hatalardan biri, büyük harf E yerine, küçük harf e yazarak işlem yapmaya çalışmaktır. Parametreler, küçük büyük harf duyarlı olduğu için hata mesajı alınır. 

1> komut satırına
SELECT @@SERVERNAME
komutunu yazalım ve Enter'e basalım.
2> komut satırı belirir. Birinci komut satırında yazdığımız komut henüz işlememiştir. Çünkü SQL Server 2000 komutun sonuna geldiğini bilmemektedir.
Komut satırının sonu olduğunu belirtmek için GO komutunu ikinci komut satırına yazıyoruz. Bu sayede SQL Server 2000'in komutu işletmesini sağlıyoruz.

4.Şekil: Yerel bilgisayara bağlanılması ve sorgunun işlemesi.
Sunucumuzun ismi, komut sonucunda döner.
Sorgunun sonucu görüntülendikten sonra tekrar, yeni bir komut beklediğini belirtmek için 1> komut satırı gelir. Buradan EXIT komutunu yazarak çıkıyoruz. Bu sayede OSQL'den çıkarız ve normal komut satırına geliriz.

4. Örnek : Bir tane daha örnek yapalım. Bu örneğimizde de, komut satırına
OSQL -L
komutunu yazıp Enter tuşuna basalım. Daha öncede belirttiğim gibi, -L parametresi, yerel bilgisayar üzerinde bulunan diğer sunucuları veya, aynı ağ içerisinde bulunan uzaktaki sunucuları yayımlama (broadcast) yaparak listeler.

5.Şekil: OSQL -L komutunun işletilmesi.
Benim bilgisayarım herhangi bir ağa bağlı olmadığından, ve başka sunucu kurulu olmadığından yukarıdaki sonucu alıyorum.

5. Örnek: Veritabanını ve sorgu cümlesini OSQL ile sunucuya bağlanırken verdiğimiz bir örnek yapalım.
Not: Aşağıdaki komutun sonucunda, ntext ve image veri türleri döneceği için, bu komut ISQL ile kullanılamaz.
-d parametresi, sorgu yapacağımız veri tabanını belirtir.
-Q parametresi ise, sorgumuzu içerir.
osql /U sa /P /S OZ /d Northwind /Q "SELECT * FROM Employees"

6.Şekil : Sorguyu, bağlantı ile gönderme işlemi.

6. Örnek: Dosya kullanımı ile sorgulamak ve sorgu sonucu elde etme ile ilgili bir örnek yapalım.
T-SQL komutlarına herhangi bir dosyadan ulaşarak uygulayabiliriz. Aynı şekilde, sonucu bir dosya olarak dönderebiliriz.
-i parametresi, giriş dosyasını belirtirken, -o parametresi, çıkış olan dosyayı belirtmektedir.
Aşağıdaki komutları içeren bir giriş dosyası yazıp, adını giris.txt olarak belirledikten sonra C: dizinine yerleştirelim.
USE NORTHWIND
GO
SELECT * FROM ORDERS
GO
Komut satırına aşağıdaki komutu yazarak kullanıcı adı ve şifresini belirterek sunucuya bağlanıyoruz. Bunun yanı sıra diğer parametrelerle, giriş dosyası olarak C:\giris.txt dosyasını kullacağını ve sonuçları da C:\cikis.txt dosyasına çıktı olarak vermesini belirtiyoruz. Dikkat ederseniz, cikis.txt isimli bir dosyayı biz oluşturmadık. cikis.txt dosyasını aşağıdaki komut kendisi oluşturacaktır.
osql /U sa /P -i c:\giris.txt -o c:\cikis.txt

7.Şekil : Dosyalar üzerinde işlem yapmak.
Bu komutun işlemesi sonucunda, işlem tamam gibi herhangi bir ifade şeklinde sonuç vermemektedir. Yalnızca, tekrar komut satırına gelir. Çıktı olarak C: dizinine bakarsak, cikis.txt adlı bir metin dosyasının oluştuğunu göreceğiz.
 
8.Şekil: C dizininde dosyanın oluşması.
Sorgunun sonucu veya sorgulama sonucunda meydana gelen herhangi bir hata mesajı bu metin dosyası içine yazılacaktır. Metin dosyasını açarak, içindeki sorgu sonucunu görebiliriz.
Bu şekilde OSQL aracını kullanmış olduk. Ancak en başta da belirttiğim gibi, arayüzü olmaması açısından, pek tercih edilen bir araç değildir. Bunun yerine, aynı şekilde sorgu işlemlerimizi yapabildiğimiz Query Analyzer tercih edilir.

OSQL ile Database Attach Etme :
use master
go
sp_attach_db ‘SENTEZ’, ‘c:\sentez\Positive\SENTEZ_Data.MDF’ , ’ c:\sentez\Positive\SENTEZ_Log.LDF’
go