SQL, ilişkisel bir veritabanındaki verilerin alınması ve yönetimi için tasarlanmış bir veritabanı dilidir. SQL Yapılandırılmış Sorgu Dili anlamına gelir. Bu yazıda size SQL’de sıklıkla kullanılan komutların yazımlarını ve kullanım örneklerini yazacağım.
Bu bilgiler bir SQL için gerekli olan konuların çoğunu ve nasıl çalıştığını anlamanızı sağlayacak.
SQL yazım kuralları , tüm temel SQL sözdizimini kavrayıp, SQL diline hızlı bir başlangıç yapmanızı sağlayacaktır.
Bu yazı ile sık kullanılan SQL komutlarına özet olarak ulaşma şansı bulacaksınız.
Ayrıca Yazının sonunda bu sayfada anlatılan SQL Komutlarına ait onlarca örneği barındıran SQL Çalışma Soruları ve Cevaplarına ait linke tıklayabilirsiniz.
Tüm bu SQL komutları , SELECT, INSERT, UPDATE, DELETE, ALTER, DROP, CREATE, USE, SHOW gibi anahtar kelimelerin herhangi biriyle başlar ve noktalı virgülle (;) biter.
Yukarıdaki büyük harfler ile yazılmış olmasına rağmen SQL dili büyük küçük harf duyarsızdır. UPDATE, Update yada update aynı anlamları ifade etmektedir.
SQL Komutları Yazım Kuralları
SQL SELECT Kullanımı
SQL SELECT Komutu: SQL SELECT deyimi, veritabanı tablosundan verileri tablo şeklinde almak için kullanılır. Bu sonuç tabloları da sonuç kümeleri olarak adlandırılır. Bütün SQL dillerinde kullanımı aynıdır.Aşağıda SELECT Komutu kullanımları ve örnekleri bulunmaktadır.
SQL Server / MySQL / SQLite / Oracle:
1 2 3 4 5 6 7 8 9 |
SELECT sutun1, sutun2, ..., sutunN FROM tablo_adi; |
sutun1, sutun2, … değerleri istediğimiz tablonun alanlarını göstermektedir.
Tüm SQL Sütunlarını alma: Tüm satırları çekmek için yazılması gereken SQL SELECT komutu ise şu şekilde olmalıdır.
SQL Server / MySQL / SQLite / Oracle:
1 2 3 |
SELECT * FROM tablo_adi |
SQL DISTINCT Kullanımı
SQL DISTINCT Kullanımı :SELECT DISTINCT deyimi, yalnızca farklı (farklı) değerleri döndürmek için kullanılır.
Bir tablonun içinde, bir sütun genellikle birçok yinelenen değer içerir; ve bazen sadece farklı (farklı) değerleri listelemek istersiniz. Böyle durumlarda Distinct Komutu kullanılır. Kullanımı aşağıdaki gibidir.
SQL Server / MySQL / SQLite / Oracle:
1 2 3 4 5 6 7 8 9 |
SELECT DISTINCT sutun1, sutun2, ...., sutunN FROM tablo_adi; |
SQL SELECT WHERE Kullanımı
SQL SELECT WHERE Kullanımı : WHERE cümlesi tablodaki kayıtları filtrelemek için kullanılır.
WHERE yan tümcesi, yalnızca belirtilen bir koşulu yerine getiren kayıtları ayıklamak için kullanılır. Belitilen koşulu yerine getiren kayıtların listelenmesi için kullanılan WHERE komutu kullanımı aşağıdaki gibidir.
SQL Server / MySQL / SQLite / Oracle:
1 2 3 4 5 6 7 8 9 10 11 |
SELECT sutun1, sutun2, ...., sutunN FROM tablo_adi WHERE sart_ifadesi; |
SQL AND / OR / NOTKullanımı
WHERE yan tümcesi AND, OR ve NOT işleçleri ile birleştirilebilir.
AND ve OR işleçleri, birden çok koşulu temel alarak kayıtları filtrelemek için kullanılır:
AND operatörü, AND ile ayrılan tüm koşullar DOĞRU ise bir kayıt görüntüler.
OR operatörü, OR tarafından ayrılan koşullardan herhangi biri DOĞRU ise bir kayıt görüntüler.
NOT operatörü koşullar DOĞRU OLMADIĞINDA bir kayıt görüntüler.
SQL AND, OR, NOT Kullanımı aşağıdaki bibidir.
SQL Server / MySQL / SQLite / Oracle:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
SELECT sutun1, sutun2, ...., sutunN FROM tablo_adi WHERE ŞART1 {AND|OR} ŞART2 {AND|OR} ŞARTN |
Örnek:sirket tablosunda yaşı 25′ ten büyük ve maaşı 6500′ e büyük eşit olanları listeleme
1 2 3 |
SELECT * FROM sirket WHERE yas>= 25 AND maas>= 6500; |
Yukarıdaki örnekte AND yerine OR kullanılsaydı, iki şarttan birini yerine getiren kayıtlar listelenmiş olacaktı. Şöyle ki maaşına bakılmaksızın yaşı 25′ ten büyük olan tüm kayıtlar ve yaşına bakılmaksızın maaşı 6500′ den büyük olan tüm kayıtlar listelenecekti.
SQL SELECT IN Kullanımı :
SQL SELECT IN Kullanımı : IN operatörü, bir WHERE maddesinde birden çok değer belirtmenize izin verir.
IN komutu genellikle birden fazla OR koşulu kullanılacağı zaman SQL yazımını kolaylaştırmak için kullanılır.
Genel kullanımı ve örneği alttaki kodlardan görebilirsiniz.
SELECT IN eşleşen kayıtlar için kullanılabileceği gibi, NOT IN ile de eşleşmenin dışındaki kayıtları çekmek için kullanılabilir.
SELECT IN ile başka bir SQL SELECT ifadesinden dönen değeri de seçip IN içinde kullanmak mümkündür.
Bilgi: İçerideki SELECT ifadesinden dönen kaydın tek değer olması gerektiğine dikkat edilmesi de gerekir.
SQL Server / MySQL / SQLite / Oracle:
1 2 3 4 5 6 7 8 9 10 11 |
SELECT sutun1, sutun2, ...., sutunN FROM tablo_adi WHERE sutun_adi IN(deger1,deger2,degerN) |
1 2 3 4 5 6 7 8 9 10 11 |
SELECT sutun1, sutun2, ...., sutunN FROM tablo_adi WHERE sutun_adi NOT IN(deger1,deger2,degerN) |
1 2 3 4 5 6 7 8 9 10 11 |
SELECT sutun1, sutun2, ...., sutunN FROM tablo_adi WHERE sutun_adi IN(SELECT sutun FROM diger_tablo) |
Örnek: Musteri tablosunda ülkesi Almanya,Fransa ya da ABD olan kayıtları listeleyelim.
1 2 3 4 |
SELECT * FROM Musteri WHERE Ulke IN ('Almanya', 'Fransa', 'ABD'); |
Yukarıdaki SQL kodlarını OR kullanarakta yapabilirsiniz. OR kullanarak yazılan SQL kodunda 3 tane OR ifadesi olacaktır.
SQL BETWEEN Kullanımı
SQL BETWEEN Kullanımı : BETWEEN operatörü, belirli bir aralıktaki değerleri seçer. Değerler sayı, metin veya tarih olabilir.
BETWEEN operatörü kullanımındafiltrelemeye başlangıç ve bitiş değerleri dahildir.
Ayrıca BETWEEN ifadesinin başına NOT getirilmek şartı ile şartın dışında kalanlar da sorgulanabilir.
1 2 3 4 5 6 |
sutun [ NOT ] BETWEEN deger1 AND deger2 --ifadesinin eşdeğeri aşağıdaki gibidir. sutun >= deger1 AND sutun <= deger2 |
SQL Server / MySQL / SQLite / Oracle:
1 2 3 4 5 6 7 8 9 10 11 |
SELECT sutun1, sutun2, ...., sutunN FROM tablo_adi WHERE sutun_adi BETWEEN deger1 AND deger2 |
SQL LIKE Kullanımı
SQL LIKE Kullanımı : SLIKE işleci bir sütunda belirtilen bir deseni aramak için bir WHERE yan tümcesinde kullanılır. Örnek olarak ilk iki harfi “Ta” olan, ya da 3. harfi Y, 5. harfi K olan gibi..
LIKE operatörü ile birlikte kullanılan iki joker karakter vardır:
% – Yüzde işareti sıfır, bir veya birden çok karakteri temsil eder.
_ – Alt çizgi tek bir karakteri temsil eder
SQL Server / MySQL / SQLite / Oracle:
1 2 3 4 5 6 7 8 9 10 |
SELECT sutun1, ...., sutunN FROM tablo_adi WHERE sutun_adi LIKE {desen} |
Like Komutu Desen kullanımı Örnekleri
LIKE Kullanım Örneği | Açıklama |
---|---|
WHERE sirket LIKE ‘a%’ | “a” harfi ile başlayan kayıtları döndürür. |
WHERE sirket LIKE ‘%a’ | “a” harfi ile biten kayıtları döndürür. |
WHERE sirket LIKE ‘%ya%’ | Herhangi bir pozisyonda ‘ya’ olan herhangi bir değeri bulur. |
WHERE sirket LIKE ‘_r%’ | İkinci karakteri ‘r’ olan kayıtları döndürür. |
WHERE sirket LIKE ‘a_%_%’ | ‘a’ ile başlayan ve en az 3 karakter uzunluğunda olan tüm değerleri bulur. |
WHERE sirket LIKE ‘a%o’ | ‘a’ ile başlayan ve ‘o’ ile biten kayıtları döndürür. |
SQL ORDER BY Kullanımı
SQL ORDER BY Kullanımı : ORDER BY anahtar sözcüğü, sonuç kümesini artan veya azalan sırada sıralamak için kullanılır.
ORDER BY anahtar sözcüğü, kayıtları varsayılan olarak artan sırada sıralar.
Kayıtları azalan sırayla sıralamak için DESC anahtar sözcüğünü kullanın.
ORDER BY komutu birden fazla sütunuda sıralayabilir. Örneğin isimleri artan maaşları azalan sıralama gibi.
SQL Order By Komutu Kullanımı ve Örneği aşağıdaki gibidir.
SQL Server / MySQL / SQLite / Oracle:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
SELECT sutun1, sutun2, ...., sutunN FROM tablo_adi WHERE VARSA SART ORDER BY sutun_adi {ASC|DESC} |
1 2 3 4 5 6 7 8 9 10 11 |
SELECT sutun1, sutun2, sutunN FROM tablo_adi ORDER BY sutunA ASC, sutunB DESC |
SQL GROUP BY Kullanımı
SQL GROUP BY Kullanımı : GROUP BY deyimi genellikle sonuç kümesini bir veya daha fazla sütunla gruplamak için toplama işlevleri (COUNT, MAX, MIN, SUM, AVG) ile kullanılır.
Bilgi: Bir kural değildir ama GROUP BY ile kümelenen alan SELECT ifadesinden sonra kullanılır.
Kümeleme fonksiyonlarına aggregate fonksiyonlar denilmektedir.
SQL Server / MySQL / SQLite / Oracle:
1 2 3 4 5 6 |
SELECT alan_adiA FROM tablo_adi WHERE varsa_sart GROUP BY alan_adiA |
1 2 3 4 5 6 |
SELECT SUM(sutun_adi) FROM tablo_adi WHERE VARSA_ŞART GROUP BY sutun_adi |
1 2 3 4 5 |
SELECT SUM(sutun1), sutun2, sutun3 FROM tablo_adi GROUP BY sutun1, sutun2 |
1 2 3 4 5 6 |
SELECT SUM(sutunA), sutunB, sutunC FROM tablo_adi GROUP BY sutunA, sutunB ORDER BY SUM(sutunA) DESC |
1 2 3 4 5 6 7 |
SELECT AVG(A.sutunC), A.sutunB, B.sutunC FROM tabloA A JOIN tabloB B ON A.tabloAno = B.tabloBno GROUP BY A.sutunC, A.sutunB ORDER BY SUM(A.sutunC) DESC |
SQL COUNT Kullanımı
SQL COUNT Kullanımı : COUNT () komutu , belirtilen bir ölçütle eşleşen satır sayısını döndürür. Örnek olarak maaşı 3000 üzeri olan kayıt sayısı.
SQL Server / MySQL / SQLite / Oracle:
1 2 3 4 5 |
SELECT COUNT(sutun_adi) FROM tablo_adi WHERE VARSA_ŞART |
Örnek: Maası 3000 ve üzeri kayıtların adetini gösterelim.
1 2 3 4 5 |
SELECT COUNT(maas) FROM sirket WHERE maas>=3000 |
SQL SUM Kullanımı
SQL SUM Kullanımı :SUM () komutu, sayısal bir sütunun toplamını döndürür.
SQL Server / MySQL / SQLite / Oracle:
1 2 3 4 5 |
SELECT SUM(sutun_adi) FROM tablo_adi WHERE VARSA_ŞART |
SQL AVG Kullanımı
SQL AVG Komutu Kullanımı : AVG() komutu Belirtilen sütundaki değerlerin ortalamasını getirir.
SQL Server / MySQL / SQLite / Oracle:
1 2 3 4 5 |
SELECT AVG(sutun_adi) FROM tablo_adi WHERE VARSA_ŞART |
SQL HAVING Kullanımı
SQL HAVING Kullanımı : GROUP BY ile gruplanan kayıtları sınırlandırmak için kullanılır.
WHERE şartı bireysel kayıtlar için sınırlandırma yaparken HAVING sadece gruplama için kullanılabilir.
Bilgi: HAVING ve WHERE aynı sorgularda kullanılabilir.
SQL Server / MySQL / SQLite / Oracle:
1 2 3 4 5 6 7 |
SELECT SUM(sutunAdi) FROM tablo_adi WHERE şart GROUP BY sutunAdi HAVING (şart) |
SQL CREATE TABLE Kullanımı
SQL CREATE TABLE Kullanımı : CREATE TABLE ifadesi, bir veritabanında yeni bir tablo oluşturmak için kullanılır.
Aşağıdaki, CREATE TABLE
ifadesinin temel sözdizimini göstermektedir.
Aşağıdaki İfadede;
CREATE TABLE
ifadesi, oluşturulacak yeni tablonun adını ve isteğe bağlı olarak şema adını belirtmek için kullanılır.- Bu ifadeden sonra parantez içindeki ifadeler sütun ya da diğer ifadeyle alan adlarını belirlemek için kullanılır. Genellikle bir tablonun içinde birden fazla sütun bulunmaktadır. Bu durumda , her sütun tanımını virgülle ayırmanız gerekir.
Bir sütun tanımı, sütun adını takip eden veri türü şeklindedir. Örneğin NUMBER, VARCHAR, DATE vb. Daha sonra ise NOT NULL, PRIMARY KEY VB , bir sütun kısıtlaması varsa yazılmalıdır..
SQL Server / MySQL / SQLite / Oracle:
1 2 3 4 5 6 7 8 9 |
CREATE TABLE tablo_adi( sutun1 veri_türü, sutun2 veri_türü, ....... sutunN veri_türü, Tablo_Kısıtları ) |
Örnek:
1 2 3 4 5 6 7 8 9 |
CREATE TABLE OGRENCI( ID int, ad varchar(255), soyad varchar(255), adres cvarchar(255), sehir varchar(255) ); |
SQL DROP TABLE Kullanımı
SQL DROP TABLE Kullanımı : Mevcut SQL Tablosunu kaldırmak için kullanılır. Tablo ve içindeki veriler geri dönüşü olmayacak şekilde silinecektir.
SQL Server / MySQL / SQLite / Oracle:
1 2 3 |
DROP TABLE tablo_adi |
Örnek:
1 2 3 |
DROP Table Ogrenci |
SQL CREATE INDEX Kullanımı :
SQL CREATE INDEX İfadesi, tablolarda dizinler oluşturmak için kullanılır. Oluşturulan diziler ile sorgulama sonuçları veritabanından çok daha hızlı bir şeklide getirilir.
SQL Server Yazım:
1 2 3 4 |
CREATE UNIQUE INDEX index_adı ON tablo_adı ( sutun1, sutun2,...sutunN) |
MySQL Yazım:
SQLite Yazım:
1 2 3 4 |
CREATE INDEX index_name ON table_name (column_name); |
Oracle Yazım:
SQL DROP INDEX Kullanımı :
Oluşturulmuş index değerini kaldırmak için kullanılır. Bir indeks kaldırıldığında, performansın yavaşlatılabileceği veya geliştirilebileceğine dikkat edilmelidir.
SQL Server Yazım:
1 2 3 4 |
ALTER TABLE tablo_adi DROP INDEX index_adi |
MySQL Yazım:
SQLite Yazım:
1 2 3 |
DROP INDEX index_name; |
Oracle Yazım:
SQL TRUNCATE TABLE Kullanımı :
SQL TRUNCATE TABLE komutu, mevcut bir tablodaki tüm verileri silmek için kullanılır.
SQL Server Yazım:
1 2 3 |
TRUNCATE TABLE tablo_adi |
MySQL Yazım:
SQLite Yazım:
Oracle Yazım:
SQL ALTER TABLE Kullanımı :
ALTER TABLE ifadesi, varolan bir tabloda sütun eklemek, silmek veya değiştirmek için kullanılır.
ALTER TABLE ifadesi, varolan bir tablo üzerinde çeşitli kısıtlamalar eklemek ve silmek için de kullanılır.
SQL Server Yazım:
1 2 3 |
ALTER TABLE tablo_adi {ADD|DROP|ALTER COLUMN} sutun_adi {veri_türü} |
MySQL Yazım:
SQLite Yazım:
1 2 3 |
ALTER TABLE database_name.table_name RENAME TO new_table_name; |
Örnek: Aşağıdaki SQLite komutları sirket tablosunu firma olarak yeniden adlandırır.
1 2 3 |
ALTER TABLE sirket RENAME TO firma; |
Oracle Yazım:
SQL ALTER TABLE IDENTITY Kulanımı:
Otomatik artan sayı yapmak için sütun oluşturulurken yapılası gerekiyor.
SQL Server Yazım:
1 2 3 |
ALTER TABLE yazar ADD yazarno INT IDENTITY(1,1) |
MySQL Yazım:
SQLite Yazım:
Oracle Yazım:
SQL INSERT INTO Kullanımı :
SQL INSERT INTO İfadesi, tabloya yeni kayıtlar eklemek için kullanılır.
SQL Server Yazım:
1 2 3 4 |
INSERT INTO tablo_adi( sutun1, sutun2....sutunN) VALUES ( deger1, deger2....degerN) |
MySQL Yazım:
SQLite Yazım:
1 2 3 |
INSERT INTO Tablo_Adı VALUES (value1,value2,value3,...valueN); |
Örnek:
1 2 3 4 |
INSERT INTO sirket(ID,ad,yas,adres,maas) VALUES (1, 'Ali', 32, 'İstanbul', 2000.00 ); |
Oracle Yazım:
SQL UPDATE Kullanımı :
UPDATE komutu, bir tablodaki varolan kayıtları değiştirmek amacıyla kullanılır.
Önemli Not: şart belirtilmediğinde güncellemeden tablodaki tüm kayıtlar etkilenecektir.
SQL Server Yazım:
1 2 3 4 5 |
UPDATE tablo_adi SET sutun1= deger1, sutun2= deger2, ...., sutunN=degerN [ WHERE ŞART] |
MySQL Yazım:
SQLite Yazım:
1 2 3 4 5 |
UPDATE table_name SET column1 = value1, column2 = value2...., columnN = valueN WHERE [condition]; |
Oracle Yazım:
SQL DELETE Kullanımı :
SQL DELETE İfadesi, veritabanından kayıt yada kayıtları silmek için kullanılır.
Önemli Not: Şart belirtilmezse tablodaki tüm kayıtlar silinecektir.
SQL Server Yazım:
1 2 3 4 |
DELETE FROM tablo_adi WHERE {şart} |
MySQL Yazım:
1 2 3 4 |
DELETE FROM tablo_adi WHERE {şart} |
SQLite Yazım:
1 2 3 4 |
DELETE FROM tablo_adi WHERE {şart} |
Oracle Yazım:
SQL CREATE DATABASE Kullanımı :
SQL CREATE DATABASE komutu yeni bir database (veritabanı) oluşturmak için kullanılır.
SQL Server Yazım:
1 2 3 |
CREATE DATABASE veritabanı_adi |
MySQL Yazım:
1 2 3 |
CREATE DATABASE veritabanı_adi |
SQLite Yazım:
1 2 3 |
CREATE DATABASE veritabanı_adi |
Oracle Yazım:
SQL DROP DATABASE Kullanımı :
Bir veritabanı kaldırılmak yani silinmek istenirse SQL DROP DATABASE komutu kullanılır.
SQL Server Yazım:
1 2 3 |
DROP DATABASE veritabanı_adi |
MySQL Yazım:
1 2 3 |
DROP DATABASE veritabanı_adi |
SQLite Yazım:
1 2 3 |
DROP DATABASE veritabanı_adi |
Oracle Yazım:
SQL USE Kullanımı : SQL Komutlarının çalıştırılacağı veritabanını seçmek için kullanılır.
SQL Server Yazım:
1 2 3 |
USE veritabanı_adı |
MySQL Yazım:
SQLite Yazım:
Oracle Yazım:
SQL Create View Komutu Kullanımı:
SQL’de, görünüm bir SQL ifadesinin sonuç kümesine dayalı sanal bir tablodur.
Bir görünüm, gerçek bir tablo gibi, satır ve sütun içerir. Görünümdeki alanlar, veritabanındaki bir veya daha fazla gerçek tablodan alanlardır.
SQL işlevlerini, WHERE ve JOIN deyimlerini bir görünüme ekleyebilir ve verileri tek bir tablodan geliyormuş gibi sunabilirsiniz.
SQL Yazım:
1 2 3 4 5 6 |
CREATE VIEW Görünüm_Adı AS SELECT sütun1, sütun2, ... FROM tablo_adı WHERE şart; |
hocam merhaba iyi günler benim çözemediğim 2 soru var onlara yardımcı olur musunuz aciliyeti var da çok makbule geçer
Ahmet hocam merhabalar, benim SUM fonksiyonu ileilgili bir sorunum var bir türlü çözemedim.
Olau şu şekilde tbl_alis ve tbl_satis şeklinde iki tane tablom var. tbl_alis (id, ted_id, urun_id, adet, fiyat, tutar) şeklinde alanlarım var. tbl_satis (id, urun_id, adet, fiyat, tutar) alanlarım var. Amacım şu şekilde bir sorgu gerçekleştirmek; hangi üründen toplam kaç adet alınmış ve toplam kaç adet satılmış.
sorgum şu şekilde;
SELECT tbl_alis.urun_id, SUM(tbl_alis.adet) [alis_adet], SUM(tbl_satis.adet) [satis_adet]
FROM tbl_alis FULL JOIN tbl_satis ON tbl_satis.urun_id=tbl_alis.urun_id
GROUP BY tbl_alis.urun_id
diyelim ki 3 farklı ürünüm olsun ve aliş tablosuna her üründen 5er tane alış ekleyelim (toplam 3 kayıt var)
ve satış tablosuna bu ürünleri tek celsede satalım (toplam 3 kayıt var)
bu şekilde yapınca sorgu sorunsuz çalışıyor.
urun_id / alis_adet / satis_adet
1 / 5 / 5
2 / 5 / 5
3 / 5 / 5
sorun şu ki satış tablosuna bu ürünlerin kimini 1er1er kimini 2şer2şer satış kaydı atadık diyelim;
(1 numaralı ürün için 1ad+2ad+1ad+1ad toplam 4kayıt),
(2 numaralı ürün için 2ad+2ad+1ad toplam 3kayıt),
(3 numaralı ürün için 3ad+2ad toplam 2kayıt)
bu sefer sonuç;
urun_id / alis_adet / satis_adet
1 / 20 / 5
2 / 15 / 5
3 / 10 / 5
şeklinde oluyor. sorgunun yaptığı hatalı hesaplama alış adedini satışta o ürüne ait kaç tane kayıt varsa o sayıyla çarpıyor, aynı ürün için alış kayıtlarda arttıkça satış adetlerinin toplamınıda o kadar kayıtla çarpıyor. sonucu nasıl doğru hesaplatabilirim?