SQL Notları: Zaman İşlemleri ve İlişkisel Tablolar

MySQL, zaman işlemleri ve ilişkisel tablolar üzerinde çalışmak için güçlü araçlar sunar. Bu yazıda, **zaman işlemleri** ve **bire-çok ilişkileri** ile ilgili temel bilgileri ve kullanım örneklerini ele alacağız.

### Zaman İşlemleri

MySQL, milisaniye hassasiyetinde zaman işlemleri yapmak için çeşitli fonksiyonlar ve veri tipleri sunar.

#### Milisaniye Hassasiyetinde Zaman Alma
Mevcut zamanı milisaniye hassasiyetinde almak için `NOW(3)` fonksiyonunu kullanabilirsiniz:

“`sql
SELECT NOW(3);
“`

Bu sorgu, milisaniye hassasiyetinde mevcut zamanı döndürür (örneğin, `2016-11-19 09:52:53.248`).

#### Javascript Timestamp’ini MySQL’e Kaydetme
Javascript timestamp’ini MySQL’e kaydetmek için `FROM_UNIXTIME` fonksiyonunu kullanabilirsiniz:

“`sql
INSERT INTO table (col) VALUES (FROM_UNIXTIME(1478968868932 * 0.001));
“`

Bu komut, Javascript timestamp’ini MySQL’in anlayabileceği bir formata dönüştürür ve tabloya kaydeder.

#### Milisaniye Hassasiyetinde Tablo Oluşturma
Milisaniye hassasiyetinde zaman bilgisi saklamak için aşağıdaki gibi bir tablo oluşturabilirsiniz:

“`sql
CREATE TABLE times (
   dt DATETIME(3),
   ts TIMESTAMP(3)
);
“`

Bu tablo, `dt` ve `ts` sütunlarında milisaniye hassasiyetinde zaman bilgisi saklar.

### Bire-Çok İlişkiler

Bire-çok ilişkiler, bir tablodaki bir kaydın başka bir tablodaki birden fazla kayıtla ilişkilendirilmesini ifade eder. Bu tür ilişkiler, özellikle hiyerarşik veri yapılarında yaygın olarak kullanılır.

#### Örnek Şirket Tabloları
Bir şirkette her çalışanın bir yöneticisi olduğunu ve her yöneticinin birden fazla çalışanı yönettiğini varsayalım. Bu durumda iki tablo oluşturabiliriz:

**EMPLOYEES Tablosu:**

| EMP_ID | FIRST_NAME | LAST_NAME | MGR_ID |
|——–|————|———–|——–|
| E01    | Johnny     | Appleseed | M02    |
| E02    | Erin       | Macklemore| M01    |
| E03    | Colby      | Paperwork  | M03    |
| E04    | Ron        | Sonswan    | M01    |

**MANAGERS Tablosu:**

| MGR_ID | FIRST_NAME | LAST_NAME |
|——–|————|———–|
| M01    | Loud       | McQueen   |
| M02    | Bossy      | Pants     |
| M03    | Barrel     | Jones     |

#### Belirli Bir Yöneticinin Çalışanlarını Getirme
Belirli bir yöneticinin çalışanlarını getirmek için aşağıdaki sorguyu kullanabilirsiniz:

“`sql
SELECT e.emp_id, e.first_name, e.last_name
FROM employees e
INNER JOIN managers m ON m.mgr_id = e.mgr_id
WHERE m.mgr_id = ‘M01’;
“`

Bu sorgu, `M01` yöneticisinin çalışanlarını getirir:

| EMP_ID | FIRST_NAME | LAST_NAME |
|——–|————|———–|
| E02    | Erin       | Macklemore|
| E04    | Ron        | Sonswan    |

#### Belirli Bir Çalışanın Yöneticisini Getirme
Belirli bir çalışanın yöneticisini getirmek için aşağıdaki sorguyu kullanabilirsiniz:

“`sql
SELECT m.mgr_id, m.first_name, m.last_name
FROM managers m
INNER JOIN employees e ON e.mgr_id = m.mgr_id
WHERE e.emp_id = ‘E03’;
“`

Bu sorgu, `E03` çalışanının yöneticisini getirir:

| MGR_ID | FIRST_NAME | LAST_NAME |
|——–|————|———–|
| M03    | Barrel     | Jones     |

### Sonuç

MySQL, zaman işlemleri ve ilişkisel tablolar üzerinde çalışmak için güçlü araçlar sunar. Milisaniye hassasiyetinde zaman işlemleri, özellikle hassas zaman kayıtları gerektiren uygulamalarda oldukça kullanışlıdır. Bire-çok ilişkiler ise hiyerarşik veri yapılarını yönetmek için idealdir. Bu araçları doğru bir şekilde kullanarak, veritabanı işlemlerinizi daha verimli hale getirebilirsiniz.