En basit SQL sorgu örneklerinin olduğu bir konu olacak.
SELECT SORGULARI
SQL sorgularının temelini oluşturuyorlar. Her sorguda varlar.
SELECT * = Tüm kayıtların istenmesini sağlıyor.
FROM users = users tablosunun...
SELECT * FROM users = Yaptığımızda users tablosunun içinde bulunan tüm kayıtları istiyoruz veri tabanından.
SELECT username FROM users = Basit bir listeleme işlemi. users tablosundaki tüm username kayıtlarını alıyor.
SELECT * FROM users WHERE ID = '3' = Users tablosunda ID değeri 3 olan veriyi getirir.
SELECT * FROM users WHERE yas = '10' = users tablosunda yas değeri 10 olan kayıtları getirir.
NOT: Bu sorgulardan önce tablolar oluşturulmalı ve içine veriler yüklenmelidir.
SELECT * FROM users yas = '10' AND sinif = '4/a' = users tablosunda bulunan yas değeri 10 olan ve sinifi 4/a olan kayıtları veri tabanından istedik.
NOT: 've' dediğimiz için AND kullandık eğer veya deseydik OR, ya da deseydik XOR kullanacaktık.
SELECT username+' '+userpass as 'usernameandpass' FROM users = users tablosunun içinde olan tüm username ve userpass kayıtlarını usernameandpass adı altında birleştirilip bize gösterilmesini istedik.
SELECT * FROM users WHERE username like 'A%' = users tablosunda bulunan username kayıtlarında A ile başlayan verileri istedik. Like benzer anlamına geliyor bu tarz durumlarda işe yarıyor. % ise A dan sonra ne gelirse gelsin A ile başlaması yeterli gibi bir anlam katıyor.
SELECT * FROM users WHERE ıd BETWEEN 10 AND 50 = users tablosundaki tüm kayıtlardan ıd si 10 ile 50 arasında olan kayıtları istedik.
ORDER BY ( SIRALAMA İŞLEMLERİ )
Order BY where ile benzer görevi görüyor. Ama her zaman WHERE'den sonra gelir, en sonda order by olur. Where'in olduğu yerde order by bir sonraki planda görev alır. SQL İnjectioncular bunu bilir sanırsam, Manuel SQL inj kullanırken WHERE kullanmıyoruz çünkü zaten web sitesinde bir WHERE çalışıyor. Order By kullanıyoruz veri tabanı önce WHERE'yi okuyor ve isteği çıkarıyor daha sonra Order By'ı okuyor ve isteği çıkarıyor.
SELECT * FROM users ORDER BY ıd = users tablosundaki tüm kayıtların ıd değerlerine bakar ve küçükten büyüğe doğru sıralar.
SELECT * FROM users ORDER BY ıd DESC = Aynı işlemi büyükten küçüğe sıralamak için yapar DESC.
SELECT * FROM users ORDER BY ıd ASC = Küçükten büyüğe İÇİN asc kullanılır. ASC'a gerek olmayabilir Order By'ın standartı küçükten büyüğe sıralamak içindir.
TOP Sorguları
SELECT TOP 10 * FROM users = users tablosunda bulunan ilk 10 kayıtı alır.
NOT: Top en iyi görevi görmez. Ona benzer bir görev görmesini istiyorsanız şu sorgular kullanılabilir;
SELECT TOP 1 * FROM users ORDER BY uno DESC = users tablosundaki uno verilerini büyükten küçüğe sıralıyor daha sonra TOP 1 ile en yukarda olanı alıyor, en yüksek no'su olanı getirdi bu sayede.
NEWİD Sorguları
SELECT * FROM users ORDER BY NEWİD() = Sorgu her çalıştırıldığında users tablosundaki tüm kayıtları rastgele sırayla getirir.
SELECT TOP 1 * FROM users ORDER BY NEWİD() = Rastgele users tablosundaki verileri getirir ve en üstdekini gösterir sadece. Çekiliş gibi bir şey.
GROUP BY Sorguları
Bir okul veritabanı olsun sınıflar ve öğrenciler vs.
SELECT sinif, COUNT(*) FROM ogrenci GROUP BY sinif = sınıfların içinde kaç kayıt var buna bakıyor. Yani bu sorgu sayesinde bir sınıfın içinde kaç öğrenci var görebiliyoruz düşünülebilir.
Basit SQL Fonksiyonları
SELECT SORGULARI
SQL sorgularının temelini oluşturuyorlar. Her sorguda varlar.
SELECT * = Tüm kayıtların istenmesini sağlıyor.
FROM users = users tablosunun...
SELECT * FROM users = Yaptığımızda users tablosunun içinde bulunan tüm kayıtları istiyoruz veri tabanından.
SELECT username FROM users = Basit bir listeleme işlemi. users tablosundaki tüm username kayıtlarını alıyor.
SELECT * FROM users WHERE ID = '3' = Users tablosunda ID değeri 3 olan veriyi getirir.
SELECT * FROM users WHERE yas = '10' = users tablosunda yas değeri 10 olan kayıtları getirir.
NOT: Bu sorgulardan önce tablolar oluşturulmalı ve içine veriler yüklenmelidir.
SELECT * FROM users yas = '10' AND sinif = '4/a' = users tablosunda bulunan yas değeri 10 olan ve sinifi 4/a olan kayıtları veri tabanından istedik.
NOT: 've' dediğimiz için AND kullandık eğer veya deseydik OR, ya da deseydik XOR kullanacaktık.
SELECT username+' '+userpass as 'usernameandpass' FROM users = users tablosunun içinde olan tüm username ve userpass kayıtlarını usernameandpass adı altında birleştirilip bize gösterilmesini istedik.
SELECT * FROM users WHERE username like 'A%' = users tablosunda bulunan username kayıtlarında A ile başlayan verileri istedik. Like benzer anlamına geliyor bu tarz durumlarda işe yarıyor. % ise A dan sonra ne gelirse gelsin A ile başlaması yeterli gibi bir anlam katıyor.
SELECT * FROM users WHERE ıd BETWEEN 10 AND 50 = users tablosundaki tüm kayıtlardan ıd si 10 ile 50 arasında olan kayıtları istedik.
ORDER BY ( SIRALAMA İŞLEMLERİ )
Order BY where ile benzer görevi görüyor. Ama her zaman WHERE'den sonra gelir, en sonda order by olur. Where'in olduğu yerde order by bir sonraki planda görev alır. SQL İnjectioncular bunu bilir sanırsam, Manuel SQL inj kullanırken WHERE kullanmıyoruz çünkü zaten web sitesinde bir WHERE çalışıyor. Order By kullanıyoruz veri tabanı önce WHERE'yi okuyor ve isteği çıkarıyor daha sonra Order By'ı okuyor ve isteği çıkarıyor.
SELECT * FROM users ORDER BY ıd = users tablosundaki tüm kayıtların ıd değerlerine bakar ve küçükten büyüğe doğru sıralar.
SELECT * FROM users ORDER BY ıd DESC = Aynı işlemi büyükten küçüğe sıralamak için yapar DESC.
SELECT * FROM users ORDER BY ıd ASC = Küçükten büyüğe İÇİN asc kullanılır. ASC'a gerek olmayabilir Order By'ın standartı küçükten büyüğe sıralamak içindir.
TOP Sorguları
SELECT TOP 10 * FROM users = users tablosunda bulunan ilk 10 kayıtı alır.
NOT: Top en iyi görevi görmez. Ona benzer bir görev görmesini istiyorsanız şu sorgular kullanılabilir;
SELECT TOP 1 * FROM users ORDER BY uno DESC = users tablosundaki uno verilerini büyükten küçüğe sıralıyor daha sonra TOP 1 ile en yukarda olanı alıyor, en yüksek no'su olanı getirdi bu sayede.
NEWİD Sorguları
SELECT * FROM users ORDER BY NEWİD() = Sorgu her çalıştırıldığında users tablosundaki tüm kayıtları rastgele sırayla getirir.
SELECT TOP 1 * FROM users ORDER BY NEWİD() = Rastgele users tablosundaki verileri getirir ve en üstdekini gösterir sadece. Çekiliş gibi bir şey.
GROUP BY Sorguları
Bir okul veritabanı olsun sınıflar ve öğrenciler vs.
SELECT sinif, COUNT(*) FROM ogrenci GROUP BY sinif = sınıfların içinde kaç kayıt var buna bakıyor. Yani bu sorgu sayesinde bir sınıfın içinde kaç öğrenci var görebiliyoruz düşünülebilir.
Basit SQL Fonksiyonları
Kod:
[CENTER][FONT=Courier New][SIZE=4][COLOR=White]CREATE TABLE users([/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=White]id INT,[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=White]username VARCHAR(50) NOT NULL,[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=White]userpass VARCHAR(50) NOT NULL,[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=White])[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=White]INSERT INTO dbo.users([/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=White]id[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=White]username[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=White]userpass[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=White])[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=White]VALUES[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=White](1,'xuser','xpass')[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=White](2,'xuserx','xpassx')[/COLOR][/SIZE][/FONT]
[FONT=Courier New][SIZE=4][COLOR=White](3,'xxuserxx','xxpassxx')[/COLOR][/SIZE][/FONT]
[/CENTER]
Basit bir şekilde tablolar oluşturduk içine veriler koyduk.
SELECT * FROM users = sorgusunu çalıştırdığımızda tüm kayıtların geldiğini biliyoruz.
RANK Fonksiyonu
Aslında Rank görevi görüyor gibi..
SELECT *,RANK() OVER (ORDER BY username DESC) AS userno FROM dbo.users
userno'ları büyükten küçüğe sıraladı ve userrank adı altında verdi. RANK OVER'ın gördüğü görev ise şu userrank'ın altında 1 sayısı ile başladı daha sonra solundaki userno değerine baktı bir alta indi tekrar baktı eğer solundaki değer yine aynıysa 1 sayısı ile devam etti daha sonra bir alta indi eğer aynı değilse üstünde aynı olan 2 değer olduğu için 1+1'den farklı olan kısma userrank olarak 2 verdi. Bu sorguyu daha iyi anlamak için bir SQL server'ında çalıştırıp bakabilirsiniz.
not: userno denen bir alan eklemedik userno olarak INT (ıntegar) olan bir alan da açmanız gerek.
PARTITION BY İşlemi
SELECT *,RANK() OVER (PARTITION BY username ORDER BY userpass DESC) AS PartitionByRank FROM dbo.users
username'lere bakıyor, eğer dbo.users içinde o username'den bir tane varsa aynısından yoksa ona 1 veriyor, eğer aynısı varsa bir arttırıyor 2 veriyor böyle devam ediyor farklı veriyi görünce tekrar 1'den başlıyor.
DENSE RANK Sorguları
SELECT *,DENSE_RANK() OVER (ORDER BY userno DESC) UsernoDenseRank FROM dbo.users
Bu sorguda aynı olan userno'lara 1 veriyor devam ediyor aynı oldukça 1 olarak, farklı userno gördüğünde bir arttırıyor 2 veriyor. Aynı oldukça 2 devam ediyor farkı gördüğünde 3 veriyor... bu şekilde birer birer arttırarak devam ediyor.
SELECT *,ROW_NUMBER() OVER (ODER BY userno DESC) AS RowNumberDegeri FROM dbo.users
Bu sorguda userno'lara baktı büyükten küçüğe şekilde sıraları ve onlara rownumber değerleri verdi. Bu değerlerde 1,2,3,4......11,12 diye gidiyor. Yani 1'den sıralamaya başladı. Userno aynı olsa bile arttırarak devam etti rownumber'ı. Eğer aynı olunca aynı sayısının verilmesi isteniyorsa ORDER BY yanına bir PARTITION BY eklenir ve PARTITION BY ile ORDER BY arasına bir değer girilir userpass, username gibi..
NOT: users örnekleri bu örnekler için aslında pek iyi değil çünkü neden bir veritabanında aynı username'den olsun veya aynı userno'dan.. Okul, sınıf örnekleri daha iyi olabilir anlamak için.
Konum bu kadardı devam ettirmeyi düşünüyorum.