Basit SQL Sorgu Örnekleri

ѕeleɴια

Kıdemli Üye
18 May 2018
2,620
905
ZYZZ
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ı

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.











 

blackduck0

Yeni üye
14 Ocak 2021
42
0
B̶a̶s̶i̶t̶ ̶S̶Q̶L̶ ̶S̶o̶r̶g̶u̶ ̶Ö̶r̶n̶e̶k̶l̶e̶r̶i̶


Basit T-SQL Sorgu Örnekleri
 
Ü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.