SQL Notları: `NULL` değerlerini, `LIMIT` ve `OFFSET` kullanımı

## NULL Değerleri ve Kullanımı

MySQL’de `NULL`, bir sütunda değer olmadığını veya bilinmediğini belirtmek için kullanılır. `NULL`, boş bir string (`””`) veya sıfır (`0`) değerinden farklıdır. Bu bölümde, `NULL` değerlerinin nasıl kullanıldığını ve nasıl test edildiğini inceleyeceğiz.

### 1. **NULL Değerlerinin Kullanım Alanları**

– **Henüz bilinmeyen veriler:** Örneğin, bir projenin bitiş tarihi (`end_date`) henüz belirlenmemiş olabilir.
– **Opsiyonel veriler:** Örneğin, bir kullanıcının ikinci adı (`middle_initial`) olmayabilir. Bu durumda `NULL` kullanılabilir.
– **Matematiksel hesaplamalar:** Örneğin, sıfırın sıfıra bölünmesi gibi geçersiz hesaplamalar `NULL` ile temsil edilir.

**Örnek:**
“`sql
CREATE TABLE users (
   id INT PRIMARY KEY,
   username VARCHAR(50) NOT NULL,
   middle_initial CHAR(1) NULL
);
“`

Bu örnekte, `middle_initial` sütunu opsiyonel olduğu için `NULL` değer alabilir.

### 2. **NULL Değerlerini Test Etme**

`NULL` değerlerini test etmek için `IS NULL` ve `IS NOT NULL` ifadeleri kullanılır. `=` operatörü `NULL` değerlerini test etmek için kullanılmaz.

**Örnek Kullanım:**
“`sql
SELECT * FROM users WHERE middle_initial IS NULL;
“`

Bu sorgu, `middle_initial` sütunu `NULL` olan tüm kullanıcıları getirecektir.

**NULL Güvenli Karşılaştırma:**
“`sql
SELECT * FROM users WHERE middle_initial <=> NULL;
“`

Bu sorgu da `middle_initial` sütunu `NULL` olan kullanıcıları getirecektir. `<=>` operatörü, `NULL` değerlerini güvenli bir şekilde karşılaştırmak için kullanılır.

### 3. **LEFT JOIN ile NULL Kullanımı**

`LEFT JOIN` işlemlerinde, bir tablodaki kayıtların diğer tabloda karşılığı olup olmadığını kontrol etmek için `NULL` kullanılabilir.

**Örnek Kullanım:**
“`sql
SELECT a.*
FROM table_a a
LEFT JOIN table_b b ON a.id = b.id
WHERE b.id IS NULL;
“`

Bu sorgu, `table_a` tablosundaki `id` değerlerinin `table_b` tablosunda karşılığı olmayan kayıtları getirecektir.

## LIMIT ve OFFSET Kullanımı

`LIMIT` ve `OFFSET` ifadeleri, sorgu sonuçlarını sınırlamak ve belirli bir kayıttan başlayarak sonuçları getirmek için kullanılır. Bu, özellikle sayfalama (pagination) işlemlerinde kullanışlıdır.

### 1. **LIMIT ile Sonuçları Sınırlama**

`LIMIT` ifadesi, sorgu sonuçlarının kaç satır döneceğini belirler.

**Örnek Kullanım:**
“`sql
SELECT * FROM users ORDER BY id ASC LIMIT 2;
“`

Bu sorgu, `users` tablosundaki ilk 2 kaydı getirecektir.

### 2. **LIMIT ve OFFSET ile Sayfalama**

`LIMIT` ve `OFFSET` birlikte kullanılarak, belirli bir kayıttan başlayarak sonuçlar getirilebilir.

**Örnek Kullanım:**
“`sql
SELECT * FROM users ORDER BY id ASC LIMIT 2 OFFSET 2;
“`

Bu sorgu, ilk 2 kaydı atlayıp sonraki 2 kaydı getirecektir. Yani, 3. ve 4. kayıtlar dönecektir.

**Alternatif Sözdizimi:**
“`sql
SELECT * FROM users ORDER BY id ASC LIMIT 2, 2;
“`

Bu sorgu da aynı sonucu verecektir. İlk sayı offset, ikinci sayı ise limit değerini belirtir.

## Veritabanı ve Kullanıcı Oluşturma

MySQL’de veritabanı ve kullanıcı oluşturmak, veritabanı yönetiminin temel adımlarındandır. Bu bölümde, veritabanı ve kullanıcı oluşturma işlemlerini inceleyeceğiz.

### 1. **Veritabanı Oluşturma**

Yeni bir veritabanı oluşturmak için `CREATE DATABASE` komutu kullanılır.

**Örnek Kullanım:**
“`sql
CREATE DATABASE Baseball;
“`

Eğer veritabanı zaten varsa, hata almamak için `IF NOT EXISTS` ifadesi kullanılabilir:
“`sql
CREATE DATABASE IF NOT EXISTS Baseball;
“`

### 2. **Kullanıcı Oluşturma ve İzin Verme**

Yeni bir kullanıcı oluşturmak için `CREATE USER` komutu kullanılır. Daha sonra bu kullanıcıya belirli veritabanları üzerinde izinler verilebilir.

**Örnek Kullanım:**
“`sql
CREATE USER ‘John123’@’%’ IDENTIFIED BY ‘OpenSesame’;
“`

Bu komut, `John123` adında bir kullanıcı oluşturacak ve bu kullanıcıya herhangi bir yerden bağlanma izni verecektir.

**İzin Verme:**
“`sql
GRANT ALL ON Baseball.* TO ‘John123’@’%’;
“`

Bu komut, `John123` kullanıcısına `Baseball` veritabanındaki tüm tablolar üzerinde tüm izinleri verecektir.

Bu bilgilerle, MySQL’de `NULL` değerlerini, `LIMIT` ve `OFFSET` kullanımını, veritabanı ve kullanıcı oluşturma işlemlerini daha iyi anlayabilirsiniz. Bir sonraki yazıda, JOIN’ler ve alt sorgular gibi daha gelişmiş SQL konularına değineceğiz.