SQL Proglamlama

DarkDesert

Kıdemli Üye
17 Eki 2011
2,043
1
TurkHackTeam
SQL
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.)
Foreign Key : Primary key gibidir. Fakat null değerler alabilir.
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;
i.
ii. İyi bir analiz
iii.
iv. Analizin tablolara göre dizaynı ve aralarındaki ilişkiler
v.
vi. Akış şeması ve döküman hazırlanması
vii.
viii. Test edilmesi
ix.
x. Ü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.

________________________________________
SQL de değişken tanımlamak
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.


________________________________________
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ı;
i.
ii. Parantezler (,)
iii.
iv. *,/,+,-
v.
vi. 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.

________________________________________
Order by komutu

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 komutu
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 komutu
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 komutu
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 komutu
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 komutu
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.

________________________________________


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;
9.  Rakamdır.
1.  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;
1. sorgu : Kazım' ın departman numarası kaçtır?
2. SELECT dept_id,name
FROM Personel
WHERE name='Kazım'
3. sorgu : Departman numarası 38 olan kişilerin listesinden adı kazım olan var mı incele?
4. SELECT dept_id,name
FROM Personel
WHERE dept_id=38
5. 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]
İçeriği görüntülemek için üye olmalısınız.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.