SQL etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
SQL etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

2 Mart 2015 Pazartesi

PL-SQL Database fonksiyon ve prosedürler içerik arama

SELECT *
    FROM ALL_SOURCE
   WHERE UPPER(text) LIKE UPPER('%Arama yapılacak kelime%')
ORDER BY type, name, line

30 Mayıs 2014 Cuma

SQL - LIMIT (SINIRLI VERİ LİSTELEME )

SINIRLI VERİ LİSTELEME 
Verilerimizin bizim istediğimiz aralıklarda listelenmesi için LIMIT komutu kullanılır. 
SELECT*FROM tablo_adi LIMIT 0,5 

Örnekte görüldüğü üzere SQL’ deki verilerin ilk veri giriş sıralaması ile ilk 5veriyi listeliyoruz.
Buradaki mantık genel programlama mantığı dışında ilk veri için sıra numarası 0 değildir.Tıpkı günlük hayatta sayı sayıyormuş gibi hareket edebilir. Eğer veri kümesindeki verilerin ilk X adedini listeleyeceksek LIMIT komutuna tek X yazarak ta aynı sonucu alabiliriz. Yani 0 rakamını koymaya gerek yok. 

SELECT*FROM veri LIMIT 8 
Veri listeleme programlama dilleriyle tüm verilere ulaşmak söz konusu olduğunda ikili parametre kullanılması gerekir. Onun için genel kullanım iki parametreli olandır. Belli bir miktarda veri olan bir tablodaki 50 veriden sonraki tüm verileri listelemek için ne yapacağız?

SELECT* FROM tablo_adi LIMIT 50,-1 
Bu komut satırında 50. Veriden sonraki tüm veriler listelenecektir. 

SELECT*FROM veri WHERE no<15 ORDER BY adi DESC LIMIT 4 

No sütunundaki verilerin 15’ den küçük ilk 4 veriyi , adi sütunundaki verilerin alfabetik sıralamasının tersi bir şekilde sıralama yapıyor. 

Not: tek Tırnağın ayırt edici karakter olmadığını belirtmek için işareti kullanılır. 

26 Eylül 2013 Perşembe

ROW_NUMBER Kulanımı Örnek, Bir fatura bazında, fatura detaylarına sıra numarası verilmesi



select (mod(emp_id,5)-emp_id)*-1 page, seq_no,tutar FROM (
SELECT seq_no, tutar, ROW_NUMBER()
   OVER (PARTITION BY seq_no ORDER BY seq_no) AS emp_id
   FROM ser_hiz_det
   where seq_no in ('680501','81127')
   )
   ORDER BY seq_no


SELECT department_id, last_name, employee_id, ROW_NUMBER()
   OVER (PARTITION BY department_id ORDER BY employee_id) AS emp_id
   FROM employees;

DEPARTMENT_ID LAST_NAME                 EMPLOYEE_ID     EMP_ID
------------- ------------------------- ----------- ----------
           10 Whalen                            200          1
           20 Hartstein                         201          1
           20 Fay                               202          2
           30 Raphaely                          114          1
           30 Khoo                              115          2
           30 Baida                             116          3
           30 Tobias                            117          4
           30 Himuro                            118          5
           30 Colmenares                        119          6
           40 Mavris                            203          1
. . .
          100 Popp                              113          6
          110 Higgins                           205          1
          110 Gietz                             206          2

27 Temmuz 2013 Cumartesi

SQL - Pivot Table Nedir Nasıl Kullanılır

MS SQL Server;

Pivot table bir tablodaki verileri yatay olarak göstermemizi sağlar yani satırlarda bulunan bilgileri istediğimiz alanlara göre sutunlara çevirir.  Özellikle rapor hazırlarken verileri daha anlaşılır ve düzenli hale getirmemizi sağlar. Örneğin bir sipariş tablomuz var. Bir müşterinin verdiği her bir sipariş bir satırda gösteriliyor. Her müşteri için son 6 aylık sipariş bilgilerini görmek istiyoruz. Birinci yöntem her hareketi alt alta yazmak olabilir ama daha anlaşılır ve düzenli bir rapor için her müşteri bir satırda yer almalı ve bu satırda son altı aya ait tüm sipariş tutarlarının toplamı gösterilmelidir. Bu durumda pivot table kullanmak imdadımıza yetişir. Bu örneğin daha iyi anlaşılması için küçük bir çalışma yapalım.
İlk olarak basit bir tablo yapalım ve içine aşağıdaki örnek verileri atalım.
CREATE TABLE [dbo].[Siparis](
      [SiparisID] [int] IDENTITY(1,1) NOT NULL,
      [MusteriAdSoyad] [varchar](80) NULL,
      [UrunAdi] [varchar](50) NULL,
      [Tutar] [decimal](10, 2) NULL,
      [Donem] [int] NULL
) ON [PRIMARY]
SiparisIDMusteriAdSoyadUrunAdiTutarDonem
    Sabri KUNTApple IPAD1025201001
    Ali DEMİRLG Netbook950200912
    Metin TOSUNPacketBell Notbook1200200911
    Sabri KUNTNikon D50001480200912
    Sabri KUNTMicrosoft Mouse100200912
    Metin TOSUNHP Printer250200912
    Metin TOSUNHP Server2100200911
    Ali DEMİRHP Pavilion1600200912
   Ali DEMİRADSL Modem80200911
Şimdi müşteri başına aylık olarak ne kadar harcama yapıldığını görmek için bir sorgu yazalım.
SELECT
       MusteriAdSoyad
      ,Donem
      ,sum(Tutar) as ToplamTutar    
  FROM Siparis
  group by MusteriAdSoyad ,Donem
Yukarıdaki sorgu sonucu aşağıdaki gibi her donem için müşterilerin kaç liralık harcama yaptıklarını görürüz.

MusteriAdSoyadDonemToplamTutar
Ali DEMİR20091180
Metin TOSUN2009113300
Ali DEMİR2009122550
Metin TOSUN200912250
Sabri KUNT2009121580
Sabri KUNT2010011025
Peki, bizim binlerce müşterimiz olsa ve toplam 1 yıl boyunca her ay ne kadarlık harcamala yaptıklarını görmek istersek yukarıdaki gibi bir sorgunun sonucunda içinden çıkamayacağımız büyük bir tablomuz olurdu. Her müşteri için aylık harcama miktarlarını farklı satırlarda göstermek hiç de işimize gelmezdi.
Şimdi ise her müşteriyi tek bir satırda gösterelim ve sipariş verdikleri her ay içinde bir kolon açarak bunun altında toplam sipariş tutarlarını gösterelim. Pivot table için Siparis tablosunu gruplayarak kullanmamız gerekiyor. Çünkü sipariş tablosunda her ay için müşteri bazında birden fazla harcama var. Yukarıda yaptığımız gruplamayı yeni bir tablo olarak alıp bunu pivot yaparsak istediğimiz sonuca ulaşabiliriz.
SELECT *
FROM (
      SELECT
       MusteriAdSoyad
      ,Donem
      ,sum(Tutar) as ToplamTutar 
      FROM Siparis
      group by MusteriAdSoyad ,Donem
     ) as gTablo
PIVOT
(
  SUM(ToplamTutar)
  FOR Donem IN ([200911],[200912],[201001])
)
AS p
Yukarıdaki sorgu sonucu aşağıdaki gibi her ay bir kolon olacak şeklide bilgilerimiz yatayda dizildi
MusteriAdSoyad200911200912
Ali DEMİR802550
Metin TOSUN3300250
Sabri KUNTNULL1580

Gördüğünüz gibi bu şeklide bir tablo oluşturmak sonucun daha düzenli olmasını sağladığı gibi incelenmesini kolaylaştırır.

ORACLE;

SELECT ...
FROM   ...
PIVOT [XML]
   ( pivot_clause
     pivot_for_clause
     pivot_in_clause )
WHERE  ...

SQL> WITH pivot_data AS (
            SELECT deptno, job, sal
            FROM   emp
            )
    SELECT *
    FROM   pivot_data
    PIVOT (
               SUM(sal)        --<-- pivot_clause="" span="">
           FOR deptno          --<-- pivot_for_clause="" span="">
          IN  (10,20,30,40)   --<-- pivot_in_clause="" span="">
         );

JOB               10         20         30         40
--------- ---------- ---------- ---------- ----------
CLERK           1430       2090       1045
SALESMAN                              6160
PRESIDENT       5500
MANAGER         2695     3272.5       3135
ANALYST                    6600



25 Haziran 2013 Salı

PL / SQL Nedir? PL / SQL ile Programlama’ ya Giriş

Sql ilişkisel veritabanlarında veriye ulaşmak ve bu veriyi okumak, yorumlamak, değiştirmek yada verinin depolandağı birimler ile her türlü işlemlerin yapıldığı kodlardır.

SQL (Structured Query Language) yani yapısal sorgulama dili aslında dört kategoride düşünülebilir.

DDL : (Data Definition Language): Verinin tutulacağı tablo  yada veritabanı ile ilgili tanımlama yada oluşturma işlemlerini yaptığımız komutlardır.Bunlardan en genel kullanılanlar aşağıdaki komutlarıdır.
         CREATE         – Veritabanında nesne yaratır.
         ALTER           – Veritabanının yapısını değiştirir.
         DROP            – Veritabanından obje siler.
         TRUNCATE     – Tablodaki kayıtları içerdikleri alan ile birlikte siler.
         COMMENT      – Yorum ekler.
         RENAME        – Nesnenin asını değiştirir.


DML: (Data Manipulation Language):Verileri tabloya ekleme, tablodan çıkarma gibi yada veriler üzerinde yapılan değişiklikler için kullanılan komutlarıdır.
        SELECT       – Veritabanından kayıt okur.
        INSERT        – Tabloya kayıt ekler.                 UPDATE       – Tablodaki kayıdı günceller.                 DELETE        – Tablodan kayırları siler ancak kapladığı alan kalır.                 MERGE         – UPSERT işlemi (ekleme veya güncelleme)                 CALL            – PL/SQL veya Java alt programı çalıştırır.

         TCL:(Transaction Control Language):Transaction veritabanındaki işlem yada işlemlerdir. Bu işlemlerin tablo yada şema gibi depo birimleri yada datalar üzerinde yapacaklar değişikliklerin geçerli olmasını yada geri almayı sağlarız.Böylece transctionları kontrol etmiş oluruz.
COMMIT        – Yapılanları kayıt eder.
SAVEPOINT    – Daha sonra geri dönülecek bir dönüş noktası belirler.
ROLLBACK     – Son COMMIT’e kadar olan yeri geri alır.

         DCL:(Data Control Language):Veritabanı üzerinde Datalara erişimi kontrol etmek amacıyla kullandığımız komutlardır.
GRANT – Kullanıcıya veritabanı erişim yetkisi verir.
REVOKE – GRANT ile verilen yetkiyi geri alır.

İşte bu komutları db de belli bir sıra ile veya kontrol mekanizması ile veya devasa işlemlerin smart bir model ile db den gerçekleştirildiği durumlarda PL / SQL kullanmak gerekmektedir. Bunun anlaşılması için şöyle bir örnek verilebilir. Mesela 10.000 çalışanı olan bir firma askeri ücret ile çalışan vatandaşlarının maşını 2 katına çıkarmak istiyor ve sizen bu işlemi sisteme yansıtmanızı ve raporlamanızı istiyor.

İki şekilde yapmanız mümkün: 

1- Çalışanların kayıtlarının olduğu tabloda, maaşı 629,95 Tl  olanları bulup, sonra bunları güncellemeli ve daha sonrada raporlamalısınız. Hadi bu işlem bir kere yapılacak, peki ya her gün , fer saat vs. Yapılacak işlemleri manuel komut çalıştırarak yapmak tüm vaktinizi alacaktır.

2- Bir PL/SQL program birimi yazıp aynı işlemleri her seferinde yapmadan hatta memory biriminide kullanarak (değişkenlerde veri saklama) tek bir F9 ile yapabilir yada planlı iş olarakta atayabilirsiniz.

PL/SQL faydaları nelerdir?
1-PL/SQL prosedürel bir yapıya sahiptir.(if/else, for , while gibi kontrol mekanizmalarına izin verir). Sql prosedürel bir yapıda değildir.
2-Tek seferde istediğiniz kadar işlemi db ye göndereceğinizden her seferinde sql queryler çalıştırmaktan daha hızlı toplam sonucu alabilirsiniz.
3- Çalıştırmış olduğunuz sql kodlarını, debug etme, loglama yada module etme gibi işlemleri PL/SQL blocklarla yada yapılarla sağlayabilirsiniz.
4-Oracle Forms, Oracle Report gibi toollara entegre olabilir.
5-Exception handling ile hata yakalama ve bu durumlarda farklı işlemler tanımlayabilir yada loglama yapabilirisiniz.

En Basit PL/SQL block yapısı şekil1 de gözüktüğü gibidir.

                               Şekil1: PL/SQL block yapısı

Şekil1 de alanları açıklayacak olursak BeginàEnd; Kısmı bir pl/sql block için olması şart olan kısımdır. Diğer alanlar eğer gerekli ise eklenir,

Declare tanımlama alanıdır.Burada memory içinde saklayabileceğiniz değişkenleri yada cursor gibi tanımlamaları yapabilirsiniz,

Begin à End; Bu alanda asıl çalışacak sql kodlar, if/else gibi kontrol yapıları yada tüm işlemlerimiz yazılır.

Exception  alanında oracle tarafından tanımlanmış hata bildirimlerini yada kandininiznde tanımlayabileceği hatalar yada sizin kontrolunuzde olamyan durumlar karşısında neler yapmak isteyeceğinizi bildirebilirsiniz.


Şekil2 : PL/SQL blok Tipleri
         Şekil 2 de pl/sql blok tipleri gösterilmiştir.

Anonim blocklar bir isme sahip değildir ve çalıştırılması için tüm block çağrılmalıdır. Veritabanında saklanmazlar.1 defaya mahsus kullanımda genelde tercih edilirler.

Prosedürlerin bir ismi vardır ve veritabanında, tablo yada index gibi bir şema altında depolanıp saklanabilirler. Diğer programlar yada scriptler içinde kullanılabilirler.Ayrıca isimleri ilede çağrılıp işlevini yerine getirebilirler.Birden çok değer getirebilirler.

Fonksiyonlar da prosedürler gibi , veritabanında saklanıp, çeşitli yerlerde çağrılabilirler.Ancak fonksiyonlar tek bir değer döndürürler ve bir veriye return edilmeleri gerekir.

Örnek bir anonim block aşağıdaki gibi olabilir.
declare
tarih date;
begin
select sysdate into tarih from dual;
dbms_output.put_line(tarih);
end;

Burada bir anonym pl/sql blok yazdık ve bu blok tarihi output olarak bize yazdırmaktadır. Tarih kelimesi görüldüğü üzere bir değişkendir. Ve biz bu değişkenin içine dual tablosundan sistem zamanını atadık.Bu blokların içindede bloklar olabilir, nested bloklar denmektedir.
Begin
      Begin
            ...
      End;
End;

         Pl/sql bloklar için select cümleleri yazılıp çekilen dataların yorumlanabileceği gibi, insert , update, delete , merge cümleleride yazılabilir.

         Pl / Sql Cursor (imleç) ler;
Pl /sql ile veritabanına yönelik yazılımlar yaparken en çok kullanılan yazpılardan biridir. Cursor birden çok veriyi memory de tutup yorumlayabilmemizi sağlar. Nasıl ki değişkenler tek bir adet veriyi tutuyorsa , cursor ‘lerde bir çok veriyi hatta tabloları tutabilen pl/sql yapılarıdır.

Cursor’ler oracle tarafından oluşturulan (implicit) ve Kullanıcılar tarafından oluşturalan (explicit) olmak üzere iki çeşittir. Aşağıda implicit cursor için bazı tanımlamalar mevcuttur.

Sql%notfound à belli bir kritere göre data yok sa true döner.
Sql%found     à Belli bir kritere göre data varsa true döner.
Sql%rowcount à Etkilenen Toplam row sayısını verir.

Declare
Rows_deleted varchar2(30);
Begin
Delete from my_table
Where some_column=124;
: Rows_deleted := (sql%rowcount || ‘row deleted’);
End;

Yukarıdaki örnekte sql%rowcount kullanımına yönelik bir çalışma yaptık, görüldüğü üzere kaç kayıt silinmiş bize bilgisini vermektedir.Aşağıda ise iki adet pl/sql blok bulunmaktadır.Her ikiside aynı amaca yönelik yazılmıştır.

Bu bloklar hr.employees tablosunda ismi D ile başlayan kayıtları bize sunmaktadır.Ancak 1. Blok bir implicit cursor ile ikinic bloktada explicit cursor ile yazılmıştır.

1-implicit cursor örnek;

declare
cursor c is select * from hr.employees where first_name like 'D%';
rec hr.employees%rowtype;
begin
open c;
loop
fetch c into rec;
dbms_output.put_line(rec.first_name);
exit when c%notfound;
end loop;
close c;
end;

2-Explicit cursor örnek;
begin
for i in (select * from hr.employees where first_name like 'D%')
loop
dbms_output.put_line(i.first_name);
end loop;
end;

      
Örnek 2 de for döngüsünün nasıl kullanıldığınıda görmüş olduk.Bununla birlikte aşağıdaki gibi bir örnnekte karar yapılarını gösterebilir.
           
declare
myage number :=28;
begin
if myage < 11
 then
    dbms_output.put_line(' I am a child '); 
 else
    dbms_output.put_line(' I am not a child ');
end if;
end;

21 Mayıs 2013 Salı

SQL KOMUTLAR


SQL KOMUTLAR
DISTINCT: Birbirinin ayni olan satırların listelenmemesi için bu ifade kullanılır
“select distinct uyeadi from uyeler”
BETWEEN: Kosul belirtirken iki deger arasini belirtmek için kullanilir. Örnek:
Yasi 30 ile 40 arasindaki isçilerin kayitlarini listelemek için
“select * from uyeler where yas between 30 and 40¨
LIKE: Eger aradigimiz kayitin bulunmasi için tam bir karsilastirma yapamiyorsak
“select * from uyeler where uyeadi like ’%a’”
IN: Kosul belirtirken kullaniriz. Mesela ismi netrobin, ali veya mehmet olan isçilerin
bilgilerini listelemek için.
“select * from uyeler where uyeadi in (’netrobin’,’ali’,’mehmet’ )”
SUM: Seçilen degerlerin toplamini bulur. Isçilerin aldigi toplam ücreti görmek için
“select sum(ucret ) from uyeler”
MAX, MIN, AVG: Verilen degerin en büyügünü, en küçügünü ve ortalamasini bulur.
MAX en büyük degeri, MIN en küçük degeri, AVG ise seçilen degerlerin ortalmasini bulur.
“select MAX(UCRET ), MIN(UCRET ), AVG(UCRET ) from uyeler where tarih>’01.01.1999’”
ORDER BY ASC: Tablodan seçtigimiz kayitlari alfabetik siralamak için kullanilir.
“select * from uyeler order by asc”
ORDER BY DESC: Tablodan seçtigimiz kayitlari son kayıt sırasına göre siralamak için kullanilir.
“select * from uyeler order by desc”
GROUP BY: Genelde istatistik amaçlar için kullanilir. Mesela hangi tarihte kaç isçinin ise
alindigini bulmak için.
ALIAS: Genelde tablonun veya kolonun adını başka bir şeymiş gibi değişirebiliriz.
Uyeler tablosundaki uyeadi kolonunun adını isim yaptık yani isim olarak çağırabiliriz.
“SELECT uyeadi AS isim FROM uyeler”
JOIN: Bazen iki yada daha fazla tablodan veri cekmemiz gerekebilir, bu gibi durumlarda bu
methodu kullanırız.
Birbiri ile ilişkilendirilmiş iki tablomuz var biri uyeler diğeride detaylar olsun.
İki tablodanda aynı anda sorgulama veya veri çekeceğiz. Uyeler tablosunda id=1 ise detaylar
tablosundaki karşılğı ise uyeno=1 olarak yapıyoruz.
“SELECT * FROM uyeler,detaylar WHERE uyeler.id=detaylar.uyeno”
INNER JOIN OLARAK
“SELECT * FROM uyeler INNER JOİN detaylar ON uyeler.id=detaylar.uyeno”
LEFT JOIN OLARAK
“SELECT * FROM uyeler LEFT JOİN detaylar ON uyeler.id=detaylar.uyeno”
UNION ve UNION ALL : Join methoduna benzer ama sadece aynı kolonlara sahip tabloları
birbirine bağlar. Uyeler ve Detylar tablosundaki uyeadlarını sorgular.
Select uyeadi from uyeler UNION Select uyeadi from detaylar”
Sadece UNION kullanırsak iki tabloa aynı isimler olsa bile tekrarlar.
UNION ALL kullanırsak iki tabloda aynı isimler olsa bile sadece tekini sorgular.
“Select uyeadi from uyeler UNION ALL Select uyeadi from detaylar”
SQL FONKSİYONLARI
sql kendi içinde bir cok fonksiyonu barındırır, bunlar sayım ve hesaplama için kullanılabilir.
Fonksiyon sözdizimi kuruluşu;
SELECT fonksiyon(kolon ) FROM tablo
Fonksiyon tipleri;
sql fonksiyonları birkaç temel tip ve kategoriye sahiptir. Temel fonksiyon tipleri:
++ Aggregate (birleşik degerli ) fonksiyonlar
++ Scalar (tekil degerli ) fonksiyonlar
Aggregate (birleşik degerli ) fonksiyonlar
Bu tip fonksiyonlar birçok deger ile çalışır ama sonucu tek bir degerdir.
Bu fonksiyonların MS Access e uygun olanları:
AVG(kolon ): girilen kolondaki sayıların aritmetik ortalama degerini geri yollar
COUNT(kolon ): Boş degerler haric, girilen kolondaki satır sayısını yollar
COUNT(* ): Verilen tablodaki satır sayısını yollar
FIRST(kolon ): girilen kolondaki ilk degeri yollar
LAST(kolon ): girilen kolondaki son degeri yollar
MAX(kolon ): girilen kolondaki en yuksek degeri yollar
MIN(kolon ): girilen kolondaki en dusuk degeri yollar
STDEV(kolon ): girilen kolondaki basit istatiksel standard sapma degerini yollar
STDEVP(kolon ): girilen kolondaki nüfus istatiksel standard sapma degerini yollar
SUM(kolon ): girilen kolondaki sayıların toplamını yollar
Bu fonksiyonların sql Server a uygun olanları:
AVG(kolon ): girilen kolondaki sayıların aritmetik ortalama degerini geri yollar
BINARY_CHECKSUM: tablonun verilen satırındaki ikilik tabandaki checksum degerini yollar
CHECKSUM: tablonun verilen satırındaki checksum degerini yollar
CHECKSUM_AGG: boş degerler haricindeki verilerin checksum degerini yollar
COUNT(kolon ): Boş degerler haric, girilen kolondaki satır sayısını yollar
COUNT(* ): Verilen tablodaki satır sayısını yollar
COUNT(DISTINCT kolon ): Verilen tablodaki satır sayısını yollar, fakat cift veri bulunan satırları bir defa sayar
FIRST(kolon ): girilen kolondaki ilk degeri yollar
LAST(kolon ): girilen kolondaki son degeri yollar
MAX(kolon ): girilen kolondaki en yuksek degeri yollar
MIN(kolon ): girilen kolondaki en dusuk degeri yollar
STDEV(kolon ): girilen kolondaki basit istatiksel standard sapma degerini yollar
STDEVP(kolon ): girilen kolondaki nüfus istatiksel standard sapma degerini yollar
SUM(kolon ): girilen kolondaki sayıların toplamını yollar
Scalar (tekil degerli ) fonksiyonlar
Girilen degere gore bir deger ile calısır ve sonuc olarak bir deger yollar.
Bu fonksiyonların MS Access e uygun olanları:
UCASE(c ): bolgedeki karakterlerin hepsini buyuk yapar
LCASE(c ): bolgedeki karakterlerin hepsini kucuk yapar
MID(c,start[,end] ): yazı alanından karakterleri calıstırır
INSTR(c ): yazı alanından karakterleri gosterir
LEFT(c,karakterNumarasi ): text alanının girilen sayıya kadar olan kısmını yollar (soldan sayar )
RIGHT(c,number_of_char ): text alanının girilen sayıya kadar olan kısmını yollar (sagdan sayar )
ROUND(c,hassasiyet ): sayı alanını verilen hassasiyete gore yuvarlar
MOD(x,y ): bolme işleminde kalanı gosterir (mod işlemi yapar )
NOW( ): o anki sistem zamanını gosterir
FORMAT(c,format ): alanın gosterim biçimini degiştirir
DATEDIFF(d,birinciTarih,ikinciTarih ): tarih hesaplarını yapmak için kullanılır

SQL ALTER TABLE KOMUTU


Bazen mevcut tablomuzda değişiklik yapmamız gerekir. Var olan tabloya bir alan eklemek, var olan alanın adını, tipi ,boyutunu vs. değiştirmek gibi. Bu tür tablo düzenleme işlemleri için SQL’in “ALTER” komutunu kullanıyoruz. Bu makalemizde,SQL Alter komutu ile yapabileceğimiz işlemleri tek tek inceleyeceğiz. Öncelikle örnek olarak kullanabileceğimiz bir tablo oluşturuyoruz.Tablomuzun adı Personel.

Create scripti:

CREATE TABLE Personel
(
Id int,
Adi vharchar(50),
Soyadi vharchar(50),
DogumTarihi DateTime
)

Tabloya yeni kolon eklemek:

Mevcut tablomuza yeni bir alan eklemek için kullanılan genel ifade:
Click here to find out more!
ALTER TABLE Tablo_adı
ADD Alan_adı Alan_türü
Örnek olarak Personel tablomuza Doğum yeri için bir alan açalım:
Alter Table Personel
Add DogumYeri vharchar(50)
Eklediğimiz alana ait özellikleri daha da özelleştirebiliriz. Mesela Cinsiyet adında, tipi bit olan bir alan ekleyelim, boş olamasın, ve default değeri False olsun
Alter Table Personel
Add Cinsiyet Bit Not Null Default ((0))

Tabloya birden çok kolon eklemek:

Mevcut tablomuza tek seferde birden çok alan eklemek için genel ifade:
ALTER TABLE Tablo_adı
ADD (Alan_adı1 Alan_türü1, Alan_adı2 Alan_türü2, …)
Örnek olarak Personel tablomuza Tc Kimlik numarası ve SSK numarası için bir alan açalım:
Alter Table Personel
Add ( TCKimlikNo int not null, SSKNo int null)

Tabloya Primary Key eklemek:

Mevcut tablomuza bulunan bir alanı primary key yapmak için kullanılan genel ifade:
ALTER TABLE Tablo_adı
ADD PRIMARY KEY (Alan_adı)
Örnek olarak Personel tablomuza bulunan Id alanını Primary key yapalım:
Alter Table Personel
Add Primary Key (Id)
Mevcut tablomuza yeni bir alan ekleyip, primary key yapmak için kullanılan genel ifade:
ALTER TABLE Tablo_adı
ADD Alan_adı Not Null PRIMARY KEY
Örnek olarak Personel tablomuza ID2 adında bir alan ekleyip, Primary key yapalım:
Alter Table Personel
Add ID2 int Not Null IDENTITY(1,1) Primary Key
Tablodaki alanın Primary Key özelliğini silmek: Mevcut tablomuza bulunan primary key alanın bu özelliğini kaldırmak için kullanılan genel ifade:
ALTER TABLE Tablo_adı DROP CONSTRAINT Alan_adı
Örnek olarak Personel tablomuza bulunan Id alanının Primary key özelliğini kaldıralım:
Alter Table Personel Drop Constraint Id

Tablodaki kolonun adını değiştirmek:

Mevcut tablomuzdaki bir alanın adını değiştirmek için kullanılan genel ifade:

Oracle için:

ALTER TABLE Tablo_adı
CHANGE alan_adı_eski to alan_adı_yeni
Örnek olarak Personel tablomuza eklediğimiz “TCKimlikNo” alanının adını TcNo yapalım:
Alter Table Personel Change TCKimlikNo to TcNo

MySql için:

ALTER TABLE Tablo_adı RENAME COLUMN alan_adı_eski to alan_adı_yeni
Örnek olarak Personel tablomuza eklediğimiz “TCKimlikNo” alanının adını TcNo yapalım:
Alter Table Personel Rename Column TCKimlikNo to TcNo

Sql server için:

EXEC sp_rename ' Tablo_adı.[alan_adı_eski]', alan_adı_yeni, 'COLUMN'
Örnek olarak Personel tablomuza eklediğimiz “TCKimlikNo” alanının adını TcNo yapalım:
EXEC sp_rename Personel.[TCKimlikNo], TcNo ,'COLUMN'

Tablodaki kolona ait bilgileri değiştirmek:

Mevcut tablomuzda var olan bir alanın bilgilerini değiştirmek için kullanılşan genel ifade:
ALTER TABLE Tablo_adı ALTER COLUMN alan_adı alan_türü
Örnek olarak Personel tablomuza yukarda eklediğimiz SSK numarasının tipini varchar olarak değiştirelim:
Click here to find out more!
Alter Table Personel Alter Column SSKNo Varchar(20)
Bu komutu kullanarak alana ait ‘Allow Null’, yani boş bırakma özelliğini de değiştirebilirz. Örnek olarak doldurulması zorunlu yaptığımız TCKimlik Numarası nullable yapalım:
Alter Table Personel Alter Column TcNo int null

Tablodaki bir kolonu silmek:

Mevcut tablomuzda var olan bir alanı silmek için kullanılan genel ifade:
ALTER TABLE Tablo_adı DROP COLUMN alan_adı
Örnek olarak Personel tablomuza yukarda eklediğimiz SSK numarası alanını silelim:
Alter Table Personel Drop Column SSKNo
Tablomuzda bulunan bir alanı sildiğimizde, o alandaki bütün datalar silinir. Eğer sildiğimiz alan composite primary key ise, hem o alan silinir hem de tabloda yinelenen kayıtlar silinir.

Tablodaki bir kolona index eklemek /indexi kaldırmak: Mevcut tablomuzda var olan bir alana index eklemek için kullanılan genel ifade:

ALTER TABLE Tablo_adı ADD INDEX Index_Adı (alan_adı)
Örnek olarak Personel tablomuzda bulunan ‘Adi’ alanını indexleyelim:
Alter Table Personel Add index Index1 (Adi)
Mevcut tablomuzda var olan bir indexi silmek için kullanılan genel ifade:
ALTER TABLE Tablo_adı DROP INDEX Index_Adı
Örnek olarak Personel tablomuzda bulunan ‘Adi’ alanının indexini silelim:
Alter Table Personel Drop index Index1
Tablodaki bir kolona Constraint eklemek / Constrainti kaldırmak:
Mevcut tablomuzda var olan bir alana Constraint eklemek için kullanılan genel ifade:
ALTER TABLE Tablo_adı ADD CONSTRAINT constraint_Adi UNIQUE (alan_adı)
Örnek olarak Personel tablomuzda bulunan ‘TCNo’ alanına Constraint ekleyelim:
Alter Table Personel Add constraint constraint1 Unique (TCNo)
Mevcut tablomuzda var olan bir Constraint i silmek için kullanılan genel ifade:
ALTER TABLE Tablo_adı DROP CONSTRAINT constraint_Adi
Örnek olarak Personel tablomuzda bulunan ‘TCNo’ alanının constraintini silelim:
Alter Table Personel Drop constraint constraint1

Tablonun adını değiştirmek:

Mevcut tablomuzun adını değiştirmek için kullanılan genel ifade:
ALTER TABLE Tablo_adı_eski RENAMA TO Tablo_adı_yeni