Merhabalar Bu yazımda temel sql komutlarından başlayarak sql de sıklıkla kullanılan çoğu komut hakkında kısa ve açıklayıcı bilgilere değineceğim , uzun bir yazı olacak kısa kısa ama fazla bilgiler olan bir not alma yazısı gibi olacak , faydalı olması dileğiyle .

SQL SELECT 

Veri tabanındaki tablolardan verileri okumaya yarar .

SELECT FROM tablo_adi  – Yıldız (*) ile tablodaki tüm sütunları görüntüleriz.

--

SELECT * FROM Ogrenciler
--www.salihseker.com


--

1

Sadece belirli sütunları listelemek için istenen sütunların adları yazılır.

 

--

SELECT OgrenciId , Email FROM Ogrenciler
--www.salihseker.com


--

2

SQL DISTINCT 

--


SELECT DISTINCT OgrenciId , Email FROM Ogrenciler
--www.salihseker.com


--

DISTINCT ifadesi tablodaki belirtilen alanda bulunan kayıtlardan birer örnek alır.  Çiftleyen satır varsa sadece 1 tanesini ekrana yazdırır.

 

SQL WHERE 

Sql cümlemizde şart belirlememize yarar Örn :

--


SELECT * FROM Ogrenciler WHERE Email = 'salihseker35@gmail.com'
--www.salihseker.com


--

Email i ‘salihseker35@gmail.com olanları listele .

3

 

SQL AND ve OR

AND operatörü birinci durumla beraber ikinci durumunda olduğu zaman kullanılır. OR operatörü ise birinci durum veya ikinci durumun gerçekleşmesi durumunda kullanılır . (AND = VE , OR = VEYA)

--


SELECT * FROM Ogrenciler WHERE Email = 'salihseker35@gmail.com' AND OgrenciNo = 11111
--www.salihseker.com



--

Email = ‘salihseker35@gmail.com’ ve OgrenciNo = 11111 olan listeyi getirir.

4

 

--

SELECT * FROM Ogrenciler WHERE Email = 'salihseker35@gmail.com' OR OgrenciNo = 33333
--www.salihseker.com


--

Email = ‘salihseker35@gmail.com’ VEYA OgrenciNo = 33333 olan listeyi getirir.

5

SQL ORDER BY 

ORDER BY   ifadesi kayıtları belirtilen alanda büyükten küçüğe veya küçükten büyüğe göre sıralar. ASC (ascending) parametresi ile küçükten büyüğe, DESC (descending) parametresi ile büyükten küçüğe göre sıralar.

--

SELECT * FROM Ogrenciler ORDER BY OgrenciId ASC
--www.salihseker.com


--

6

--


SELECT * FROM Ogrenciler ORDER BY OgrenciId DESC
--www.salihseker.com


--

7

SQL INSERT INTO 

Birinci yöntem: Bu yöntemde direk tablo adı belirterek sadece değerleri yazmak surtiyle kayıt ekleyebiliriz. Ancak burada dikkat edeceğimiz nokta eklenecek değer tablomuzdaki alan sırasına göre olmalıdır

INSERT INTO [tablo adı](alan adları) VALUES (veriler)

--


INSERT INTO Ogrenciler VALUES (2,'TEST ADI',44444,'TEST@TEST.COM')
--www.salihseker.com


--

8

Ogrenci İd si otomatik artan olduğu için insert ederken ekleyemeyiz.

İkinci yöntem: Bu yöntemde ise eklenecek alanları ve değerleri kendimiz belirtiriz. Burada dikkat edilmesi gereken şey; yazdığımız alan adının sırasına göre değerleri eklememiz olacaktır , insert işlemlerinde tavsiye edilen şlem buduru , ileride tablolara eklenecek yeni bir alan olursa bu şekilde kullanılan insertlerde problem yaşamazsınız.

--


INSERT INTO Ogrenciler(AdiSoyadi,Email,OgrenciNo) VALUES ('testadi 2','test2@mail.com',55555)


--

Burada göreceğiniz gibi tabloya ekleme işleminde insert komutunda verdiğim sıra ile değerlerin eklemesini yaptım.

SQL INSERT INTO SELECT KULLANIMI

Bu yöntem ile tek tek insert eklemek yerine bir tabloya select çekerek birden fazla satırı tek seferde insert edeceğiz , select ten gelen tabloyu insert edeceğiz.

Örnek için :  Yeni_Ogrenciler adında bir tablo oluşturdum , Ogrenciler tablomdan tek farkı Kayit_Tarihi adında yeni bir sütunum var , Ogrenciler tablosundaki verilerin tamamını  Yeni_Ogrenciler Tablosuna tek seferde insert edeceğim , kayıt tarihi bilgisinide GETDATE() fonksyonu ile şu anki tarihi eklemesini sağlayacağım.

Öncelik olarak ekleme yapacağım select ifadesini yazıyorum.

--

SELECT AdiSoyadi , OgrenciNo , Email , GETDATE() FROM Ogrenciler

--

9

 

--


INSERT INTO Yeni_Ogrenciler ( AdiSoyadi , OgrenciNo , Email ,Kayit_Tarihi )
SELECT AdiSoyadi , OgrenciNo , Email , GETDATE() FROM Ogrenciler


--

10

Select sorgumuzdan gelen tablomuzu toplu olarak insert ettik

 SQL UPDATE

Güncelleme işlemi içiin update komutunu kullanıyoruz.

--


UPDATE Tablo_adi SET alan1 = yeni_deger1 , alan2 = yeni_deger2 WHERE Koşul

UPDATE Ogrenciler SET AdiSoyadi = 'Süleyman ŞEKER' , Email = 'suleymanseker@gmail.com' WHERE OgrenciNo = '11111'
--www.salihseker.com



--

11

SQL DELETE

Tablodan satır silmek için Delete komutu kullanılır.

--


DELETE FROM Tablo_adi WHERE Koşul

--www.salihseker.com

DELETE FROM Ogrenciler WHERE OgrenciNo = '11111'



--

TRUNCATE TABLE Kullanım Biçimi
Eğer tablomuzu değil de sadece içindeki kayıtları silmek istiyorsak yani tablomuzun içini boşaltmak istiyorsak aşağıdaki kodu kullanabiliriz:

--


TRUNCATE TABLE tablo_adi

--Örn : 

TRUNCATE TABLE Yeni_Ogrenciler
--www.salihseker.com



--

SQL SELECT TOP 

SELECT TOP ile belirtilen kadar kayıt seçilir.

 

--


SELECT TOP 3 * FROM Ogrenciler
--www.salihseker.com


--

12

YÜZDE OLARAK

--

SELECT TOP 25 Percent  * FROM Ogrenciler
--www.salihseker.com


--

13

 

 SQL LIKE

Where koşulu ile birlikte kullanılan bir koşul ifadesidir , ‘%’ yüzde işareti ile birlikte kullanılır .

Örneklerle açıklayacak olursak :

--


SELECT * FROM Ogrenciler WHERE Email LIKE 't%'
--t harfi ile başlayan email adresleri olan kayıtları listeler.

SELECT * FROM Ogrenciler WHERE Email LIKE '%gmail.com'
--www.salihseker.com
--gmail.com ile biten email adresleri olan kayıtları listeler.

SELECT * FROM Ogrenciler WHERE Email LIKE '%mail%'
--www.salihseker.com
--Email alanında mail içeren kayıtları listeler.

SELECT * FROM Ogrenciler WHERE Sehir LIKE 'İ%'
SELECT * FROM Ogrenciler WHERE Bolum NOT LIKE '%Yönetici%'
SELECT * FROM Ogrenciler  WHERE Sehir  LIKE 'İzmi_' 
--www.salihseker.com
--Bu kod Sehir alanının İzmi ile başlayan ve son harfi ne olursa olsun farketmeyen kayıtları seçer.

SELECT * FROM Personel WHERE Adi_soyadi  LIKE '[S,A]%'
--www.salihseker.com
--Bu kod Adi_soyadi alanındaki ilk harfi S veya A ile başlayan kayıtları seçer.



--

SQL IN Kullanımı

IN operatörü belirtilen tek bir alanda birden fazla değeri aramak için kullanılır.

--


SELECT * FROM Ogrenciler WHERE Sehir IN ( 'İstanbul','Kocaeli')
--www.salihseker.com



--

SQL BETWEEN Kullanımı

Between operatörü ile bir alanda belirtilen aralıktaki değerleri aramak için kullanılır.

--


SELECT * FROM Ogrenciler WHERE Not_Ortalama BETWEEN 45 AND 80
SELECT AdiSoyadi, Sehir FROM Ogrenciler WHERE Sehir BETWEEN 'A' AND 'K'
SELECT AdiSoyadi, Sehir FROM Ogrenciler WHERE Sehir NOT BETWEEN 'A' AND 'K'



--

Bu kod ile Sehir alanındaki kayıtlardan A ile K harfi arasındaki harflerden herhangi bir harf ile başlamayan kayıtlar seçilmektedir. NOT kelimesi yapılan işlemin olumsuz yani şartlara uymayan halini işler.

SQL AS Alias Kullanımı

AS ifedesi ile uzun ve kullanımı zor olan tablo veya alan adlarına geçici olarak kısa isimler vererek bunları kodlamalarımızda kullanabiliriz

--


SELECT AdiSoyadi AS [Ögrenci Adı], Sehir AS [Bulundugu Sehir ]FROM Ogrenciler


--

Köşeli PARANTEZ [ ]

Verilecek olan geçici ad eğer boşluk içeriyorsa köşeli parantez içinde yazılır. Tablodaki alan adlarında Türkçe karakter kullanımına izin verilmemektedir. Bu tip durumlarda AS ifadesi ile geçici bir isim verip yazdığımız uygulamada kullanabiliriz.

Tabloların ve verilerin arasına As koymadan sadece boşluk bıraktığımız dada AS Gibi çalışır.

SQL INNER JOIN 

İki adet tablomuzdaki kayıtları belli bir kritere göre birleştirmek için INNER JOIN komutu kullanılır.

NOT: INNER JOIN yerine sadece JOIN kullanılabilir.

14

 

--


SELECT * FROM Ogrenciler ORG INNER JOIN Yeni_Ogrenciler YORG ON ORG.OgrenciId = YORG.OgrenciId



--

SQL LEFT JOIN

Burada asıl olan birinci tablodaki kayıtlardır. İkinci tablodan sadece birinci tabloda olan kayıtlar alınır. İkinci tabloda olupta birinci tabloda olmayan alanların değeri boş (NULL) olarak gelecektir.

15

--


SELECT alan_ad(lari) FROM tablo1 LEFTJOIN tablo2 ON tablo1.alan_adi=tablo2.alan_adi

SELECT * FROM Ogrenciler ORG LEFT JOIN Yeni_Ogrenciler YORG ON ORG.OgrenciId = YORG.OgrenciId 
--www.salihseker.com



--

SQL RIGHT JOIN

16

--


SELECT alan_ad(lari) FROM tablo1 RIGHTJOIN tablo2 ON tablo1.alan_adi=tablo2.alan_adi

SELECT * FROM Ogrenciler ORG RIGHT JOIN Yeni_Ogrenciler YORG ON ORG.OgrenciId = YORG.OgrenciId 
--www.salihseker.com



--

SQL FULL JOIN

FULL JOIN ile iki adet tablomuzdaki kayıtları belli bir kritere göre birleştirebiliriz.

--


SELECT * FROM Ogrenciler ORG FULL JOIN Yeni_Ogrenciler YORG ON ORG.OgrenciId = YORG.OgrenciId 
--www.salihseker.com



--

17

SQL UNION

UNION ile iki adet tablomuzdaki seçeceğimiz alanları birleştirerek tek bir tablo alanıymış gibi kullanabiliriz.

 

--


SELECT Sehir FROM Personel 
UNION
SELECT Sehir FROM Ogrenciler
--www.salihseker.com



--

İki tablodaki şehirleri birleştirerek tek tabloada gösterir çift kayıtlar tekrarlanmaz

Eğer tekrarlayan kayıtların alınması isteniyorsa UNION ALL kullanılmalıdır.

Dikkat edilmesi gerekenler , birleştirilen alanların sütun sayısı ve data_tipleri aynı olmalıdır.

SQL SELECT INTO 

Tablo kopyalayıp yeni bir tablo oluşturur

SELECT INTO ifadesi ile bir tablodaki verileri alıp yeni bir tablo oluşturup içine kopyalayabiliriz. Sonuçta veritabanında yeni bir tablo oluşturulacağı için veritabanı üzerinde işlem yapan kullanıcının yeni bir tablo oluşturma yetkisine sahip olması gerekmektedir.

SELECT alan_ad(lari) INTO yeni_tablo_adi [IN hedef_database] FROM tablo1

NOT 1: Eğer yeni oluşturacağımız tablo aynı veritabanı içindeyse [IN hedef_database] ifadesi kullanılmaz. Eğer farklı bir veritabanı içine kopyasını alacaksak o zaman IN operatörü ile hedef veritabanını belirtmemiz gerekir.

NOT 2: Select Into yapısı ile yeni oluşturulacak olan tabloya, mevcut tablomuzdaki alanlar veri tipleri ve içindeki verilerle birlikte aynen kopyalanır. Eğer alan adını mevcut isminden farklı bir isimle oluşturmak istersek o zaman AS yapısı kullanabiliriz.

--


SELECT id,ad_soyad AS isim,yasadigi_sehir AS sehir INTO personel_yedek FROM personel
--www.salihseker.com



--

NOT 3: Eğer tablo içindeki verileri hariç tutup, sadece alan adları ve veri tiplerini almak istersek WHERE 1=0 eklememiz gerekir.

--


SELECT id,ad_soyad,sehir INTO personel_yedek FROM personel WHERE 1=0


--

CREATE DATABASE 

CREATE DATABASE veritabani_adi

CREATE TABLE

CREATE TABLE

(

alan_adi1 veri_tipi(boyut),

alan_adi2 veri_tipi(boyut),

alan_adi3 veri_tipi(boyut),

….

)

--

CREATE TABLE [dbo].[Ogrenciler](
	[OgrenciId] [int] IDENTITY(1,1) NOT NULL,
	[AdiSoyadi] [nvarchar](50) NULL,
	[OgrenciNo] [nvarchar](50) NULL,
	[Email] [nvarchar](50) NULL,
	[Sehir] [nvarchar](20) NULL
) ON [PRIMARY]
--www.salihseker.com


--

Mssql de tablonun create scriptini otomatik oluşturmak için tablo üzerine sağ tıklayıp Script Table as –> Create To –> New query diyerek creat scripti otomatik alınabilir.

18

 

CAST ve CONVERT

veri tipleri dönüşümünde SQL’de kullanabileceğimiz iki deyim var, CAST ve CONVERT. Kullanımları oldukça basit :

 

--


CAST(deger AS yeniVeriTipi)
CONVERT(yeniVeriTipi, deger)
--www.salihseker.com

SELECTCAST(BusinessEntityIDASNVARCHAR)+' - '+FirstName+' '+LastNameAS Kimlik Bilgileri" FROMPerson.Person



--

Person.Person tablosunda BusinessEntityID alanını Nvarchar tipinde CAST ettim ve bunu sırası ile -, FirstName, boşluk ve LastName ile toplayıp Kimlik Bilgileri kolonu altında listeledim.

--


SELECTCONVERT(NVARCHAR(10),BusinessEntityID)
+' - '+FirstName+' '+LastName
AS "Kimlik Bilgileri"
FROMPerson.Person



--

Genelde tercih edilen CAST’tır çünkü ANSI SQL-99 standardı ile uyumludur.

GO KOMUTU

GO komutu öncesinde yazilmis olan tüm sql ifadelerini veya bir önceki GO ifadesine kadar olan tüm sql ifadelerini tek bir execution plan dahilinde SQL Servera gönderir. SQL Server GO komutunu scriptiservera göndermek için bir isaret olarak algilar.

--


DECLARE @Mesaj VARCHAR(30)
SELECT @Mesaj ='www.salihseker.com'
GO-- @Mesaj degiskeni GO komutundan sonra geçerliligini kaybeder
--www.salihseker.com


--

 GO komutundan sonra bir sayi belirterek birden fazla ayni sorguyu çalistirabiliriz.

 

--

INSERT INTO #tablo(deger)
SELECT SUM(deger)FROM #tablo
GO 10
--10 kez tekrarlanılacak

--

Dikkat edilmesi gereken noktalar:

  • GO komutu diger T-SQL komutlari ile ayni asatirdakullanilamaz
  • GO komutundan önce tanimlanan bir degisken GO komutundan sonra kullanilamaz. Çünkü daha önceki kod yigininin sona erdigini belirtmektedir.
  • Kodun sonunda GO kullanilmadiği veya tüm sorgu bitmediği sürece komutlar sunucuya gönderilmez.

SQL DEĞİŞKEN TANIMLAMA

--


DECLARE @DegiskenAdı tip[(boyut)] = değer
SET @DegiskenAdı = değer

DECLARE @Sayi INT= 3
PRINT'Sayi : '
PRINT @Sayi
SET @Sayi= 5
PRINT'Sayi : '
PRINT @Sayi
PRINT 'Sayi : ' + CAST(@Sayi AS NVARCHAR(MAX))

--Select ile birden fazla değişkene atama işlemi

DECLARE @Ad NVARCHAR(20), @Yas INT;
SELECT @Ad ='Salih', @Yas = 27;
PRINT'İsim:';
PRINT @Ad;
PRINT'Yaş:';
PRINT @Yas;

PRINT 'İsim: ' + @Ad + ' Yaş: ' + CAST(@Yas AS NVARCHAR(MAX))




--

BEGIN…END BLOK KULLANIMI :

BEGIN…END blokları: BEGIN ve END arasında yazılan SQL ifadelerinin bir bütün olarak algılanmasını sağlar. BEGIN…END arasına yazılan SQL kodlarını bir blok olarak çalıştırır.

IF…ELSE KULLANIMI :

IF…ELSE blokları: Eğer o anki durum için ilk alternatif doğruysa SQL Server ilk ifadeyi çalıştırır, ikinci ifade doğruysa ikinci ifade çalıştırır.

--


DECLARE @SAYI INT = 10

IF(@SAYI > 10)
BEGIN 
PRINT 'Sayı 10 dan büyüktür.'
END 
ELSE
BEGIN
PRINT 'Sayı 10 veya 10 dan küçüktür.'
END


--

EXISTS ve NOT EXISTS ifadeleride alt sorgudan getirilen değerlerin içerisinde bir değerin olması veya olmaması durumunda işlem yapılmasını sağlar.

--


IF EXISTS (SELECT TOP 1 1 FROM Ogrenciler WHERE AdiSoyadi = 'Salih ŞEKER')
BEGIN 
PRINT 'KAYIT VAR'
END 
ELSE
BEGIN
PRINT 'KAYIT YOK'
END

--www.salihseker.com



--

Kodun açıkllaması şu şekildedir , IF EXISTS ten sonreki parantezin içinde yazılan select sorgusundan eğer sonuç döner ise işlemi yap dönmez ise ELSE blogundaki işlemi yap demektir.

SELECT TOP 1 dememizin sebebi birden fazla kayıt varsa sadece 1 tanesini getirsin maksat sorgunun daha hızlı çalışmasını sağlamak.

STORED PROCEDURE KULLANIMI

Store Procedure ler kısacası sql de birden fazla işlemin tanımlandığı ve yazılma amacına göre geriye değer döndüren veya döndürmeyen SQL objeleridir . SP ler giriş parametresi alabilir veya almayabilir , eğer giriş parametrelerine ilk değer ataması yapılmaz ise SP kullanıldığında giriş değerlerine değer atanması zorunlu olacaktır , yoksa hata alınır.

SP lerin içerisinde İNSERT , UPDATE ,  SELECT işlermler yapılabilir , farklı SP ler çalıştırılabilir , bu işlemlerin hepsi veya 1 tanesini yapmak mümkündür geriye birden fazla Dataset döndürebilir (birden fazla tablo döndürebilir).

SP oluşturmak için CREATE PROCEDURE prosedür_adı , düzenlemek için ALTER PROCEDURE prosedür_adı , silmek için DROP PROCEDURE prosedür_adı şeklinde kullanılır.

 

Örnek bir SP tanımı yapalım :

--


CREATE PROCEDURE OGRENCI_EKLE ( 

        	@ADI NVARCHAR(MAX),
		@SOYADI NVARCHAR(MAX),
		@OGRENCI_NO  NVARCHAR(MAX),
		@EMAIL NVARCHAR(MAX) = '',
		@SEHIR NVARCHAR (MAX) = ''

) 

AS

INSERT INTO Ogrenciler (AdiSoyadi , OgrenciNo , Email , Sehir )
VALUES (@ADI + ' ' + @SOYADI , @OGRENCI_NO , @EMAIL , @SEHIR )
--www.salihseker.com



--

 

Yukarıda yazılı sp de Ogrenciler tablosuna insert etme işlemi yapan bir SP tanımladık . burada göreceğiniz gibi ADI , SOYADI ve OGRENCI_NO  parametreleri ne ilk değer ataması yapılmadığı için OGRENCI_EKLE SP sini kullanmak istediğimizde bu alanlar kesinlikle gönderilmelidir , EMAIL ve SEHIR parametreleri ilk değer atamaları ‘’ olarak yapılmıştır bu alanlara değer göndermez isek insert işleminde boşluk olarak insert edilecektir.

Tanımladığımız Store procedure ü kullanmak için EXEC komutu ile parametreler gönderilir.

Örn :

--


EXEC OGRENCI_EKLE   @ADI = 'DENEME',@SOYADI = 'SP',@OGRENCI_NO = '9999'  ,@EMAIL = 'A@A.COM',@SEHIR = 'istanbul'
--www.salihseker.com

--VEYA

EXEC OGRENCI_EKLE   @ADI = 'DENEME',@SOYADI = 'SP',@OGRENCI_NO = '9999' 
--www.salihseker.com

--Sonucu görmek için 

SELECT * FROM Ogrenciler
--www.salihseker.com


--

 

1

 

VİEW KULLANIMI

View‘ler sorguları basitleştirmek, erişim izinlerini düzenlemek, farklı sunuculardaki eşdeğer verileri karşılaştırmak veya bazı durumlarda sorgu süresini kısaltmak için kullanılan, gerçekte olmayan Select ifadeleri ile tanımlanmış sanal tablolardır. İçerisinde veri bulunmaz. Sadece tabloların görünümleridir. Kullanıcıların bazı kritik tabloların sadece belli sütunlarını veya satırlarını göstermesi gerektiği durumlarda kullanılabilir.

CREATE VIEW view_adi

AS

SELECT sütun_adları  FROM base _tablo_adı

--



CREATE VIEW DENEME AS SELECT OgrenciId ,AdiSoyadi ,OgrenciNo  FROM Ogrenciler
--www.salihseker.com

 -- oluşan view in sonucunu göremek için 

SELECT * FROM DENEME


--

2

VİEW LARDA NE YAPILMAZ

Yukarıda söylediğim gibi aslında viewlerin yapamadıkları daha fazla.

  • Order  By kullanamazsınız.
  • İsimsiz kolon bırakamazsınız. Örneğin Sumfonsiyonunu kullanacaksınız As ile kesin bir isim vermek zorundasınız.
  • Birden fazla sorgu yazamazsınız yani sadece bir select ile başlayan bir cümle yapabilirsiniz.
  • T-SQL kullanamazsınız
  • Insert, Update veya Delete kullanamazsınız
  • Herhangi bir parametre yollayamazsınız.

FUNCTİON KULLANIMI

Fonksyonlar Sql işlemlerimiz kolaylaştırmak için ve sürekli olarak yapılan işlemleri tekrar tekrar kod yazmamak için kullanılır . Örnek olarak toplama yapan bir fuction oluşturalım , iki adet sayı giriş parametresi olarak tanımlayacağız ve toplamını sonuç olarak vereceğiz.

Örn :

--


Örn : 
CREATE FUNCTION FN_TOPLAMA(@SAYI1 INT,@SAYI2 INT)  
RETURNS INT -- RETURN DEĞERININ INT OLACAĞI BELİRTİLİYOR
AS
BEGIN
    DECLARE @TOPLAM INT
    SET @TOPLAM = @SAYI1+ @SAYI2
    RETURN @TOPLAM
END
--www.salihseker.com

--Tanımladığımız fuctionun kullanımı :

SELECT dbo.FN_TOPLAMA(25,15)
--www.salihseker.com



--

SONUÇ :

3

Tablo sütunlarını Düzenleme , Değiştirme :

--


-- Tabloya yeni bir sütun ekleme

ALTER TABLE tablo_adı
ADD sutun_adi data_tipi

-- Örn : 

ALTER TABLE Ogrenciler
ADD Sehir nvarchar(max)

-- Tablodan Sütun silmek

ALTER TABLE tablo_adı
DROP COLUMN sutun_adi;

-- Örn :

ALTER TABLE Ogrenciler
DROP COLUMN Sehir

-- Tablodaki sütunu düzenlemek

ALTER TABLE tablo_adı
ALTER COLUMN sutun_adi data_tipi;

-- Örn : 

ALTER TABLE Ogrenciler
ALTER COLUMN Sehir nvarchar(20);



--

SQL CURSOR KULLANIMI

 

Cursor’lar bir veri grubu (tablo) üzerinde satır satır işlem yapabilmeyi sağlar . birnevi for döngüsü gibi çalışır , belirtilen select sorgusundan gelen verileri satır satır döndürür ve cursor içinde tanımlanan işlemi yapar . satır satır işlem yapıldığı için yapılan işlemlerde yavaşlığa neden olabilir bu nedenle nerede ve ne zaman kullanılacağına dikkat edilmelidir.

 

Örnek bir cursor tanımlayalım :

Yapacağımız işlemler :

  1. Cursor için kullanacağımız paramatreleri ve data tiplerini tanımlayacağız (@AD_SOYAD_C, @OGRENCI_NO_C v.s.)
  2. Cursorde işlem yapacağımız verileri select sorgusu ile getiriyoruz ve cursur a giriş yapılacak sütunlar belirtiliyor.
  3. Cursor açılır ve yapılıcak işlemler tanımlanır.

Cursor kapatılır ve DEALLOCATE ile sistemeden temizlernir.

 

--



DECLARE @AD_SOYAD_C NVARCHAR(MAX), @OGRENCI_NO_C NVARCHAR(MAX) -- Cursor de kullanacağımız parametreleri tanımlıyoruz.

	DECLARE CRS_OGRENCI CURSOR FOR
	
	SELECT AdiSoyadi , OgrenciNo FROM Ogrenciler -- Cursur de işlenecek veriler ve listeyi select sorgusu ile çekiyoruz .

	OPEN CRS_OGRENCI -- Cursor ü açıyoruz

	FETCH NEXT FROM CRS_OGRENCI INTO @AD_SOYAD_C, @OGRENCI_NO_C -- Select sorgusunda gelen sütunlar sırasına göre değişkenlere atanır Örn : @AD_SOYAD_C = @AdiSoyadi

	WHILE @@FETCH_STATUS =0
		BEGIN
			
			PRINT @AD_SOYAD_C + ' ' + @OGRENCI_NO_C
			--SELECT , INSERT , UPDATE İŞLEMLERİ YAPILABİLİR -- www.salihseker.com


			FETCH NEXT FROM CRS_OGRENCI INTO @AD_SOYAD_C, @OGRENCI_NO_C
 
		END

	CLOSE CRS_OGRENCI -- Cursor ü kapatıyoruz.

	DEALLOCATE CRS_OGRENCI -- Cursor ile işimiz bittiğinde sistemden tamizlememiz için DEALLOCATE etmemiz gerekmektedir.




--

 

Sonuç :

Salih ŞEKER 11111

Cüneyt Medet 22222

Ali Bulut 33333

TEST ADI 44444

testadi 2 55555

DENEME SP 9999

DENEME SP 9999

Tanımladığımız cursorda işlem olarak gelen veriyi print ile yazdırdık , bu alanda gelen veriler ile farklı işlemler yaptırabiliriz. UPDATE ,INSERT ,SELECT v.s. işlemler yapılabilir.

 

Evet , bu yazımızında sonuna geldik , yazının başında da bahsettiğim gibi not , hatırlatma olarak   kullanılabilecek bir yazı oldu , faydalı olması dileğiyle 🙂

Herkese Kolay Gelsin. — Salih ŞEKER —

Print Friendly, PDF & Email
Bu alana reklam verebilirsiniz!