DELPHİDE SQL KULLANIMI
Database İlişkisi
ID AD
MAAS } Kolon adı (field)
1
Kazım 10000 }
2
Metin 75000 } Kayıt (rows)
…
…………….. ……….. }
Kolon
Kolon Kolon
Table :
Database'de saklanan kolonların birleşiminden oluşan kümedir. Table'ın data
tipi yoktur.
Row :
Tek kayıt demektir.
Column :
Table'daki kolon adına ait kayıtlardır. Örneğin, 'AD' kolonu demek 'AD'
kolonuna girilen verilerin tümüdür.
Field :
Kolon başlıkları ile kayıt başlığı olanlardır.
Primary
Key : Unique + not null (Tek olmalı ve boş geçilemez.)
Table'lar
ilişkisel veri tabanı(compact) olmalıdır. Tablolar arasında bir ilişki
kurulmalıdır.
Oracle
database'i ile kullanıcı arasında SQL_NET ilişki kurar. Protokoller belirlenir,
bir isim altında konfigurasyonlar birleştirilir. Böylece database ismi
tanımlanmasıyla ona ait tüm konfigurasyonlar oluşturulur.
RDBMS :
Oracle'ın server tarafındaki protokoludür. Hızlı erişim sağlar. Güvenlik son
derece güçlüdür. Client / server desteklidir.
TCP/IP
: Oracle'ın server tarafındaki protokoludür.IP numaraları sayesinde client /
server mimarisi iletişimi kurulur. RDBMS gibi ortak özellikler taşır.
Referantional
: Tablolar arasındaki referansların belirtilmesidir. Bazen bir kolonun
değerlerinin başka bir tablodaki kolonlardan veri laması gerekmektedir. bu
durumda referans verilir.
Bir
projeye başlarken şu aşamalar yapılır;
-
- İyi bir
analiz
-
- Analizin
tablolara göre dizaynı ve aralarındaki ilişkiler
-
- Akış şeması
ve döküman hazırlanması
-
- Test
edilmesi
-
- Üretime
geçilmesi
Database'e
üzerinde giriş,değişiklik,silme vb. İşlemlersql ile olur. Tablolar fiziksel
olarak gözükmezler. Database içinde saklıdırlar. Operatörler kullanılabilir.
Data
Dictionary: Database'deki kullanıcılar, yaratılan tablolar vb.
Nesneler hakkında detaylı bilgiler bulunan tablodur. Belli başlı fonksiyonlarla
ulaşılabilir.
SQL :
Tablolar arasında iletişim kurar, sorgulama yapar.
SQL
*Plus : Ek olarak bloklar oluşturulabiliyor. Mantıksal döngüler
ve komutlar oluşturulabiliyor. IF, FOR vb.
PL /
SQL : Server'a bağlanıp insert, update, delete vb. Database
üzerinde direkt işlemler yapılabilir. Database'e en hızlı ulaşım ve sorgulama
biçimidir.
-
- Yazılan
komutlar bufferda işlem yapar. O yüzden her yeni komut yazıldığında önceki
komutu siler.
-
- Yazılım
kontrolu(syntax) her satırın sonunda kontrol edilir.
-
- Çeşitli
formatlarla çıktı alınabilir.
-
- Direkt komut
sonunda sonuç alınır.,
-
- Select ile
data okunur.
-
- İnsert,
update,delete (DML) ile var olan bir tablo üzerinde değişiklikler
yapılabilir.
-
- Create,alter,drop,rename,
truncate(DDL) ile yapısal değişiklikler yapılabilir.
-
- Commit,rollback,savepoint
(tranaction) ile yapılan işleri onaylar veya geri alır, iptal edilebilir.
-
- Grant,revoke
(DCL) ile objelerin kullanılmasına hak vermek veya geri almak içindir.
Güvenlik kurulur.
-
- Exit (^D)
ile SQL'den çıkış sağlanır. Böylece yapılan işlemler iptal olur.
NOT:
Tnsnames.ora Database hakkında bilgiler bu dosyada saklıdır.
Listener.ora
Server tarafında bulunan config dosyasıdır.
NOT:
Komut yazılımdaki köşeli parantezler o alanın zorunlu olmadığını belirtir. {}
işaretleri o alan için birden fazla değer alacağını gösterir. Büyük harf
yazılanlar oldugu gibi yazılır. Küçük harf yazanlar açıklamadır.
SELECT
komutu
Select
komutu ile database'den istenilen kriterlere göre veri getirlir.
Yazılımı:
SELECT
[DISTINCT] {*,column [alias] ,….}
FROM
Tablo
[WHERE
koşullar]
[ORDER
BY {column,expr} [ASC|DEXC] ] ;
SELECT
:Seçilen kolonları alır.
DISTINCT
:Belirtilen kolondaki aynı değerlere sahip verilerden sadece birini alır.
Örneğin personel kodu xxx olanın personel adı gibi.
alias
:Kolon adlarının daha açık olması için tanımlanır.
FROM
table :Belirtilen tabloyu açar.
WHERE
:Belirli kriterler koşullar oluşturulur. Tablolar arasında birleştirmeler
yapılabilir.
ORDER
BY :Seçilen kolona göre sıralı kayıt getirir.
ASC :Artan
sırada listelenir. Varsayılan budur.
DESC :
Artan sırada listelenir. Varsayılan budur.
* : Tüm
kolonlar seçilmiş anlamındadır.
Listelemede
rakamlar sağa yanaşık, karakterler sola dayalı gözükür. Kolon adları büyük harf
görüntülenir.Aritmatik işlemler kullanılabilir (+,-,/,*). Örneğin;
Select
maas+maas*0.10 From Personel_Table;
Bazen
bir matematiksel işlemler daha uzun veya daha karmaşık olabilir. Fonksiyon
tanımlayarak kolona sorgulatıp bir sonuç üretebiliriz. Matematiksel işlemlerde
öncelik sırası;
-
- Parantezler
(,)
-
- *,/,+,-
-
- soldan sağa
doğru öncelik sırası,
şeklindedir.
Column
Alias : Kolon başına açıklayıcı isim verilebilir. Tırnak
işaretleri (") ile açıklayıcı kelime belirtilir. Tek kelime için "
işareti kullanılmasada olur. Örneğin;
Select
ad AS "Adı" From Personel_Table;
Concatenation
Operator: Birden fazla stringi veya kolonu yan yana birleştirip
listelemek için kullanılır. İfadeler string olmalıdır. Zaten karakter ve tarih
formatındaki değerler tırnak( ' ) işaretleri içerisinde belirtilir. Örneğin;
Select
ad||' ' ||soyad AS "Adı Soyadı" From Personel_Table;
Null :
Değeri hiç girilmeyen kolonlar NULL değerini alırlar. NULL sıfır veya
boşluk karakteri değildir. Yokluk demektir. Bir rakam ile NULL değer üzerinde
matematiksel işlemler yapılamaz.
NVL
Fonksiyonu: Null değeri yerine yeni değer atar. Alan tipi ne turde
ise alacağı değer o türde olmalıdır.
Yazılımı:
NVL (null_değeri_alan,yeni_değer)
Örneğin;
NVL(Maas,0);
Maas kolonundaki null değerlerin yerine sıfır atar.
veya NVL(Ad,'
'); Ad kolonundaki null değerlerin yerine bos karakter atar.
En
önemli kullanım amacı hesplamalara işlemin yarıda kesilmesini engellemek
içindir. Örneğin maasa zam miktarı eklensin. Ama bazı personele zam yapılmadığı
varsayılırsa bu kişiler icin zam kolon değeri null'dur. Buna göre;
SELECT
maas+NVL(zam,0) From Personel_Table;
Tab : Tüm
tabloların adlarının saklandığı alandır. Örneğin tüm tabloların listesini
vermek için aşağıdaki iki yazılımı da kullanabiliriz.;
Yazılımı;
SELECT
* From Tab;
SELECT
table_name From user_tables;
Desc :
Tablonun kolonlarının adlarını, kolonların tipini ve null değer alıp
alamayacağı durumlarını gosterir.
Yazılımı:
DESC
tablo_adı;
Kolon
tiplerinden bazıları;
NUMBER(rakam,ondalık)
Sayısal ifadelerdir. Rakam alanı sayının max alabileceği tamsayı kısmını
verir. Ondalık alan ise max. decimal değerini verir.
VARCHAR2(sayı)
Karakter ifadelerdir. Sayı ile belirtilen alan, max. karakter sayısıdır.
DATE
Tarih ve saat ifadeleridir. Ülke kodu desteğiyle çeşitli formatlarda
database’de tutulurlar.
CHAR(sayı)
Karakter ifadesidir. VARCHAR2’den tek farkı database’de saklanma şeklidir.
Max 255 karakter alabilir. Sayı ile belirtilen alan, max. karakter sayısıdır.
ORDER
BY : Seçilen kolona göre sıralama yapar. DESC artan sırada,
ASC azalan sırada listeler. Null değerler sıralamaya alınmazlar. Örneğin azalan
sırada ada gore liste alınsın;
SELECT
ad,soyad FROM Personel_Table ORDER BY ad DESC;
Eğer
kolonlar birden fazla ise kolon numarası ile de tanım belirtilebilir;
SELECT
ad,soyad FROM Personel_Table ORDER BY 1 DESC;
Eğer
birden fazla kolona göre sıralama yapılmak istenirse, önce yazılan kolon baz alınarak
diğer kolona göre sıralı listeler.
SELECT
ad,soyad FROM Personel_Table ORDER BY 1,2 DESC;
WHERE
: Sorgulamaları sınırlandırmak amacıyla koşullar konulur. Örneğin departmanı
38 kodlu personel listesi;
SELECT
ad ||' ' ||soyad FROM Personel_Table WHERE Dept_Id=38;
<,>,
>=, <= gibi karşılaştırma karakterleri kullanılabilir. Bunlar dışında
bazı SQL operatörleri ile daha rahat koşullar konulabilmektedir.
BETWEEN
Min AND Max: Belirtilen Min. ve Max. değerler arasında değer alabilir.
Yani belirtilen iki değer arasında değerler alır. Örneğin yaşı 18 ile 30
arasındaki personeller;
SELECT
ad ||' ' ||soyad FROM Personel_Table
WHERE
yas BETWEEN 18 AND 30;
IN
(liste) : Liste olarak tanımlanan değerleri alır. Yani bir şekilde
OR ifadesine denktir. Örneğin yaşı 18, 25 ile 30 olan personeller;
SELECT
ad ||' ' ||soyad FROM Personel_Table
WHERE
yas=18 OR yas=25 OR yas=30;
Veya
SELECT
ad ||' ' ||soyad FROM Personel_Table
WHERE
yas IN(18,25,30);
LIKE :
Benzerlik vermek için kullanılır. '%' karakteri tum karakterler yerine geçer.
'_' karakteri ise tek karakter yerine geçer. Sadece _ işaretini çıkarmak için '
\_ ' işareti kullanılır. Küçük büyük harf ayrımı vardır.
'%t'
t harfiyle başlayanlar.
'%t%'
t harfi geçen tüm kayıtlar.
'B_K%'
B baş harfi ile başlayan ve 3. Harfi K olan tüm kayıtlar.
karakterleri
arasında değer girilirse kolon içinde Örneğin soyadı 'M' ile başlayan
personeller;
SELECT
ad ||' ' ||soyad FROM Personel_Table
WHERE
soyad LIKE ' M% ' ;
IS
NULL : Kayıdın null olup olmadığını kontrol eder. Örneğin maaşı
null olan kayıtları listelesin;
SELECT
ad ||' ' ||soyad FROM Personel_Table
WHERE
maas IS NULL ;
NOT :
Belirtilen koşulun tam ters koşulunu verir. Örneğin maaşı null olmayan
kayıtları listelesin;
SELECT
ad ||' ' ||soyad FROM Personel_Table
WHERE
maas IS NOT NULL ;
SQL *Plus Üzerinde Sorgu Hazırlanmasında
Kullanılacak
Yardımcı Komutlar
Sql
komutları sadece hafızada tutulurlar. İşletilen her komut hafıza tutulur. O
yüzden kullanıcının işini kolaylaştırmak için bazı ek komutlara ihtiyaç
duyulmuştur.
Sql
Plus’a girmek için komut satırında şu şekilde girilir;
SQLPLUS
[kullanıcı adı [/şifre [@Database]]]
A[PPEND]
Text Satır sonuna kelime ekler.
C[HANGE]
/eski/yeni eski text yerine yeni text ekler. Yeni alanı boş
bırakılırsa eski alan olarak belirtilen text silinir.
CL[EAR]
BUFF[ER] SQL hafızasındaki tüm satırları siler, hafızayı boşaltır.
DEL Aktif
olarak bulunduğu satırı siler. Satır no belirtilirse o satırı siler.
I[NPUT]
Text Satır arasına Text ifadesiyle belirtilen cumleyi ekler.
L[IST]
Hafızadaki tüm satırları listeler.
L[IST]
m n Sadece m ile n arasındaki satırları listeler.
R[UN]
Hafızadaki SQL satırını çalıştırır. Aynı işlevi "R,r,/, ; "
karakterleride yapar.
n Text
n satırındaki cümleyi Text ifadesi belirtilen alana yazılan cümle ile
değiştirir.
0 Text
Bulunduğu satırdan bir önceki satıra yeni alan açar ve texti oraya ekler.
SAVE
Dosya Hafızadaki komutu belirtilen dosya adı altında saklar.
GET
Dosya Belirtilen dosyayı hafızaya yukler.
START
Dosya Belirtilen dosyayı direkt çalıştırır. Hafızaya yuklemez.
@ işaretide aynıdır.
ED[IT]
Dosya Belirtilen dosyayı bir editör içinde açar.
SPOOL
Ekranda yapılan her türlü işi dosyaya atar. SPOOL OFF ile dosyaya kayıt
işlemini durdurur.
EXIT
SQL’den çıkış sağlar.
HELP
Komut Belirtilen komut için açıklayıcı bilgi verir.
SQL Plus Fonksiyonları
Fonksiyonlar
sayesinde;
- Datalar
üzerinde hesap yapabilir,
- Datalar
üzerinde değişiklikler yapılabilir,
- Grup
oluşturularak bu kayıtlar için kullanılabilir.
- Tarih datası
çeşitli formatlarda görüntülenebilir,
- Kolon
tipleri değiştirilebilir.
- İç içe
fonksiyonlar tanımlanabilir. Öncelikle içteki fonksiyon çalışır. Çıkan
sonuca göre dıştaki fonksiyon işlem görür.
Sys.Dual
: Oracle database’inde bulunan tek kolon ve tek satırdan oluşan bir
tablodur. Belirli bir tablodan değerler almadan fonksiyonların kullanılması
gerektiginde bu tablo kullanılır.
Karakter Fonksiyonları
LOWER(Text)
: Text olarak belirtilen alanı küçük harfe çevirir.
UPPER(Text)
: Text olarak belirtilen alanı büyük harfe çevirir.
INITCAP(Text)
: Text olarak belirtilen alanın baş harfini büyük diğerlerini küçük harfe
çevirir.
CONCAT
(Text1,Text2) : Text1 olarak belirtilen alan ile Text2
alanını birleştirir. ‘ || ‘ simgeside aynıdır.
SUBSTR(Text,m,n)
: Text alanının m. karakterinden itibaren (m. karakter dahil) n kadar
karakter alır.
LENGTH(Text)
: Text alanın karakter uzunluğunu sayısal olarak verir.
NVL(KOLON,DEĞER)
: Kolonun aldığı değer null ise değer alanında belirtilen değeri verir.
Sayısal Fonksiyonları
ROUND(Sayı,m):
Sayı alanına girilen rakam, m olarak belirtilen ondalık kadar yuvarlar.
Örneğin; ROUND(45.923,2) 45.92
ROUND(45.923,0)
46
ROUND(45.923,-1)
50
ROUND(45.951,2)
45.92
ROUND(45.929,2)
45.93
TRUNC(Sayı,m):
Sayı alanına girilen rakam, m olarak belirtilen ondalık kadar sondan keser.
TRUNC(54.923,2)
45.92
TRUNC(54.923,-1)
40
TRUNC(54.929,2)
45.92
MOD(m,n)
: m sayısı n sayısına bolundugunde kalan rakamı bulur.
Zamansal Fonksiyonları ve İşlemleri
Tarih
+ sayı Tarihe sayı kadar gun ekler.
Tarih
- sayı Tarihe sayı kadar gun çıkarır.
Tarih
- Tarih İki tarih arasındaki gün farkını sayısal olarak verir.
Tarih
+ sayı / 24 Tarihe sayı kadar saat ekler.
SYSDATE
Sistem tarihini verir. Oracle’ın varsayılan tarih formatı ‘DD-MON-YY’
şeklindedir. Üzerinde aritmatiksel işlemler yapılabilir.
MONTHS_BETWEEN(tarih1,tarih2)
İki tarih arasını ay olarak bulur.
ADD_MONTHS
(tarih,n) Tarihe n kadar ay ekler.
NEXT_DAY(tarih,'
gün' ) tarih'den sonraki günün ilk tarihini verir.
LAST_DAY(tarih,'
gün' ) tarih'den önceki günün ilk tarihini verir.
ROUND(tarih[,'
fmt '] ) tarih'I belirtilen formata göre aya veya yıla göre
yuvarlar.
TRUNC(tarih[,'
fmt '] ) tarih'I belirtilen formata göre aya veya yıla göre keser.
Çevirme Fonksiyonları
TO_CHAR(Sayı,[‘fmt’])
: Girilen tarih veya sayıyı karakter tipine çevirir.
Tarih
parametreleri;
YYYY
Yılı rakamsal olarak gosterir.
YEAR
Yılı yazısal olarak verir.
BC
Millattan once ve sonrası icin zaman verir.
MM
Ayı rakamsal olarak gösterir.
MONTH
Ayı yazısal olarak verir. Belirtilen ülkenin tarih yazısıyla
verir.
MON
Ayı yazısal sadece ilk 3 harfini verir. Belirtilen ülkenin tarih
yazısıyla verir.
RM
Ayı roma rakamıyla gösterir.
DD
Günü rakamsal olarak gösterir.
DAY
Günü yazısal olarak verir.
Sayısal
parametreleri;
- Rakamdır.
- Sıfır
rakamı verir.
$
Rakamın başına $ işareti koyar.
.
Ondalık haneye ayırır.
,
Rakamı 3’er hane ayırarark aralarına virgül koyar.
MI
Negatif sayılar için sonuna – itareti koyar.
Örneğin
" x nolu kişi xxx'dir." Formatında ekrana liste oluşturalım (id
number);
SELECT
TO_CHAR(id) || ' nolu kisi ' ||name||'dir.'
Örneğin
sistem tarihini DD-MM-YYYY olarak gösterelim;
SELECT
TO_CHAR(sysdate,' DD-MM-YYYY')
Örneğin
sistem zamanını HH:MI olarak gösterelim;
SELECT
TO_CHAR(sysdate,' HH:MI' )
TO_NUMBER
(Karakter) : Girilen karakteri sayısal ifadeye çevirir.
TO_DATE(char,
[‘fmt’]) : Girilen karakteri belirtilen formatta tarih formatına
çevirir.
Örneğin
tarih kolonundaki değerleri, 7 /11/1998 tarihine eşit olanların listesini
oluşturalım. Ama kolon değerleri string olarak ayın uzun ad, günü ve yılı
sayısal olarak kayıtlıdır. Bu sorunu çözmek için kullanılır;
SELECT
no, maas
FROM
Personel
WHERE
MAAS_TARIH=TO_DATE('KASIM 7, 1998', 'Month dd,YYYY')
Tablolar Arasında İlişki Kurulması (JOIN)
* Birden
fazla tabloyla ilişki kurularak ortak sorgulama yapılmasıdır. Tabloları belli
bir ortak kolona göre birleştirmek için join yöntemi kullanılır. Bunun için
öncelikle tablolardaki kolonlar aynı tipte ve aynı büyüklükte olmalıdır.
Yazılımı:
SELECT
table1.kolonları,table2.kolonları
FROM
table1, table2
WHERE
table1.kolon1=table2.kolon2
İki
tabloyu birleştirmek için iki tabloda ortak bulunan kolonları where kotulu
içinde etitleriz.
Örneğin
personel adı ve bulunduğu departman listesi icin;
SELECT
a.*,b.*
FROM
personel a , departman b
WHERE
a.dept_id=b.dept_id
Böylece
personel tablosundan personel adı ve soyadı, departman tablosundan departman
adı bilgisi getirilir.
* Bazı
durumlarda tablo birleştirme koşulu bir aralık şeklinde oluşabilir. Yani
tabloları birleştirirken anahtar sahaların belirli bir aralığı seçilebilir.
SELECT
table1.kolonları, table2.kolonları
FROM
table1, table2
WHERE
table1.kolon1 BETWEEN table2.min2 AND table2. max2
*
(OUTER JOIN) Bir diğer durumda tablodaki verilerin değerleri null olabilir.
Fakat biz null değerlere sahip olanlarıda birlerştirmek istersek eksik olan
tablonun yanına (+) işareti eklenir.
SELECT
table1.kolonları, table2.kolonları
FROM
table1, table2
WHERE
table1.kolon1 (+) = table2.kolon2
*
(SELF JOIN) Bir başka durumda aynı tablodaki kendi içindeki kolonlar arasında
ilişki kurulabilir. Bazı durumlarda kolonlardaki değerleri eşit olma
durumlarına göre sorgu düzenlenebilir.
SELECT
table1.kolonları
FROM
table1 a, table1 b
WHERE
table1.a = table1. b
Grup (GROUP) Fonksiyonları
Bazen
belli bir koşula uygun belli bir topluluk için sorgu kurulabilir. Bu durumda
grup işlemi yapılır. Örneğin departmanlara göre grup oluşturulup o
departmandaki personel sayısı hesaplanabilir. Grup fonksiyonları sadece grup
ifadeleriyle kullanılabilir.
Yazılımı:
SELECT
kolonlar, grup fonksiyonları
FROM
table
[WHERE
kotul]
[GROUP
BY grup_kolonu]
[HAVING
group_kotulu]
[ORDER
BY kolon]
GROUP
BY satırı ile kolonlar üzerinde küçük gruplar oluşturulur.
HAVING
satırı ile bu oluşturulan grup için grup koşulları tanımlanabilir. Where
koşulundan farkı WHERE kayıt üzerinde koşul koyar, HAVING ise sadece grup
kayıtları üzerinde koşul konabilir ve grup fonksiyonları kullanılabilir.
AVG(Kolon)
: Belirtilen kolonun ortalamasını bulur.
COUNT(Kolon)
: Belirtilen kolonun kayıt sayısını bulur. Count(*) ile o grupta oluşturulan
kayıt sayısı hesaplanır. Null değerler için nvl fonksiyonu kullanılır. Çünkü
kolon içindeki null değerler işleme alınmaz.
MAX(Kolon)
: Belirtilen kolondaki kayıtların değerlerinin maksimum değerini bulur.
Sayısal, karakteristik veya tarihsel olarak kendi içinde sıralama yapabilir.
MIN(Kolon)
: Belirtilen kolondaki kayıtların değerlerinin minimum değerini bulur. Sayısal,
karakteristik veya tarihsel olarak kendi içinde sıralama yapabilir.
SUM(Kolon)
: Belirtilen kolondaki kayıtların değerlerinin sayısal toplamını bulur.
VARIANCE(Kolon)
: Belirtilen kolondaki kayıtların değerlerinin matematiksel varyansını
bulur.
Örneğin
bir personel listesindeki departmanların ayrı ayrı departman içindeki
personelin max ve min maas alan kişilerin maaslarını isteyelim;
SELECT
Departman_id, MAX(Maas) , MIN(maas)
TABLE
Personel
GROUP
BY Departman_id
Veya
38 nolu departmandaki personel sayısını bulalım;
SELECT
COUNT(*)
TABLE
Personel
WHERE
Departman_id = 38
Veya
tüm departmanlardaki maaşlarının ortalaması 80.000.000 ‘den büyük olanların
listesini oluşturalım;
SELECT
Departman_id, AVG(Maas)
TABLE
Personel
GROUP
BY Departman_id
HAVING
AVG(maas) > 80000000
Bazı
durumlarda iç içe grup oluşturulması istenebilir. Bu durumda şu şekilde
yazılır.
GROUP
BY Kolon1, Kolon2 , …
Örneğin
Departman adına ve personel yasına göre grup oluşturalım.
SELECT
Departman_id, Yas
TABLE
Personel
GROUP
BY Departman_id, Yas
Altsorgular(SUBQUERY)
Subquery,
bir sorgu oluşturulurken, bu sorguya ait kriterleri başka bir sorgu belirleme
durumudur. Kısaca sonucu bilinmeyen koşullar olduğunda bu yöntem kullanılır.
Yazılımı:
SELECT
…..
FROM
……
WHERE
kolon=( SELECT …
FROM
….
WHERE
….)
Select
cümlesi parantes içinde tanımlanır. = koşulu kondu ise select cümlesi tek değer
döndürmek zorundadır. Eğer birden fazla değer için koşul konulması gerekirse
" in, not in " kelimesi kullanılır. Tek kayıt döndüğünde = yerine
>,>=, <, <=, <> kontrol ifadeleride kullanabiliriz. Bir
önemli nokta da koşula eşitlenecek değer 2. Select cümlesi içindeki kolon
değerine eş olmalıdır. Yani tipleri eşit olmalıdır.
Subquery
sorgulama tekniğinde order by kullanılamaz.
Having
grup kotulu içinde select cümlesi kullanabiliriz.
Örneğin;
- sorgu :
Kazım' ın departman numarası kaçtır?
- SELECT
dept_id,name
FROM Personel
WHERE name='Kazım'
- sorgu :
Departman numarası 38 olan kişilerin listesinden adı kazım olan var mı
incele?
- SELECT
dept_id,name
FROM Personel
WHERE dept_id=38
- sorgu : Bu
iki sorgunun birleşimi istenirse, yani departmanı 38 olan kazım adlı
personel bigisi ?
SELECT dept_id,name
FROM Personel
WHERE dept_id=( SELECT dept_id
FROM
Personel
WHERE name='Kazım')
Çalışma Anında Sorguya Dışarıdan Değer Alma
Bir
sorgu oluşturulurken bazen bazı alanların değerleri değişkendir. Bu yüzden
sorguya dışarıdan değer girilmesi ve bu değere göre bir sorgu oluşturulması
gerekir. Bunun için anahtar kelimenin başına ‘ & ‘ karakteri getirilir.
Örneğin
istenilen departmankoduna göre personelin adı ve soyadı listeleyelim;
SELECT
ad,soyad
FROM
Personel
WHERE
Dept_id = &Departman_kodu
Ekran:
Departman_kodu
için değer gir: 38
eski
1: select ad,soyad from Personel where Dept_id = &Departman_kodu
yeni
1: select ad,soyad from Personel where Dept_id = 38
Eğer
sorgu yazılımı sorunlu ise bu giriş yapıldıktan sonra anlaşılır ve kesinlikle
girilen değer kolon tipine eş olmalıdır. Örneğin ‘&anahtar_kelime’ şeklinde
tırnak arasında belirtilmişse giriş olarak sadece text değer girilir. Ama
&anahtar_kelime tırnak içinde belirtilmemişse giriş yapılırken tırnak
içinde giriş yapılmalıdır. Birden fazla &anahtar_kelime tanımlanırsa
sırayla sorgu sorulur ve tüm değerler girildikten sonra sorgu oluşturulur. Eğer
where koşulunda &anahtar_kelime’si kullanılmışsa giriş yapılırken
matematiksel koşul şeklinde giriş yapabiliriz.
Eğer
anahtar kelimenin başına ‘ && ‘ konulursa sorgu sırasında sadece bir
kerelik sorgu sorulur. Bundan sonra anahtar kelimenin değeri ilk girilen değer
olarak geçerlidir.
DEFINE
değişken=değer : Belirtilen değişkene karakter atanır.
ACCEPT
: Kullanıcıya açıklayıcı mesaj verilerek istenilen tipte veri girişi
yapılması sağlanır. & işaretiyle yapılan işlemin daha kontrollu şeklidir.
Yazılımı
:
ACCEPT
değişken [datatipi] [ FORMAT ] [PROMPT text] [HIDE]
Değişken
Giriş yapılacak verinin değerinin tutulduğu anahtar kelimedir.
Datatipi
Girişi yapılacak verinin veri tipidir.
FORMAT
Giriş yapılacak verinin giriş düzeni sağlanır. Örneğin rakam için 9999 (4
haneli sayı) , karakter için A10 (10 karakterlik yer) .
PROMPT
Kullanıcıya gireceği değer için açıklayıcı mesaj görüntüler.
HIDE
Giriş yapılırken verinin görüntülernmeden giriş yapılması sağlanır. Örneğin
şifre girişlerinde.
Örnekler;
ACCEPT
adi PROMPT ‘Adınızı giriniz:’
ACCEPT
yas NUMBER PROMPT ‘Yaşınızı giriniz:’
ACCEPT
yil NUMBER FORMAT 9999 PROMPT ‘Bulunduğunuz yılı giriniz:’
ACCEPT
sifre CHAR PROMPT ‘Tifrenizi giriniz:’ HIDE
Örnek:
Personel adına göre personel bilgilerini gösterelim. Bunun için bir .sql
uzantılı dosyada yazalım. Bu programı start ile çalıştıralım.
Ornek.sql
SET
ECHO OFF
ACCEPT
adi PROMPT ‘ Adınızı Giriniz:’
SELECT
* FROM Personel
WHERE
UPPER(Personel.ad) LIKE UPPER(‘&adi’)
/
SET
ECHO ON
“Start
Ornek.sql “ yazılarak sql çalıştırılır.
Bazen
parametre girişlerini daha başlangıçta vermek istenirse;
Start
Dosya_adı Parametreler,…
Örneğin
yukarıdaki örnek için Start Ornek Kazım
Tabloların Yaratılması
Database’de
verilerin saklanması amacıyla tablolar yaratılır. Tablo yaratabilmek için o
kullanıcının buna yetkisi olmalıdır. Aynı zamanda limitsiz tablespace hakkına
sahip olmalıdır.
Yazılımı
:
CREATE
TABLE [kullanıcı.]table
(kolon
datatipi(boyutu) [DEFAULT değer]
[CONSTRAINT
constraint_name] constraint_type]
[table_constraint]
[PCTFREE
integer] [PCTUSED integer]
[TABLESPACE
tablespace] [STORAGE storage_clause]
[CACHE]
[ENABLE
enable_clause]
[DISABLE
disable_clause]
[AS
subquery]
Kullanıcı
Tablonun yaratıcısıdır. Onun sahip olduğu haklara ve mekana sahiptir.
Kolon
Tablonun kolon adlarını belirler. Bir tablodaki kolon sayısı 1-254 arasında
olmalıdır.
Datatipi
Bir kolonun veri tipini belirler.
Varchar2(boyut): Boyut ile
belirtilen max miktar kadar karakterdir.Max
değeri 2000’dir.
Char(boyut) : Boyut ile belirtilen max miktar kadar
karakterdir.Max.
değeri 255’dir.
Number
: e38 ‘e kadar olan tüm sayısal değerlerdir.
Number(m,n) : m kadar (max e38)
sayının n kadar ondalık alan için
değer alır.
Date :
Tarih ve saat değerlerini bir tutar.
Boolean
: Mantıksal ifadeleri saklar. Yani doğru ise True,
yanlış ise false.
Long
: Max 2GB ‘a kadar büyük olan alanlar için yer tutar.
Raw :
Grafiksel yapıdaki veriler için tanımlanır.
DEFAULT
Herhangi bir kolona değer girilmezse, direkt olarak değer atamaya yarar.
Girilen değerin veri tipi ile aynı olması gerekir.
CONSTRAINT
O kolon için daha açıklayıcı olması açısından ve yapısı açısından
kullanılır.
table_constraint
O tablo için daha açıklayıcı olması açısından belirtilen etikettir.
PCTFREE
Tablo üzerinde yapılan kayıt güncelleme işlemleri için, kayıt bloklarındaki
ayrılacak rezervasyon yüzde değeridir. 1-99 arasında bir tamsayıdır. 0, tüm
bloklara yeni kayıt girişine izin verilir. Varsayılan değer 10’dur. Yani
güncelleme için her bloğun %10’unu rezerve eder. Geri kalan %90’nını ise yeni
kayıt girişlerine ayırır.
PCTUSED
Tablonun her veri bloğu için Oracle’nin koruduğu, kullanılmış alanın min
yüzdesini verir. 1-99 arasında bir tamsayıdır.Varsayılan değeri 40’dır. Verilen
parametre değerinin altına düşek blok için, yeni kayıt girişi seçimliktir.
PCTFREE+PCTUSED <100 olmak zorundadır.
TABLESPACE
Oracle’ın tabloyu yaratacağı tablo boşluğunu belirler. Eğer tanımlanmazsa
çalışılmakta olan kullanıcının tablo boşluğunda yaratılır.
STORAGE
Tablonun depolama karakteristiğini belirler. Büyük tablolarda perfonmans
düzenleyici olarak kullanılır.
CACHE
Tablo üzerinde arama yapılırken, hafıza cache’nin en çok kullanılanlar
üzerinde yer almasını sağlar.
ENABLE
Bütün sınırlamaları geçerli kılar.
DISABLE
Bütün sınırlamaları iptal eder.
AS
query Tablo yaratılırken, alt sorgu aracılığı ile geriye
döndürülen satırlar tabloya yerlettirilir.(insert)
Data Dictionary
Database
ile ilgili her türlü bilgiyi buraya atar. Buradan verilere ulaşabiliriz.
Kullanıcılar, tablolar, indexler, constraintsler vb. birçok açıklayıcı bilgiler
tutulur. Bütün tablo ve viewerların adlarını ve açıklamalarını görnek için ;
SELECT
* FROM Dictionary;
Dictionary’nin
yapısını görmek için;
DESC
dictionary
İsim
Tip
--------------------
--------------------------
TABLE_NAME
VARCHAR2(30)
COMMENTS
VARCHAR2(2000)
Dictionary’de
bulunan objelerden bazıları;
User_tables
Hangi kullanıcı ile login olundu ise o kullanıcıya ait tabloları listeler.
All_tables
Bütün kullanıcıların yarattığı tabloları listeler.
Dba_tables
Database ile ilgili her türlü tablolar listelenir.
V$_tables
Systemin performansını ölçmek için tutulan bilgilerdir.
V$_librarycache
Cache’in yeterli olup olmadığını anlamak için bakılır.
V$_rollstat
Rollback segmentinin yeterli olup olmadığını anlamak için bakılır.
Örnek
: Login sifresiyle giren kullanıcının yarattığı tabloların listesini alalım;
SELECT
table_name FROM user_tables
Örnek:
Tüm obje isimlerinin listesini alalım;
SELECT
object_name FROM user_objects
Database Üzerinde Transaction Kontrol
Komutları
Transaction,
datanın tutarlı şekilde korunmasını sağlayan yöntemdir. Database üzerinde kayıt
yapma , silme, düzeltme vb. işlemlerin yapılabilmesi için aşağıdaki komutlara
ihtiyaç vardır;
INSERT
INTO : Tabloya yeni bir kayıt eklenmesini sağlar.
Yazılımı;
INSERT
INTO table [(kolon1, kolon2, …)] VALUES (değer1, değer2, …)
Kolon
Tablonun kayıt yapılacağı kolon adlarını belirler. Bir tablodaki kolon sayısı
1-254 arasında ve o tabloda var olmalıdır.
Değer
O kolon için alacağı değer verilir. Kolon tipiyle aynı olmalıdır. Eğer
kolon adları belirtilmezse değerler kolon sırasına göre değer almalıdır.
Değerlere sysdate, user vb. hazır fonksiyonlar aktarılabilir. Eğer bir alana
değer verilmesi istenmiyorsa, yani boş değer verilmesi isteniyorsa NULL değeri
verilir.
Örnek:
Personel tablosuna yeni bir personel giriti yapalım;
INSERT
INTO personel (ad,soyad,maas,ayrilma_tarihi,kayit_giris_tarihi)
VALUES
(‘Kazım’,’Sarıkaya’,400000000,NULL,SYSDATE)
Aynı
örnek için kolon sırasını bildiğimiz düsünülürse şu şekildede yazılabilir;
INSERT
INTO personel
VALUES
(‘Kazım’,’Sarıkaya’,400000000,NULL,SYSDATE)
Sadece
tek kayıt girişi yapılıyorsa, rahat veri girişi yapılması için değerlere
değişken tanımlayarak veri girişi sağlayabiliriz. Böylece table her
çalıştığında yeni veri girişi yapılır.
Örnek:
Personel tablosuna her çalıştırdığımızda yeni bir personel girişi yapalım;
INSERT
INTO personel (ad,soyad,maas,ayrilma_tarihi,kayit_giris_tarihi)
VALUES
(‘&Adi’,’&Soyadi’,&maas,NULL,SYSDATE)
Örnek:
Daha güvenli ve rahat giriş yapılacak şekilde kayıt yapılacak script yazalim;
SET
ECHO OFF
ACCEPT
ad PROMPT ‘Adını giriniz:’
ACCEPT
soyad PROMPT ‘Soyadı giriniz:’
ACCEPT
maas PROMPT ‘Maaşını giriniz:’
INSERT
INTO personel(ad,soyad,maas,ayrilma_tarihi,kayit_giris_tarihi)
VALUES
(‘&ad’,’&soyad’,&maas,NULL,SYSDATE)
/
SET
ECHO OFF
Kayıt
yapılacak kolonların değerleri bilinmiyorsa veya başka bir tablodan değer
alınması gerekiyorsa aşağıdaki yapı kullanılır;
Yazılımı;
INSERT
INTO table [(kolon1, kolon2, …)] Altsorgu
Örnek:
Personel tablosuna departman tablosundan departman kodu 38 olan personellerin
değerlerini aktaralım;
INSERT
INTO personel(ad,soyad,maas,ayrilma_tarihi,kayit_giris_tarihi)
SELECT
adi,soyadi,maasi,ayrilma,kayit_giris
FROM departman
WHERE dept_id=38
UPDATE
: Tablodaki kolonların değerlerini değiştirmek için kullanılır.
Yazılımı;
UPDATE
table
SET
kolon1=değer1, kolon2=değer2, …
[WHERE
kotul]
Kolon
Tabloda değişiklik yapılacak kolon adıdır. Bir tablodaki kolon sayısı 1-254
arasında ve o tabloda var olmalıdır.
Değer
O kolon için alacağı değer verilir. Kolon tipiyle aynı olmalıdır. Eğer
kolon adları belirtilmezse değerler kolon sırasına göre değer almalıdır. Değerlere
sysdate, user vb. hazır fonksiyonlar aktarılabilir. Eğer bir alana değer
verilmesi istenmiyorsa, yani boş değer verilmesi isteniyorsa NULL değeri
verilir.
Örnek:
41 nolu departmanın maaşını %13 artıralım;
UPDATE
Personel
SET
maas=maas+maas*13/100
WHERE
dept_id=41
Örnek:
649 nolu personelin departman kodu 10 olsun;
UPDATE
Personel
SET
dept_id=10
WHERE
personel_id=649
Eğer
WHERE koşulu konulmazsa tüm tablo için kolon değerini değiştirir. Koşulu SET
ile değiştirdiğimiz kolona veremeyiz.
DELETE
: Tabloda belirtilen kayıdı siler.
Yazılımı;
DELETE
FROM table
[WHERE
kotul]
Örnek
: Personelin maaşları 100.000.000 ‘dan küçük olan kayıtları silelim;
DELETE
FROM Personel
WHERE
maas<100000000
Bir
tablodaki tüm kayıtları silmek istersek koşul konmaz. Tablo silinmez, sadece
kayıtları silinir.
Örneğin
DELETE FROM Personel
Foreign
key veya primary key silinecek kayıtda varsa silinme hatası verir. Çünkü başka
tablo ile ilişki kurulduğundan(join), diğer tablonun kullandığı kayıt vardır. O
yüzden bu kaydı silebilmek için, ilişkide bulunduğu tüm kayıtları önce silmek
gerekir. Aynı zamanda tablo üzerinde çalışan kullanıcı varsa kayıtlar
silinemez. ROLLBACK komutu ile silinen kayıtları kurtarabiliriz(Tabi ki en son
COMMIT komutu kullanılana kadar).
COMMIT
: Bütün yapılan işlemleri kesin olarak kalıcı olmasını sağlar. Böylece
yapılan değişiklikleri varsa diğer kullanıcılarda görür.
SAVEPOINT
x : İşlemi belirli bir yere yönlendirmek için kullanılır. X ile belirtilen
alan için işaret konularak istenildiğinde bu işarete kadar işlemler
yapılabilir.
ROLLBACK
x : Bütün yapılan işlemleri kesin olarak iptal eder. SAVEPOINT komutu ile
belirlenen x kodlu alana kadar olan tüm itleri iptal eder.
Yazılımı;
ROLLBACK
[TO SAVEPOINT x]
Örnek:
UPDATE
personel …..
SAVEPOINT
dön
DELETE
FROM Personel
INSERT
INTO …..
ROLLBACK
dön teklindeki bir itlemle personel kaydının silinmesi ve yeni kayıt eklenmesi
işlemi iptal edildi. Ama ilk yapılan değişiklik kaldı.
Read
uncommitted Commit olmadan görünmez. O halde böyle level yoktur.
Read
committed Oracle’ın varsayılan değeridir. Committen sonra işlem
görür.
Serializable
Yapılan insert işlemleri gözükmez. Eski datalar gözükür.
Read only Transaction itleminde sadece okuma var demektir.
Read only Transaction itleminde sadece okuma var demektir.
ALTER
TABLE : Yeni bir kolon eklemek, kolonun tipini veya uzunluğunu
değiştirmek vb. yapısal değişiklikler yapılması için kullanılır. Eğer kolon
üzerinde değişiklikler yapılacaksa dikkat edilmesi gereken koşullar vardır.
Örneğin kayıt uzunluğu 15 iken uzunluğunu 10’a indirirsek kayıt içindeki bilgiler
kesilir. Kolonlar ekleyebilir ve yapısal değişiklikler yapabiliriz. Constraint
yapısını ekler, silebilir, enable ve disable yapabiliriz.
Yazılımı;
ALTER
TABLE table
[ADD
(kolon datatipi [DEFAULT değer] [NOT NULL]) , …]
[ADD
[CONSTRAINT açıklama] tipi (kolon)]
[MODIFY
(kolon datatipi [DEFAULT değer] [NOT NULL]) , …]
[DROP
[CONSTRAINT açıklama] tipi (kolon)]
[ENABLE
| DISABLE CONSTRAINT açıklama]
ADD Yeni
bir kolon ekler.
MODIFY
Kolonun içeriğini, uzunluğunu ve tipini değiştirir. Bunun için kayıtların
değeri null olmalıdır.
DROP
Kolonu siler.
Kolon
Tabloda itlem yapılacak kolon adıdır.
Datatipi
Kolonun alacağı tipi belirler.
DEFAULT
değer Kolonun ilk alacağı değerdir. Kolon hiç değer atanmaz ise
burada değer ile ifade edilen sabit veri aktarılır.
ENABLE
Unique veya primary key indexlerin otomatik yaratılmasını sağlar. Bütün
kayıtların tanımlanan unique veya primary key tanımına uyması gerekir.
DISABLE
Unique veya primary key tanımını kaldırır.
Örnek
: Personel tablosuna ek maas isminde 15 uzunluğunda bir kolon yaratalım. İlk
değer 0 olsun.
ALTER
TABLE Personel
ADD
(ekmaas number(15) DEFAULT 15)
Örnek
: Personel tablosundaki pers_id ile departman tablosundaki dept_id arasında
FOREIGN KEY kuralım.
ALTER
TABLE Personel
ADD
CONSTRAINT personel_dept_id_fk
FOREIGN
KEY (dept_id)
REFERENCES
personel(pers_id)
Örnek
: Personel tablosundaki maas kolonundaki alan uzunluğunu 15’e çıkaralım.
ALTER
TABLE Personel
MODIFY
(maas number(15))
Örnek
: Personel tablosundaki maas kolonu silinsin.
ALTER
TABLE Personel
DROP
(maas number(15))
Örnek:
Personel tablosundaki personel_id primary key için index yaratılması
otomatikleştirelim;
ALTER
TABLE Personel
ENABLE
CONSTRAINT Personel_id_pk
DROP
TABLE : Tabloyu fiziksel olarak siler. Rollback komutu ile silinen
tablo geri getirilemez. Tabloyu ancak yetkisi olan kullanıcı silebilir.
Yazılımı;
DROP
TABLE table
[CASCADE
CONSTRAINTS]
Örnek:
Personel tablosunu silelim;
DROP
TABLE Personel
RENAME
..TO.. : Objelerin ismini değiştirmek için kullanılır. Otomatik
olarak commit olur. Tabloyu ancak yetkisi olan kullanıcı silebilir.
Yazılımı;
RENAME
eski_isim TO yeni_isim
Örnek:
Personel tablosunun adını pers olarak değiştirelim;
RENAME
personel TO pers
TRUNCATE
TABLE : Tablodaki tüm kayıtları siler. Delete komutu gibi
olmasına karşın o komuttan çok daha hızlı silme işlemi yapar. Rollback komutu
ile silinen kayıtlar geri getirilemez. Otomatik olarak commit olur. Tabloyu
ancak yetkisi olan kullanıcı silebilir.
Yazılımı;
TRUNCATE
TABLE table
Delete
komutu ile Truncate arasındaki en önemli fark; Delete komutu kayıtları silmek
için kayıtlarda boşluk bırakır. Truncate ise tamamen kayıtları temizler, yani
başa sarar.
Örnek:
Personel tablosundaki tüm kayıtları silelim;
TRUNCATE
TABLE Personel
COMMENT
ON TABLE : Tablo veya kolonların içeriği hakkında açıklayıcı bilgi
verilir. 2000 byte açıklama alanı girilebilir.
Yazılımı;
COMMENT
ON TABLE table | COLUMN table.kolon
IS
‘açıklama’
Örnek
: Personel tablosu açıklaması ‘Başak Sigorta’da çalışan kişiler’ olarak not
düşelim;
COMMENT
ON TABLE personel
IS
‘Başak Sigorta’da çalışan kişiler’
Örnek
: Personel tablosundaki pers_id kolonun açıklaması ‘Personel numarası’ olarak
not düşelim;
COMMENT
ON COLUMN personel.pers_id
IS
‘Personel numarası’
ALL_COL_COMMENTS
Yetkili olan kullanıcının kolonlarının açıklayıcı notları listelenir.
USER_COL_COMMENTS
Tüm kullanıcıların kolonlarının açıklayıcı notları listelenir.
ALL_TAB_COMMENTS
Tüm kullanıcıların tablolarının açıklayıcı notları listelenir.
USER_TAB_COMMENTS
Yetkili olan kullanıcının tabloları için açıklayıcı notları listelenir.
Otomatik Numara Üretimi(Sequence)
Yaptığı
iş unique sayılar üretmektir. Belli oranlarda arttırmalar yapılmakta
kullanılır. Her çağrıldığında yeni bir sayı üretir. Extra bir hesaplama
yapılmadan, seri olarak tanımlandığı şekilde rakamlar üretir. Sayıları cacheden
okuduğu için çok hızlı sonuç üretir.
Yazılımı;
CREATE
SEQUENCE kolon
[INCREMENT
BY n]
[START
WITH n]
[MAXVALUE
n | NOMAXVALUE]
[MINVALUE
n | NOMINVALUE]
[CYCLE
| NOCYCLE]
[CACHE
n | NOCACHE]
INCREMENT
BY n Sayının artış miktarı belirtilir. Varsayılan değer 1’dir.
Birer birer sayı arttırılır.
START
WITH n Numaranın üretileceği başlangıç numarasıdır. Varsayılan
değer 1’dir.
MAXVALUE
n Numaranın alabileceği maksimum rakam yazılır. NOMAXVALUE
ile bitiş numarası verilmez. Max = 1027
MINVALUE
n Numaranın alabileceği minimum rakam yazılır. NOMINVALUE
ile başlangıç numarası verilmez. Min = 1
CYCLE
| NOCYCLE Maxvalue değeri kadar işlem yapıldıktan sonra işlemi
tekrardan başlatır.Varsayılan değer NOCYCLE’dır.
CACHE
Cache sayısı kadar sayıyı hafızaya gönderir. Varsayılan değer
NOCACHE=20’dir.
Örnek:
Personel departmanının pers_id kolonunu 10’dan 50’ye kadar 2’şer 2’şer
arttıralım;
CREATE
SEQUENCE pers_id
INCREMENT
BY 2
START
WITH 10
MAXVALUE
50
NOCYCLE
NOCACHE
Örnek:
Personel departmanının pers_id kolonunu birer birer arttıralım;
CREATE
SEQUENCE pers_id
INCREMENT
BY 1
START
WITH 1
NOMAXVALUE
NOCYCLE
NOCACHE
USER_SEQUENCES
: Sequences’in en son durumu gösterir.
Yazılımı;
SELECT
sequence_name, min_value, max_value, increment by, last_number
FROM
user_ sequences
Sequence_name
İşlemlerin tanımlandığı isimdir.
Min_value
Sayının aldığı min değerdir.
Max_value
Sayının aldığı max değerdir.
Increment_by
Sayının aldığı artış miktarının gösterir.
Cycle_flag
İşlemin tekrar yapılması isteniyorsa Y, istenmiyorsa N değerini alır.
Cache_size
Hazıfazadaki cache sayısıdır.
Last_number
Numaranın alacağı değerdir
NEXTVAL
: En son aldığı sayının bir sonra alacağı değeri gösterir.
Örnek:
Personel tablosuna pers_id kolonuna otomatik değerler tayarak kayıt edelim;
INSERT
INTO personel
VALUES
(pers_id.NEXTVAL,’Kazım’,’Sarıkaya’)
CURRVAL
: O anki sayısal değeri gösterir. Eğer hiç nextval fonksiyonu
kullanılmamışsa değeri boş değer gelir.
Örnek:
pers_id kolonunun o anki alacağı değeri seçelim;
SELECT
pers_id.CURRVAL
FROM
DUAL
ALTER_SEQUENCE
: Değişiklik bir yerden başlanacaksa önce drop edilir, sequence işlemini
değiştirir.
Yazılımı;
ALTER
SEQUENCE kolon
[INCREMENT
BY n]
[MAXVALUE
n | NOMAXVALUE]
[MINVALUE
n | NOMINVALUE]
[CYCLE
| NOCYCLE]
[CACHE
n | NOCACHE]
DROP_SEQUENCE
: Kolon için yaratılan işlemleri siler.
Yazılımı;
DROP
SEQUENCE kolon
View
Bir
tablo üzerinde sorgulama yapılması için kullanılan nesnedir. Fiziksel olarak
herhangi bir yerde saklanmaz. Avantajları;
- Database
erişimini kısıtlar. Böylece sadece sorgulanan verileri gözükür.
- Sorgulamaları
kolaylaştırabilir.
- Datayı
bağımsız olarak gösterebiliriz.
Yazılımı;
CREATE
[OR REPLACE] [FORCE | NOFORCE]
VIEW
view_adi [alias]
AS
subquery
[WITH
CHECK OPTION [CONSTRAINT constraint]]
[WITH
READ ONLY]
FORCE
Hata durumu oluşursa gözardı ettirilir. NOFORCE ise gözardı edilmez.
View_adi
Yaratılan view sorgu adıdır..
Alias
Yaratılan işlemin adıdır.
WITH
CHECK OPTION [CONSTRAINT View objesine hatalı işleme yapılmasını
engeller.
Örnek:
Departman numarası 41 olan peroneller için perview isminde bir view olşturalım;
CREATE VIEW persview
AS
SELECT *
FROM
personel
WHERE
dept_id=41
WITH
CHECK OPTION CONSTRAINT empview_ck;
Departman
id’si 16 olan personellerin departman numarasını 38 yapalım;
UPDATE
persview
SET
dept_id=38
WHERE
id=16;
Bu
durumda bu değişiklik tabiki yapılamaz.
WITH
READ ONLY View objesinin sadece okuma amaçlı olduğu belirtilir.
Farklı bir işlem yapıldığında bunu engeller. Aslında kayıtlar üzerinde
değişiklik yapılmasını engeller.
Örnek:
Departman numarası 45 olan peroneller için perview isminde bir view olşturalım;
CREATE VIEW persview
AS
SELECT *
FROM
personel
WHERE
dept_id=41
WITH
READ ONLY;
Departman
id’si 10 olan personellerin silinmesini sağlayalım;
DELETE
FROM persview
WHERE
id=10;
Bu
durumda işlemi keser ve uyarı verir.
USER_VIEWS
: Data dictionary tablosunda view tanımları bulunur. View adı, text uzunluğu
ve text’I saklar.
VİEW_NAME
Kullanıcıya ait view adlarının tutar.
TEXT_LENGTH
Sql ifadenin uzunluğudur.
TEXT
Sql ifadedir.
DROP
VİEW : Yaratılan view objesini siler.
Yazılımı;
DROP
VIEW view_adı
INDEX YARATMA
Indexler,
bir tablonun istenilen kolonlarına daha hızlı erişim olanağı sağlamak için
kullanılır. Tablodaki kayıtlar üzerinde giriş/çıkış işlemleri yapılırken dataya
daha hızlı ulaşılması sağlanır. Primary key tanımlanan kolonlar için otomatik
olarak index yaratılır. Index en fazla 16 kolondan oluşur. Bir kolon tipi long
veya long raw olamaz.
Yazılımı;
CREATE
INDEX index_adi
ON
tablo_adı(kolonlar)
Örnek:
Personelin adına ve soyadına göre index oluşturalım;
CREATE
INDEX personel_inx
ON
personel(ad,soyad);
Böylece
ad kolonu öncelikli olmak kaydıyla birlikte soyadına göre sıralama yapar, yani
index oluşturur. Önce ada göre sıralar, eğer aynı isimden birden fazla kayıt
oluşursa bu sefer soyad kolonundaki değerlere göre sıralama oluşturur.
Index
yaratabilmek için;
- Index
yaratılacak tablonun var olması gereklidir,
- Index
yaratma hakkına sahip olmalıdır,
- Limitsiz
tablespace hakkına sahip olmalıdır.
Index
yaratılma ihtiyacı aşağıdaki koşullar oluştuğunda belirir;
- Where
ifadesi ile sık sık kullanılan kolonlar kullanılıyorsa,
- Join ile
birleştirme işlemi yapıldığında,
- Kolon
değerleri geniş aralıkta ise,
- Büyük
rakamlı kolonların içinde null değerler bulunuyorsa.
Index
yaratılmama ihtiyacı aşağıdaki koşullar oluştuğunda belirir;
- Tablo küçük
ise,
- Tablodaki
bazı kolonlara sık sık ihtiyaç duyulmadığında,
- Tabloda sık
sık değişiklikler yapılıyorsa.
USER_INDEXES
İndex isimlerini ve unique olup olmadığı bilgilerini saklar.
Örnek:
Personel tablosuna ait index dosyalarını listeleyelim;
SELECT
ic.index_name,ic.column_name,ic.colum_position,ix.uniqueness
FROM
user_indexes ix, user_ind_columns ic
WHERE
ic.index_name=ix.index_name
AND
table_name=’Personel’;
DROP
INDEX Yaratılan indexleri veri tabanından yok etmek için
kullanılır.
DATABASE GÜVENLİĞİ
Database
güvenliği için kullanıcılar tanımlanır. Her kullanıcının bir şifresi bulunur.
Kullanıcılara belirli yetkiler verilir.
Sistem
ve data güvenliği olmak üzere iki kısımda incelenir. Sistem güvenliği içinde
kullanıcıya yaratma, değiştirme, silme vb. yetkiler tanımlanır. Data güvenliği
için ise datalar başka bir ortama yedekleme(backup) yapılarak sağlanır.
Database
level aşamaları ile güvenlik sınırlanır. Eğer yüksel level yetkisi varsa yeni
kullanıcı(veya tablolar) yaratabilir veya silinebilir. Tabloların yedekleri
alınabilir.
CREATE
USER Database üzerinde işlemler yapılabilmesi için kulanıcı
yaratılır.
Yazılımı;
CREATE
USER user_adı
IDENTIFIED
BY tifre
DROP
USER Databaseden kullanıcıyı siler.
Yazılımı;
DROP
USER user_adı
GRANT
(Yetki) Kullanıcıya yetki verilmesi için kullanılır.
Yazılımı;
GRANT
yetkiler_roller
TO
kullanıcı [PUBLIC]
[WITH
GRANT OPTION]
[PUBLIC]
WITH
GRANT OPTION Sistem haklarını veya rollerini diğer kullanıcılara vermeyi
sağlar. Bir rolü bu şekilde belirlersek kullanıcı rolleri değiştirebilir veya
silebilir.
PUBLIC
Sistem haklarını veya rollerini tüm kullanıcılara vermeyi sağlar.
Örnek:
Personel tablosunun pers_id,ad kolonlarına webserver kullanıcısı için düzeltme
yetkisi verelim;
GRANT
select(pers_id,ad)
ON
Personel
TO
webserver
Örnek:
Personel tablosuna webserver kullanıcısı için seçme yetkisi verelim;
GRANT
select
ON
Personel
TO
webserver
Örnek:
Kazım kullanıcısı, webserver kullanıcısının personel tablosu için kayıt etme ve
sorgulama yetkilerini verelim;
GRANT
select,insert
ON
personel
TO
webserver
WITH
GRANT OPTION
Örnek:
Kazım kullanıcısının personel tablosunu tüm kullanıcılara sorugulama
yapabilmesini sağlayalım;
GRANT
select
ON
kazim.personel
TO
PUBLIC
Grant
yetkisi ile kullanıcılara aşağıdaki tablodaki yetkiler verilebilir
Objeler
|
Table
|
View
|
Sequences
|
Procedure
|
ALTER
|
?
|
?
|
||
DELETE
|
?
|
?
|
||
EXECUTE
|
?
|
|||
INDEX
|
?
|
|||
INSERT
|
?
|
?
|
||
REFERENCES
|
?
|
|||
SELECT
|
?
|
?
|
?
|
|
UPDATE
|
?
|
?
|
CREATE
ROLE Kullanıcıya yetki olarak verilen rollerdir.
Yazılımı;
CREATE
ROLE rol;
Örnek:
CREATE
ROLE Manager;
GRANT
create table, create view TO Manager;
GRANT
Manager TO webserver;
Manager
isminde rol tanımlandı. Tablo ve view yaratma yetkisi verildi. Bu yetkiler
Webserver isminde kullanıcıya aktarıldı.
Kullanıcının
şifresini değiştirmek için;
ALTER
USER user_adı IDENTIFIED BY şifre
REVOKE
Verilen rolleri geri alır.
Yazılımı;
REVOKE
rol
ON
tablo
FROM
kullanıcı
Örnek:
webserver kullanıcısının şifre tablosuna kayıt etme,düzeltme ve sorgulama
yetkilerini kaldıralım,
REVOKE
select,insert,update
ON
tifre
FROM
webserver
CREATE
SYNONYM Bir objenin aynısının kopyasının alarak kendi userında
yaratır.
Yazılımı;
CREATE
[PUBLIC ] SYNONYM obje_adı
FOR
kullanıcı.obje
PUBLIC
Tüm kullanıcıların yetkilerini alır.
Örnek:
Webserver’ın personel tablosunun aynısını kendi alanımızda yaratalım
CREATE
SYNONYM personel
FOR
webserver.personel
DROP
SYNONYM Bir objenin aynısının kopyasının alarak yaratılan objeyi
siler.
Yazılımı;
DROP
[PUBLIC ] SYNONYM obje_adı
ADVANCED SQL
IN
Liste içinde belirlenen değerlerdir.
NOT
IN Liste içinde olmayan tüm değerlerdir.
ANY
Alt sorgulamadan seçilen değerlerden en az biri karşılaştırılır.
ALL
Alt sorgulamadan seçilen değerlerden hepsi karşılaştırılır.
0 Yorumlar
Bizimle fikirlerinizi paylaşabilirsiniz.