SQL Nasıl Kullanılır?
SQL KOMUTLARI GEREKSİNİMLERİ:
SQL komutları büyük/küçük harf duyarlı değildir. Bir veya birden fazla satıra yazılabilirler.
Anahtar kelimeler satırlar arası bölünemezler. Satır başları okumayı kolaylaştırmak için kullanılırlar.
SQL Developer içinde komutlar noktalı virgül kullanılarak ayırılabilir, birden fazla komut varsa ayrılmak zorundadırlar.
SQL* Plus içinde her komuttan sonra noktalı virgül konmak zorundadır.
SELECT KOMUTU:
«Select» komutu gösterilecek sütunları belirler.
«From» bu sütunların hangi tablodan alınacağını gösterir.
Yıldız (*) bütün elemanları sergilemek için kullanılır.
SELECT *
FROM Stajyerler;
Belirli özellikleri sergilemek için isimlerini belirtmek yeterlidir.
SELECT isim, soyisim
FROM Stajyerler;
SELECT komutuyla birlikte aritmetik operasyonlar kullanılabilir.
SELECT isim, soyisim, günlük_maas, 20*gunluk_maas
FROM Stajyerler;
SELECT komutuna eklenen karakter, sayı ve tarihlere «literal» denir.
Karakter ve tarih literalları tek tırnak içine alınmalıdır.
SELECT soyisim || ‘ proje ekibi: ’|| grup_ismi
AS «Grup Yerlestirmesi»
FROM Stajyerler;
Eğer her girişin tek bir örneği görülmek isteniyorsa (kopyalar görünmeyecek şekilde) DISTINCT kullanılır.
SELECT DISTINCT stajyer_id
FROM Stajyerler;
Eğer kullanılacak literal tek tırnak içeriyorsa Alternative Quote (q) kullanılır.
SELECT soyisim || q ‘ [ TET’in stajyerinin proje gurbu: ] || grup_ismi
AS «Grup Yerlestirmesi»
FROM Stajyerler;
SORTING:
Belirli bir koşula göre sergileme yapmak için «Where» kullanılır
SELECT isim, soyisim
FROM Stajyerler
WHERE grup_ismi= ‘METIS’;
SELECT isim, soyisim
FROM Stajyerler
WHERE gunluk_maas BETWEEN 50 AND 75;
«LIKE» operatörü geniş çaplı aramalar için kullanılır.
& sıfır veya sıfırdan fazla karakter anlamına gelir.
_ bir karakter anlamına gelir.
İkinci harfi «i» olan isimleri sergilemek için:
SELECT isim
FROM Stajyerler
WHERE isim LIKE ‘_i&’;
NULL değerleri tespit etmek için:
SELECT isim, grup_ismi
FROM Stajyerler
WHERE grup_ismi= NULL;
AND: Her iki durum da doğruysa doğru döndürür.
OR: Durumlardan biri doğruysa doğru döndürür.
NOT: Durum yanlışsa doğru döndürür.
SELECT * //Metis grubunda 50 TL altı günlük maaş alanlar
FROM Stajyerler
WHERE grup_ismi= ‘METIS’ AND gunluk_maas <= 50 ;
SELECT * //METIS veya V01D grubunda bulunanlar
FROM Stajyerler
WHERE grup_ismi= ‘METIS’ OR grup_ismi= ‘V01D’ ;
SELECT * //METIS ve V01D gruplarında bulunmayanlar
FROM Stajyerler
WHERE grup_ismi NOT IN (‘METIS’, ‘V01D’) ;
SIRALAMA:
ASC: (Ascending) Artan şekilde sırala
DESC: (Descending) Azalan şekilde sırala
SELECT isim, soyisim, alinma_tarihi
FROM Stajyerler
ORDER BY alinma_tarihi;
SELECT *
FROM Stajyerler
ORDER BY gunluk_maas DESC;
ATANAN DEĞİŞKENLER:
& işareti kullanıcıdan alınacak olan geçici değerin alınması ve geçici olarak kaydedilmesi istenilen değişkenin başına konulur.
Kullanıcının girdiği grup ismindeki üyelerin isim ve soy isimleri:
SELECT isim, soyisim
FROM Stajyerler
WHERE grup_ismi= ‘&grup_ismi’;
Alınan değer birden fazla kere kullanılmak isteniyorsa değişkenin başına (&) yerine (&&) konur.
SELECT isim, soyisim, &°er_ismi
FROM Stajyerler
ORDER BY &değer_ismi;
DEFINE komutunu bir değere atama yapmak, UNDEFINE komutunu bu değeri kaldırmak için kullanırız.
DEFINE en_iyi_grup = ‘METIS’
SELECT isim, soyisim
FROM Stajyerler
WHERE grup_ismi= en_iyi_grup;
UNDEFINE en_iyi_grup;
SQL FONKSİYONLARI:
KARAKTER FONKSİYONLARI:
LOWER (‘METIS Grubu’) -> metis grubu
UPPER (‘METIS Grubu’) -> METIS GRUBU
INITCAP(‘METIS Grubu’) -> Metis Grubu
CONCAT (‘Metis’, ‘Grubu’) -> MetisGrubu
LENGTH (‘MetisGrubu’, 1, 5) -> 10
INSTR (‘MetisGrubu’, ‘G’) -> 6
LPAD (gunluk_maas, 10, *) -> ********50
RPAD (gunluk_maas, 10, *) -> 50********
REPLACE (‘JACK and Jue’, ‘J’, ‘BL’) -> BLACK and BLUE
TRIM (‘M’ FROM ‘MetisGrubu’) -> etisGrubu
SAYI FONKSİYONLARI:
ROUND (45.926, 2) -> 45.93
TRUNC (45.926, 2) -> 45.92
MOD (1600, 300) -> 100
TARİH FONKSİYONLARI:
MONTHS_BETWEEN (‘01-SEP-95’, ‘11-JAN-94’) -> 19.6774194
ADD_MONTHS (‘31-JAN-96’, 1) -> ‘29-FEB-96’
NEXT_DAY (‘01-SEP-95’, ‘FRIDAY’) -> ’08-SEP-95’
LAST_DAY (01-FEB-95’) -> ‘28-FEB-95’
GENEL FONKSİYONLAR:
NVL : NULL değerleri gerçek değerlere dönüştürür.
NVL (gunluk_maas, 0)
NVL (alinma_tarihi, ‘01-JAN-99’)
NVL (grup_ismi, ‘Henuz Bir Grubu Yok’)
GRUPLAMA:
AVG
COUNT
MAX
MIN
STDDEV
SUM
VARIANCE
SELECT MIN(alinma_tarihi), MAX(alinma_tarihi)
FROM Stajyerler;
SELECT AVG (gunluk_maas), MAX (gunluk_maas), MIN (gunluk_maas), SUM (gunluk_maas)
FROM Stajyerler
WHERE grup_ismi= ‘METIS’;
COUNT(*) tablodaki satır sayısını geri döndürür.
SELECT COUNT(*)
FROM Stajyerler
WHERE grup_ismi = ‘V01D’;
COUNT(değer) NULL olmayan değer sayısını döndürür.
SELECT COUNT (gunluk_maas)
FROM Stajyerler
WHERE grup_ismi=‘METIS’;
GROUP BY fonksiyonu belli bir özelliğin altındaki aynı değerdeki girişleri bir araya getirmemizi ve incelememizi sağlar.
Aynı gruptakilerin günlük maaşlarının ortalaması:
SELECT grup ismi, AVG (gunluk_maas)
FROM Stajyerler
GROUP BY grup_ismi;
Aynı anda işe alınan ve aynı gruptaki kişilerin günlük maaşlarının toplamı:
SELECT grup_ismi, alinma_tarihi, SUM(gunluk_maas)
FROM Stajyerler
WHERE gunluk_maas>0
GROUP BY grup_ismi, alinma_tarihi
ORDER BY grup_ismi
GROUP BY fonksiyonlarının biri kullanılacaksa queryde group by bulunmak zorundadır.
Grupları sınırlandırmak için «WHERE» kullanılamaz. Gruplar üzerinde sınırlandırma yapmak için «HAVING» kullanılır.
SELECT grup_ismi, MAX(gunluk_maas)
FROM Stajyerler
GROUP BY grup_ismi
HAVING MAX (gunluk_maas)>10;
JOINLER:
NATURAL JOIN: İki tabloda aynı isimde olan sütunları baz alarak oluşur.
SELECT stajyer_id, isim, sehir, lokasyon_id
FROM Stajyerler
NATURAL JOIN adres;
SELECT stajyer_id, departman_id, soyisim
FROM Stajyerler JOIN Departmanlar
USING (departman_id) ; //foreign key
SELECT stajyer_id, departman_id
FROM Stajyerler ON Departmanlar
USING (departman_id);
— — — — — — — — — — — — — — — — — — — — — —
SUBQUERY:
Query içindeki belirli değerlere ulaşıp sorunları çözmek için subquery kullanırız.
SELECT isim, stajyer_id, gunluk_maas
FROM Stajyerler
WHERE departman_id = (SELECT departman_id
FROM Departmanlar
WHERE departman_ismi =‘ ‘Yazilim’)
Tüm departmanların minimum günlük maaşları içinden 110 numaralı departmanın minimum günlük maaşından fazla olan departmanlar
SELECT departman_id, MIN (gunluk_maas)
FROM Stajyerler
GROUP BY departmant_id
HAVING MIN(gunluk_maas) > (SELECT MIN (SALARY)
FROM Stajyerler
WHERE departman_id = 110);
SET OPERATÖRLERİ:
UNION: İki query (yapılan arama, sorgu) içindeki çifte verileri eledikten sonra tüm satırları döndürür.
UNION ALL: Çifte verileri ayıklamadan iki querydeki tüm satırları döndürür.
INSTERSECT: İki querydeki ortak satırları döndürür.
MINUS: İlk seçili queryde bulunup ikincide bulunmayan tüm satırları döndürür.
DATA MANİPÜLASYONU:
Bir tabloya yeni satırlar eklemek için «INSERT» komutunu kullanırız.
INSERT INTO Stajyerler (stajyer_id, isim, soyisim, departman_id, gunluk_maas, alinma_tarihi)
VALUES ( 3, Nisa, Büyüknalbant, 4, 50, SYSDATE)
//SYSDATE komutu anlık tarihi kaydeder.
Tablolardaki satırları silmek için «DELETE» komutu kullanılır.
DELETE FROM Stajyerler
WHERE deaprtman_id=5;
Tablolardaki satır (entry) güncellemeleri için «UPDATE» komutu kullanılır.
UPDATE Stajyerler
SET gunluk_maas=30
WHERE stajyer_id = 3;
TRUNCATE komutu bir tablodaki tüm satırları silip tabloyu tamamen boş bırakır.
TRUNCATE TABLE Stajyerler;
COMMIT VE ROLLBACK AVANTAJLARI:
Datanın tutarlı kalmasını sağlar.
Değişimleri kalıcı yapmadan önce ön inceleme imkanı sunar.
Grup mantığı ile ilgili operasyonlar içerir.
SAVEPOINT update_gerceklesmedi;
UPDATE Stajyerler
gunluk_maas=45;
ROLLBACK update_gercekelsmedi;
UPDATE Stajyerler
gunluk_maas=50;
COMMIT; //Tüm saving pointler etkisiz hale gelir, data değişimi kalıcı olur
«ROLLBACK» tek başına kullanıldığında datadaki değişiklikler geri alınır, data son durumuna geri döndürülür.
DELETE FROM Stajyerler
WHERE stajyer_id=3;
ROLLBACK;
İSİMLENDİRME KURALLARI:
Tablolar ve sütunlar için geçerli isimlendirme kuralları:
Bir harf ile başlar.
1–30 karakter uzunluğundadır.
A-Z, a-z, 0–9, _, $ ve # karakterlerini içerebilir.
Aynı isimler kullanılamaz.
Oracle server-reserved (anahtar kelime) kullanılamaz.
TABLO YARATMAK:
Yeni bir tablo yaratmak için «CREATE TABLE» komutu kullanılır.
CREATE TABLE alinma_tarihi
( id NUMBER(8) ,
alinma_gunu DATE DEFAULT SYSDATE );
DATA ÇEŞİTLERİ:
VARCHAR2(boyut) -> değişken-boyutlu karakter datası
CHAR(boyut) -> sabit-boyutlu karakter datası
NUMBER (p,s) -> değişken-boyutlu nümerik data
DATE -> tarih ve zaman değerleri
LONG -> değişken-boyutlu karakter datası ( 2 GB’a kadar)
CLOB –> karakter datası ( 4 GB’a kadar)
BLOB -> Binary (0,1) data ( 4 GB’a kadar)
BFILE –> harici bir dosyada tutulan binary data ( 4 GB’a kadar)
PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL
CREATE TABLE elemanlar
( eleman_id NUMBER(6)
CONSTRAINT ele_eleman_id PRIMARY KEY
isim VARCHAR2 (20)
CONSTRAINT ele_isim_nn NOT NULL //null değer girilemez
CONSTARINT ele_email_nn NOT NULL
CONSTARNT ele_email_uk UNIQUE //data tekrarı olamaz
Departman_id NUMBER(6)
CONSTRAINT ele_dept_fk REFERENCES //anne tabloyu tanımlar
Departmanlar (Departman_id)
);
UNIQUE olarak belirtilen değerler NULL olabilirken, primary key değerleri ASLA NULL olamaz. Primary Key ve Unique arasındaki en büyük fark budur.
«DROP» komutu bir tabloyu olduğu gibi geri dönüşüm kutusuna taşır.
DROP TABLE elemanlar;
son
Yazar: Nisa Büyüknalbant