MySQL SQL Temelleri: SELECT, Filtreleme, Sıralama, CRUD ve Aggregate Functions

MySQL, web geliştirmede, backend uygulamalarında, kontrol panellerinde, içerik yönetim sistemlerinde ve veri odaklı platformlarda en yaygın kullanılan ilişkisel database sistemlerinden biridir. MySQL ile doğru şekilde çalışmak için geliştiricinin SQL ifadelerini, filtreleme kurallarını, sıralamayı, veri değiştirmeyi, NULL işlemeyi, toplama işlevlerini, kalıp eşleştirmeyi, aralıkları ve takma adları anlaması gerekir.

Bu makalede, öğrenme yolunda gösterilen ana MySQL SQL konuları açıklanmaktadır: SQL, SELECT, SELECT DISTINCT, WHERE, ORDER BY, AND, OR, NOT, INSERT INTO, NULL değerleri, UPDATE, DELETE, LIMIT, toplama işlevleri, MIN(), MAX(), COUNT(), SUM(), AVG(), LIKE, joker karakterler, IN, BETWEEN ve takma adlar.

Amaç sadece sözdizimini ezberlemek değildir. Amaç, bu komutların gerçek projelerde nasıl kullanıldığını, verileri nasıl etkilediğini ve kayıtları okurken, filtrelerken, eklerken, güncellerken veya silerken hangi hatalardan kaçınılması gerektiğini anlamaktır.

MySQL SQL

SQL, Yapılandırılmış Sorgu Dili anlamına gelir. İlişkisel databases ile iletişim kurmak için kullanılan dildir. MySQL'da SQL, tablolar oluşturmak, verileri okumak, yeni kayıtlar eklemek, mevcut kayıtları güncellemek, kayıtları silmek, sonuçları filtrelemek, verileri gruplamak ve özetleri hesaplamak için kullanılır.

MySQL, SQL ilkelerini takip eder ancak aynı zamanda kendi özelliklerine ve söz dizimi ayrıntılarına da sahiptir. Bu, en yaygın SQL ifadelerinin ilişkisel databases genelinde benzer olduğu, ancak bazı davranışların MySQL'ya özgü olabileceği anlamına gelir.

SQL komutları okunabilirlik açısından genellikle büyük harfle yazılır, ancak MySQL anahtar sözcükleri genellikle büyük/küçük harfe duyarlı değildir. Örneğin, SELECT, select ve Select aynı şekilde çalışabilir. Ancak SQL anahtar sözcüklerini büyük harfle yazmak, sorguların okunmasını kolaylaştırır.

SELECT name, email
FROM users
WHERE status = 'active';

Bu sorgu MySQL'dan durumu etkin olan kullanıcıların adını ve e-posta adresini döndürmesini ister. Üç önemli bölümden oluşur: neyin seçileceği, hangi tablodan okunacağı ve hangi koşulun uygulanacağı.

Gerçek uygulamalarda SQL birçok özelliğin arkasında kullanılır: oturum açma sistemleri, ürün listeleri, search sayfaları, yönetici panelleri, raporlar, faturalar, siparişler, analizler ve kullanıcı kontrol panelleri.

MySQL SELECT

SELECT deyimi bir tablodan veri okumak için kullanılır. MySQL'daki en önemli komutlardan biridir çünkü çoğu uygulama sayfasının kullanıcıya göstermeden önce verileri alması gerekir.

* kullanarak tüm sütunları seçebilir veya yalnızca belirli sütunları seçebilirsiniz. Profesyonel gelişimde, yalnızca ihtiyacınız olan sütunları seçmek genellikle daha iyidir çünkü gereksiz veri aktarımını azaltır ve sorguyu daha net hale getirir.

SELECT *
FROM users;

Bu sorgu, kullanıcılar tablosundaki tüm sütunları döndürür.

SELECT id, name, email
FROM users;

Bu sorgu yalnızca kimlik, ad ve e-posta sütunlarını döndürür. Uygulamanın her sütuna ihtiyacı olmadığında bu daha temizdir.

SELECT sorgusu ayrıca filtreleme, sıralama, sınırlamalar, takma adlar, hesaplamalar ve toplama işlevlerini de içerebilir. Bu nedenle SELECT genellikle daha gelişmiş MySQL sorgularının temelini oluşturur.

MySQL SELECT DISTINCT

SELECT DISTINCT ifadesi yalnızca benzersiz değerleri döndürmek için kullanılır. Seçilen sütunlara göre sonuçtan yinelenen satırları kaldırır.

Örneğin, birçok kullanıcı aynı şehirde yaşıyorsa normal bir SELECT, şehir adını birçok kez döndürebilir. DISTINCT her şehri yalnızca bir kez döndürür.

SELECT DISTINCT city
FROM users;

Bu sorgu, kullanıcılar tablosundan benzersiz şehirlerin bir listesini döndürür.

DISTINCT birden fazla sütunla kullanıldığında, MySQL her sütunu ayrı ayrı değil, seçilen kombinasyonun tamamının benzersizliğini kontrol eder.

SELECT DISTINCT city, country
FROM users;

Bu sorgu benzersiz şehir ve ülke kombinasyonlarını döndürür. Aynı şehir adı farklı ülkelerde mevcutsa her farklı kombinasyon ayrı ayrı görünebilir.

DISTINCT filtreler, açılır listeler, raporlar ve tekrarlanan değerlerin çıktıda görünmemesi gereken durumlar için kullanışlıdır.

MySQL WHERE

Kayıtları filtrelemek için WHERE yan tümcesi kullanılır. WHERE olmadan, SELECT sorgusu tablodaki tüm satırları döndürür. WHERE ile MySQL yalnızca koşulla eşleşen satırları döndürür.

SELECT id, name, email
FROM users
WHERE status = 'active';

Bu sorgu yalnızca etkin kullanıcıları döndürür.

WHERE, =, <>, >, <, >= ve <= gibi operators karşılaştırmasıyla kullanılabilir.

SELECT id, name, price
FROM products
WHERE price > 100;

Bu sorgu, fiyatı 100'den büyük olan ürünleri döndürür.

WHERE ayrıca UPDATE ve DELETE ifadelerinde de kullanılır. Bu onu güçlü kılar ancak yanlış kullanıldığında tehlikelidir. UPDATE veya DELETE'da eksik bir WHERE yan tümcesi, tablodaki her satırı etkileyebilir.

MySQL ORDER BY

ORDER BY yan tümcesi sorgu sonuçlarını sıralamak için kullanılır. ORDER BY olmadan MySQL, sonuç bazen sıralı görünse bile satırların belirli bir sırayla döndürüleceğini garanti etmez.

Sonuçları ASC kullanarak artan sırada veya DESC kullanarak azalan sırada sıralayabilirsiniz. Yön sağlanmazsa MySQL varsayılan olarak artan sırayı kullanır.

SELECT id, name, created_at
FROM users
ORDER BY created_at DESC;

Bu sorgu, created_at sütununa göre kullanıcıları en yeniden en eskiye doğru döndürür.

Ayrıca birden fazla sütuna göre de sıralama yapabilirsiniz.

SELECT id, name, city, created_at
FROM users
ORDER BY city ASC, created_at DESC;

Bu sorgu, kullanıcıları önce şehre göre sıralar, ardından her şehirdeki kullanıcıları en yeniden en eskiye doğru sıralar.

ORDER BY, kullanıcının net bir sipariş beklediği tablolar, raporlar, sayfalandırma, search sonuçları, ürün sayfaları ve kontrol panelleri için önemlidir.

MySQL VE

AND operator, tüm koşulların doğru olması gerektiğinde kullanılır. AND ile bağlantılı her koşulun eşleşmesi gerektiğinden sonucu daraltır.

SELECT id, name, email
FROM users
WHERE status = 'active'
AND country = 'Turkey';

Bu sorgu aktif olan ve ülkesi Türkiye olan kullanıcıları döndürür. Bir kullanıcı aktifse ancak başka bir ülkede yaşıyorsa bu kullanıcı dahil edilmeyecektir.

AND, yönetici filtrelerinde, search formlarında, izin kontrollerinde ve aynı anda birden fazla gereksinimin karşılanması gereken raporlarda yaygın olarak kullanılır.

SELECT id, name, price
FROM products
WHERE category_id = 5
AND price >= 100
AND stock > 0;

Bu sorgu, fiyatı en az 100 olan ve stokta bulunan 5. kategorideki ürünleri döndürür.

MySQL VEYA

OR operator, en az bir koşulun doğru olması gerektiğinde kullanılır. Bir satır koşullardan herhangi biriyle eşleşebileceği için sonucu genişletir.

SELECT id, name, role
FROM users
WHERE role = 'admin'
OR role = 'editor';

Bu sorgu, rolü yönetici veya editör olan kullanıcıları döndürür.

AND ve OR birlikte kullanıldığında parantezlerin önemi büyüktür. Mantığı netleştirir ve beklenmeyen sonuçları önlerler.

SELECT id, name, status, role
FROM users
WHERE status = 'active'
AND (role = 'admin' OR role = 'editor');

Bu sorgu, yönetici veya editör olan etkin kullanıcıları döndürür. Parantez olmadan sorgu farklı yorumlanabilir ve amaçlanmayan kayıtları döndürebilir.

MySQL DEĞİL

NOT operator bir koşulu tersine çevirir. Belirli bir kuralla eşleşen kayıtları hariç tutmak için kullanılır.

SELECT id, name, status
FROM users
WHERE NOT status = 'inactive';

Bu sorgu, durumu etkin olmayan kullanıcıları döndürür.

Aynı fikri yazmanın daha yaygın bir yolu, eşit olmayan operator'yu kullanmaktır.

SELECT id, name, status
FROM users
WHERE status <> 'inactive';

NOT IN, BETWEEN ve LIKE ile de kullanılabilir.

SELECT id, name
FROM users
WHERE country NOT IN ('Turkey', 'Germany');

Bu sorgu, ülkesi Türkiye veya Almanya olan kullanıcıları hariç tutar.

NOT, hariç tutma filtreleri, engellenen durumlar, kullanılamayan ürünler, arşivlenmiş kayıtlar ve negatif search koşulları için kullanışlıdır.

MySQL INSERT İÇİNE

INSERT INTO ifadesi bir tabloya yeni kayıtlar eklemek için kullanılır. Çoğu uygulamada INSERT, kullanıcılar kaydolduğunda, gönderi oluşturduğunda, form gönderdiğinde, ürün eklediğinde, sipariş oluşturduğunda veya yeni verileri kaydettiğinde kullanılır.

En güvenli ve açık biçim, sütun adlarını belirtmek ve ardından değerleri sağlamaktır.

INSERT INTO users (name, email, status)
VALUES ('Adnan', 'adnan@example.com', 'active');

Bu sorgu, adı, e-postası ve durumu olan yeni bir kullanıcı ekler.

Ayrıca bir ifadeye birden fazla kayıt da ekleyebilirsiniz.

INSERT INTO categories (name, slug)
VALUES
('Programming', 'programming'),
('Databases', 'databases'),
('Backend Development', 'backend-development');

Verileri eklerken değerlerin beklenen sütun türleriyle eşleşmesi gerekir. Örneğin, sayısal sütunlara sayılar, tarih sütunlarına geçerli tarihler ve metin tabanlı sütunlara dizeler eklenmelidir.

Gerçek uygulamalarda geliştiriciler hiçbir zaman güvenli olmayan kullanıcı girişini doğrudan birleştirerek INSERT sorguları oluşturmamalıdır. Uygulamayı SQL injection'dan korumak için hazırlanmış ifadeler veya çerçeve sorgu oluşturucuları kullanılmalıdır.

MySQL NULL Değerleri

NULL, bir değerin eksik olduğu, bilinmediği veya sağlanmadığı anlamına gelir. Boş bir dize, sıfır veya yanlış ile aynı değildir.

Örneğin, bir kullanıcının henüz kayıtlı bir doğum tarihi olmayabilir. Bu durumda, doğum_tarihi sütunu NULL içerebilir.

NULL değerlerini kontrol etmek için IS NULL kullanın. = NULL kullanmayın, çünkü NULL bilinmeyen bir değeri temsil eder ve normal eşitlik karşılaştırması beklendiği gibi çalışmaz.

SELECT id, name, birth_date
FROM users
WHERE birth_date IS NULL;

Bu sorgu, doğum tarihi eksik olan kullanıcıları döndürür.

Değerin bulunduğu kayıtları döndürmek için IS NOT NULL kullanın.

SELECT id, name, birth_date
FROM users
WHERE birth_date IS NOT NULL;

NULL değerleri aynı zamanda toplama işlevlerini de etkiler. Örneğin, COUNT(sütun) NULL değerlerini saymazken COUNT(*), NULL değerlerinden bağımsız olarak satırları sayar.

Sonuçta NULL'yu okunabilir bir değerle değiştirmeniz gerektiğinde COALESCE() öğesini kullanabilirsiniz.

SELECT name, COALESCE(phone, 'No phone number') AS phone_display
FROM users;

Bu sorgu, telefon sütunu NULL olduğunda bir geri dönüş metni görüntüler.

MySQL UPDATE

UPDATE deyimi bir tablodaki mevcut kayıtları değiştirmek için kullanılır. Kullanıcılar profillerini düzenlediğinde, sipariş durumunu değiştirdiğinde, ürün fiyatını güncellediğinde, bir makale yayınladığında veya ayarları değiştirdiğinde yaygın olarak kullanılır.

UPDATE users
SET status = 'active'
WHERE id = 10;

Bu sorgu kullanıcıyı id 10 ile günceller ve durumu etkin olarak değiştirir.

Aynı anda birden fazla sütunu güncelleyebilirsiniz.

UPDATE products
SET price = 149.99,
    stock = 25
WHERE id = 7;

Bu sorgu id 7 olan ürünün fiyatını ve stokunu günceller.

WHERE yan tümcesi, UPDATE sorgularında son derece önemlidir. WHERE olmadan MySQL tablodaki her satırı günceller.

UPDATE users
SET status = 'inactive';

Bu sorgu tüm kullanıcıların durumunu etkin değil olarak değiştirir. Çoğu gerçek projede, kasıtlı olarak planlanmadığı sürece bu ciddi bir hata olacaktır.

Tehlikeli bir UPDATE çalıştırmadan önce, hangi kayıtların etkileneceğini doğrulamak için ilk önce aynı WHERE koşuluyla bir SELECT sorgusu çalıştırmak genellikle daha güvenlidir.

MySQL DELETE

DELETE deyimi bir tablodaki kayıtları kaldırmak için kullanılır. Yaygın olarak gönderileri, yorumları, geçici kayıtları, bildirimleri, alışveriş sepeti öğelerini ve artık mevcut olmaması gereken diğer verileri silmek için kullanılır.

DELETE FROM users
WHERE id = 10;

Bu sorgu id 10'a sahip kullanıcıyı siler.

DELETE dikkatli kullanılmalıdır çünkü yedekleme veya geçici silme sistemi yoksa kaldırılan verilerin kurtarılması zor veya imkansız olabilir.

Tıpkı UPDATE gibi, DELETE da WHERE olmadan kullanıldığında tehlikeli hale gelir.

DELETE FROM users;

Bu sorgu, kullanıcılar tablosundaki tüm satırları siler. Tablo yapısını silmez ancak kayıtları siler.

Profesyonel uygulamalarda geliştiriciler, önemli iş verileri için sıklıkla kalıcı silme işlemlerini kullanır. Uygulama, kaydı kalıcı olarak kaldırmak yerine, bir delete_at sütunu veya durum alanı kullanarak onu silinmiş olarak işaretler.

MySQL LIMIT

LIMIT yan tümcesi, bir sorgunun döndürdüğü satır sayısını kısıtlamak için kullanılır. Sayfalandırma, en son kayıtlar, en iyi listeler, önizlemeler, gösterge tabloları ve performans kontrolü için kullanışlıdır.

SELECT id, title, created_at
FROM posts
ORDER BY created_at DESC
LIMIT 10;

Bu sorgu en son 10 gönderiyi döndürür.

LIMIT ofsetle de kullanılabilir. Uzaklık, sonuçları döndürmeden önce MySQL'ya kaç satırın atlanması gerektiğini bildirir.

SELECT id, title, created_at
FROM posts
ORDER BY created_at DESC
LIMIT 10 OFFSET 20;

Bu sorgu ilk 20 satırı atlar ve sonraki 10 satırı döndürür. Her sayfada 10 kayıt bulunduğunda 3. sayfa için kullanılabilir.

MySQL ayrıca daha kısa sözdizimini de destekler:

SELECT id, title, created_at
FROM posts
ORDER BY created_at DESC
LIMIT 20, 10;

Bu sözdiziminde ilk sayı uzaklık, ikinci sayı ise döndürülecek satır sayısıdır.

İstikrarlı sayfalandırma için LIMIT genellikle ORDER BY ile birleştirilmelidir. Açık bir sıra olmadan database tutarsız sayfalandırma sonuçları döndürebilir.

MySQL Toplu İşlevler

Toplama işlevleri, bir grup satır üzerinde hesaplamalar yapar ve tek bir sonuç döndürür. Raporlarda, kontrol panellerinde, istatistiklerde, analizlerde, mali özetlerde, ürün sayımlarında, sipariş toplamlarında ve kullanıcı etkinliği raporlarında kullanılırlar.

En yaygın MySQL toplama işlevleri MIN(), MAX(), COUNT(), SUM() ve AVG()'dur.

SELECT COUNT(*) AS total_orders,
       SUM(total_amount) AS revenue,
       AVG(total_amount) AS average_order_value
FROM orders
WHERE status = 'paid';

Bu sorgu, ödenen siparişlerin sayısını, toplam geliri ve ortalama sipariş değerini hesaplar.

GROUP BY ile toplu işlevler sıklıkla kullanılır, ancak GROUP BY bu makalenin ana odak noktası değildir. GROUP BY, kategori başına, kullanıcı başına, durum başına veya tarih başına hesaplamalara olanak tanır.

SELECT status, COUNT(*) AS total
FROM orders
GROUP BY status;

Bu sorgu, siparişleri duruma göre sayar.

MySQL MIN()

MIN() işlevi bir sütundaki en küçük değeri döndürür. Sayılar, tarihler ve metin değerleriyle kullanılabilir.

SELECT MIN(price) AS lowest_price
FROM products;

Bu sorgu en düşük ürün fiyatını döndürür.

MIN() en ucuz ürünü, en erken tarihi, en küçük puanı, en düşük maaşı, ilk sipariş tarihini veya minimum miktarı bulmak için kullanışlıdır.

SELECT MIN(created_at) AS first_order_date
FROM orders
WHERE user_id = 15;

Bu sorgu 15 numaralı kullanıcının ilk sipariş tarihini döndürür.

MIN(), NULL değerleri içeren bir sütunda kullanıldığında, tüm değerler NULL olmadığı sürece NULL değerleri yoksayılır.

MySQL MAX()

MAX() işlevi bir sütundaki en büyük değeri döndürür. MIN()'nun tam tersidir.

SELECT MAX(price) AS highest_price
FROM products;

Bu sorgu en yüksek ürün fiyatını döndürür.

MAX(), bir rapordaki en pahalı ürünü, en son tarihi, en yüksek puanı, en büyük miktarı, en yeni sipariş tarihini veya maksimum değeri bulmak için kullanışlıdır.

SELECT MAX(created_at) AS latest_login
FROM login_logs
WHERE user_id = 15;

Bu sorgu, kullanıcı 15 için en son oturum açma zamanını döndürür.

Diğer toplama işlevleri gibi MAX() da seçilen sütundaki NULL değerlerini yok sayar.

MySQL COUNT()

COUNT() işlevi, satır sayısını veya NULL olmayan değerleri döndürür. MySQL'da en sık kullanılan toplama işlevlerinden biridir.

SELECT COUNT(*) AS total_users
FROM users;

Bu sorgu, kullanıcılar tablosundaki tüm satırları sayar.

COUNT(*), bazı sütunlar NULL içerse bile satırları sayar. COUNT(sütun_adı) yalnızca söz konusu sütunun NULL olmadığı satırları sayar.

SELECT COUNT(phone) AS users_with_phone
FROM users;

Bu sorgu, NULL olmayan telefon değerine sahip kullanıcıları sayar.

COUNT(), gösterge tabloları, sayfalandırma toplamları, raporlar, okunmamış bildirimler, ürün sayıları, sipariş sayıları ve analizler için kullanışlıdır.

SELECT COUNT(*) AS active_users
FROM users
WHERE status = 'active';

Bu sorgu yalnızca etkin kullanıcıları sayar.

MySQL SUM()

SUM() işlevi, bir sütundaki sayısal değerlerin toplam toplamını döndürür. Mali raporlar, sipariş toplamları, satış gelirleri, stok miktarları, bakiyeler ve sayısal özetler için kullanılır.

SELECT SUM(total_amount) AS total_revenue
FROM orders
WHERE status = 'paid';

Bu sorgu, ücretli siparişlerden elde edilen toplam geliri döndürür.

Sayısal sütunlarla SUM() kullanılmalıdır. Sütun NULL değerlerini içeriyorsa bu değerler yoksayılır.

SELECT user_id, SUM(total_amount) AS total_spent
FROM orders
WHERE status = 'paid'
GROUP BY user_id;

Bu sorgu, her kullanıcının ücretli siparişlere ne kadar harcadığını hesaplar.

SUM() özellikle e-ticaret sistemlerinde, muhasebe özelliklerinde, faturalarda, cüzdanlarda, aboneliklerde ve iş kontrol panellerinde önemlidir.

MySQL AVG()

AVG() işlevi, sayısal bir sütunun ortalama değerini döndürür. Değerlerin toplamını NULL olmayan değerlerin sayısına bölerek hesaplar.

SELECT AVG(price) AS average_price
FROM products;

Bu sorgu ortalama ürün fiyatını döndürür.

AVG() ortalama sipariş değeri, ortalama derecelendirme, ortalama maaş, ortalama puan, ortalama teslimat süresi ve performans raporları için kullanışlıdır.

SELECT AVG(rating) AS average_rating
FROM product_reviews
WHERE product_id = 12;

Bu sorgu, ürün 12'nin ortalama derecelendirmesini döndürür.

AVG(), NULL değerlerini yok saydığından, eksik derecelendirmeler veya eksik değerler ortalamayı sıfırların yapacağı gibi düşürmez. Verileri analiz ederken bu fark önemlidir.

MySQL LIKE

LIKE operator, metin sütunlarında desen eşleştirme için kullanılır. Kullanıcının bir adın, e-postanın, başlığın, bilginin, kategorinin veya açıklamanın bir kısmını girdiği search özelliklerinde yaygın olarak kullanılır.

SELECT id, name, email
FROM users
WHERE name LIKE 'A%';

Bu sorgu, adı A ile başlayan kullanıcıları döndürür.

SELECT id, title
FROM posts
WHERE title LIKE '%mysql%';

Bu sorgu, başlığı mysql kelimesini içeren gönderileri döndürür.

LIKE kullanışlıdır, ancak desenler %mysql veya %mysql% gibi bir joker karakterle başladığında büyük tablolarda yavaşlayabilir. Gelişmiş search sistemleri için, tam metinli indexes veya harici search motorları daha iyi olabilir.

LIKE sorgularında kullanıcı girişi kullanıldığında, SQL injection'yu ve güvenli olmayan sorgu oluşturmayı önlemek için yine de prepared statements kullanılmalıdır.

MySQL Joker Karakterler

Joker karakterler LIKE ile kalıpları eşleştirmek için kullanılan özel karakterlerdir. En yaygın iki MySQL joker karakteri % ve _'dir.

  • % sıfır veya daha fazla karakterle eşleşir.

  • _ tam olarak bir karakterle eşleşir.

SELECT id, name
FROM users
WHERE name LIKE 'Ad%';

Bu sorgu Adnan, Adem gibi Ad ile başlayan isimlerle eşleşiyor.

SELECT id, code
FROM coupons
WHERE code LIKE 'A_1';

Alt çizgi tam olarak bir karakteri temsil ettiğinden bu sorgu AA1, AB1 veya A91 gibi değerlerle eşleşir.

Joker karakter konumu search'nun anlamını değiştirir:

  • 'mysql%', mysql ile başladığı anlamına gelir.

  • '%mysql', mysql ile bittiği anlamına gelir.

  • '%mysql%', her yerde MySQL içerdiği anlamına gelir.

Joker karakterler basit ve kullanışlıdır ancak geniş kalıp aramaları performansı etkileyebileceğinden büyük veri kümelerinde dikkatli kullanılmalıdır.

MySQL IN

IN operator, bir değerin listedeki herhangi bir değerle eşleşip eşleşmediğini kontrol eder. Birçok OR koşulu yazmaktan daha temizdir.

SELECT id, name, role
FROM users
WHERE role IN ('admin', 'editor', 'author');

Bu sorgu, rolü yönetici, editör veya yazar olan kullanıcıları döndürür.

Aynı mantık VEYA ile de yazılabilir, ancak birden fazla değer olduğunda IN'in okunması daha kolaydır.

SELECT id, title, status
FROM posts
WHERE status IN ('draft', 'published');

IN alt sorgularla da kullanılabilir.

SELECT id, name
FROM users
WHERE id IN (
    SELECT user_id
    FROM orders
    WHERE status = 'paid'
);

Bu sorgu, en az bir ücretli siparişi olan kullanıcıları döndürür.

IN, filtreler, roller, durumlar, kategoriler, seçilen kimlikler ve izne dayalı sorgular için kullanışlıdır.

MySQL BETWEEN

BETWEEN operator, bir değerin bir aralık içinde olup olmadığını kontrol eder. Genellikle sayılar, tarihler ve saatlerle birlikte kullanılır.

SELECT id, name, price
FROM products
WHERE price BETWEEN 100 AND 500;

Bu sorgu, fiyatları 100 ile 500 arasında olan ürünleri döndürür.

BETWEEN dahildir. Bu, sonuca başlangıç ​​değerinin ve bitiş değerinin dahil edildiği anlamına gelir.

SELECT id, title, created_at
FROM posts
WHERE created_at BETWEEN '2026-01-01' AND '2026-01-31';

Bu sorgu, iki tarih arasında oluşturulan gönderileri döndürür. Datetime değerleriyle çalışırken geliştiricilerin dikkatli olması gerekir çünkü '2026-01-31' gibi bir tarih, sütun türüne ve karşılaştırma bağlamına bağlı olarak o günün başlangıcını temsil edebilir.

Tarihsaat filtrelemesi için, bir başlangıç tarihi ve özel bir sonraki gün veya sonraki ay sınırının kullanılması genellikle daha anlaşılırdır.

SELECT id, title, created_at
FROM posts
WHERE created_at >= '2026-01-01'
AND created_at < '2026-02-01';

Bu sorgu, created_at'nin zaman değerlerini içerdiği Ocak 2026'da oluşturulan tüm gönderileri döndürür.

MySQL Takma Adları

Takma adlar, sorgu sonucundaki sütunlara veya tablolara geçici adlar verir. Çıktının okunmasını kolaylaştırır ve karmaşık sorguları kısaltır.

Sütun takma adları genellikle AS kullanılarak oluşturulur.

SELECT name AS full_name,
       email AS contact_email
FROM users;

Bu sorgu, ad sütununu tam_ad olarak ve e-posta sütununu iletişim_e-posta olarak döndürür.

Takma adlar toplu işlevlerde çok kullanışlıdır.

SELECT COUNT(*) AS total_users
FROM users;

Sonuç, COUNT(*) gibi bir sütun adı döndürmek yerine okunabilir total_users adını kullanır.

Tablo takma adları, bir sorgu uzun tablo adları içerdiğinde veya birden fazla tablo söz konusu olduğunda kullanışlıdır.

SELECT u.id, u.name, u.email
FROM users AS u
WHERE u.status = 'active';

Bu sorguda u, kullanıcılar tablosunun takma adıdır. Bu, sorguyu kısaltır ve joinsde ve karmaşık raporlarda kullanılan stili hazırlar.

AS anahtar sözcüğü birçok takma ad durumunda isteğe bağlıdır, ancak bunun kullanılması yeni başlayanlar için uygun olan SQL'nun anlaşılmasını kolaylaştırabilir.

Bu MySQL SQL Konseptleri Birlikte Nasıl Çalışır?

Gerçek uygulamalarda bu MySQL kavramları genellikle ayrı olarak kullanılmaz. Tek bir sorgu belirli sütunları seçebilir, kayıtları filtreleyebilir, VE ve VEYA kullanabilir, sonuçları sıralayabilir, LIMIT uygulayabilir ve takma adlar kullanabilir.

SELECT id,
       title,
       status,
       created_at
FROM posts
WHERE status IN ('published', 'scheduled')
AND title LIKE '%mysql%'
ORDER BY created_at DESC
LIMIT 10;

Bu sorgu, durumu yayınlanmış veya planlanmış ve başlığı mysql içeren en son 10 gönderiyi döndürür.

Raporlar genellikle WHERE koşullarını toplu işlevlerle birleştirir.

SELECT COUNT(*) AS paid_orders,
       SUM(total_amount) AS total_revenue,
       AVG(total_amount) AS average_order_value,
       MIN(total_amount) AS smallest_order,
       MAX(total_amount) AS largest_order
FROM orders
WHERE status = 'paid'
AND created_at >= '2026-01-01'
AND created_at < '2026-02-01';

Bu sorgu, Ocak 2026'ya ait ödenen siparişleri özetler. Siparişleri sayar, toplam geliri, ortalama sipariş değerini, ödenen en küçük siparişi ve en büyük ödenen siparişi hesaplar.

Veri değiştirme komutları da büyük ölçüde koşullara bağlıdır.

UPDATE posts
SET status = 'archived'
WHERE status = 'draft'
AND created_at < '2025-01-01';

Bu sorgu eski taslak gönderileri arşivler. Bir geliştiricinin UPDATE'yu bu şekilde çalıştırmadan önce WHERE durumunu SELECT ile test etmesi gerekir.

SELECT id, title, status, created_at
FROM posts
WHERE status = 'draft'
AND created_at < '2025-01-01';

Bu daha güvenli adım, UPDATE yürütülmeden önce hangi kayıtların etkileneceğini gösterir.

MySQL SQL'da Kaçınılması Gereken Yaygın Hatalar

Çoğu SQL hatası sözdizimi hatası değildir. Bunlar mantık hatalarıdır. Sorgu başarılı bir şekilde çalışabilir ancak yanlış verileri döndürebilir veya beklenenden daha fazla satırı değiştirebilir.

Yaygın hatalar şunları içerir:

  • UPDATE veya DELETE'yu WHERE yan tümcesi olmadan kullanma.

  • IS NULL yerine = NULL kullanılması.

  • Yalnızca birkaç sütuna ihtiyaç duyulduğunda SELECT * kullanılması.

  • VE ve VEYA'yı birleştirirken parantezleri unutmak.

  • Sayfalandırma için ORDER BY olmadan LIMIT kullanma.

  • BETWEEN'nun başlangıç veya bitiş değerini içermesine rağmen hariç tuttuğunu varsayarsak.

  • Performans dikkate alınmaksızın çok büyük tablolarda LIKE '%keyword%' kullanımı.

  • Hesaplanan sütunlar için takma ad kullanmamak, sonuç adlarının kullanımını zorlaştırır.

Güvenilir SQL yazmak, veriler, koşullar, beklenen sonuç ve olası yan etkiler hakkında dikkatli düşünmeyi gerektirir.

MySQL Sorgularını Yazmaya Yönelik En İyi Uygulamalar

İyi MySQL sorguları okunabilir, güvenli ve spesifiktir. Bir sorgu, onu okuyan bir sonraki geliştiriciye amacını açıkça belirtmelidir.

  • Okunabilirlik için SQL anahtar sözcüklerini büyük harflerle yazın.

  • Her yerde SELECT * kullanmak yerine yalnızca ihtiyacınız olan sütunları seçin.

  • WHERE'yu her zaman UPDATE ve DELETE ile dikkatli bir şekilde kullanın.

  • Toplu değerler ve uzun tablo adları için takma adlar kullanın.

  • VE ve VEYA'yı karıştırırken parantez kullanın.

  • NULL kontrolleri için IS NULL ve IS NOT NULL kullanın.

  • Sonuç sırası önemli olduğunda ORDER BY'yu LIMIT ile birlikte kullanın.

  • Önce SELECT ile riskli UPDATE ve DELETE koşullarını test edin.

  • Kullanıcı girişiyle çalışırken prepared statements veya çerçeve sorgu oluşturucularını kullanın.

Bu uygulamalar basittir ancak birçok gerçek üretim sorununu önler.

Sonuç

MySQL SQL, backend geliştiricileri, tam yığın geliştiricileri, veri analistleri ve database odaklı uygulamalarla çalışan herkes için temel bir beceridir. En önemli başlangıç ​​noktası, SELECT ile verilerin nasıl okunacağını, WHERE ile filtreleneceğini, ORDER BY ile nasıl sıralanacağını ve AND, OR ve NOT kullanarak mantığın nasıl kontrol edileceğini anlamaktır.

Bundan sonra geliştiricilerin, kayıtları güvenli bir şekilde eklemeyi, güncellemeyi ve silmeyi anlamaları gerekir. Bu ifadeler doğrudan database'yu değiştirir; bu nedenle bunların her zaman koşullara, veri türlerine ve beklenen sonuçlara dikkat edilerek yazılması gerekir.

MIN(), MAX(), COUNT(), SUM() ve AVG() gibi toplu işlevler, MySQL’i raporlar ve gösterge tabloları için kullanışlı hale getirir. LIKE, IN ve BETWEEN gibi operatörler filtrelemeyi daha güçlü hale getirirken takma adlar sonuçların daha temiz ve kullanımını kolaylaştırır.

Bu MySQL temel bilgilerine hakim olarak, joins, indexes, gruplama, alt sorgular, işlemler, database tasarımı ve sorgu optimizasyonu gibi daha gelişmiş database konuları için gereken temeli oluşturursunuz.