MySQL’de değişkenler, sorgular sırasında geçici değerler saklamak ve bu değerleri kullanmak için kullanılır. Ayrıca, değişkenler kullanılarak satır numaralandırma gibi işlemler de gerçekleştirilebilir. Bu bölümde, MySQL’de değişkenlerin nasıl kullanıldığını ve satır numaralandırma işlemlerini inceleyeceğiz.
### 1. **Değişkenlerin Tanımlanması ve Kullanımı**
MySQL’de değişkenler `@` işareti ile tanımlanır ve `SET` veya `SELECT` ifadeleri ile değer atanabilir.
**Örnek Kullanım:**
“`sql
SET @var_string = ‘my_var’;
SET @var_num = 2;
SET @var_date = ‘2015-07-20’;
“`
Bu örnekte, `@var_string`, `@var_num` ve `@var_date` değişkenlerine sırasıyla bir string, bir sayı ve bir tarih değeri atanmıştır.
**SELECT ile Değişken Atama:**
“`sql
SELECT @var := ‘123’;
“`
Bu sorgu, `@var` değişkenine `’123’` değerini atar. `:=` operatörü, değişken atama işlemi için kullanılır.
**INTO ile Değişken Atama:**
“`sql
SELECT COUNT(*) INTO @total_users FROM users;
“`
Bu sorgu, `users` tablosundaki toplam kayıt sayısını `@total_users` değişkenine atar.
### 2. **Satır Numaralandırma**
MySQL’de satır numaralandırma işlemi, değişkenler kullanılarak gerçekleştirilebilir. Bu, özellikle sonuç kümesindeki satırlara bir sıra numarası eklemek istediğinizde kullanışlıdır.
**Örnek Kullanım:**
“`sql
SET @row_no := 0;
SELECT @row_no := @row_no + 1 AS row_number, team, person
FROM team_person;
“`
Bu sorgu, `team_person` tablosundaki her satır için bir satır numarası (`row_number`) oluşturur ve sonuç kümesine ekler.
**Sonuç:**
“`
+————+——+———-+
| row_number | team | person |
+————+——+———-+
| 1 | A | John |
| 2 | B | Smith |
| 3 | A | Walter |
| 4 | A | Louis |
| 5 | C | Elizabeth|
| 6 | B | Wayne |
+————+——+———-+
“`
### 3. **Gruplara Göre Satır Numaralandırma**
Eğer satır numaralandırmayı belirli bir gruplama (örneğin, takımlara göre) yaparak gerçekleştirmek istiyorsanız, değişkenler ve `IF` ifadesi kullanılabilir.
**Örnek Kullanım:**
“`sql
SELECT
@row_no := IF(@prev_val = t.team, @row_no + 1, 1) AS row_number,
@prev_val := t.team AS team,
t.person
FROM
team_person t,
(SELECT @row_no := 0) x,
(SELECT @prev_val := ”) y
ORDER BY
t.team ASC, t.person DESC;
“`
Bu sorgu, `team_person` tablosundaki satırları `team` sütununa göre gruplayarak her grup içinde satır numaralandırma yapar.
**Sonuç:**
“`
+————+——+———-+
| row_number | team | person |
+————+——+———-+
| 1 | A | Walter |
| 2 | A | Louis |
| 3 | A | John |
| 1 | B | Wayne |
| 2 | B | Smith |
| 1 | C | Elizabeth|
+————+——+———-+
“`
### 4. **Değişkenlerle Dinamik Sorgular Oluşturma**
Değişkenler, dinamik sorgular oluşturmak için de kullanılabilir. Özellikle, büyük veri setlerinde belirli koşullara göre sorgular oluşturmak istediğinizde bu yöntem kullanışlıdır.
**Örnek Kullanım:**
“`sql
SET @start_date = ‘2015-07-20’;
SET @end_date = ‘2016-01-31’;
SET @start_yearmonth = (SELECT EXTRACT(YEAR_MONTH FROM @start_date));
SET @end_yearmonth = (SELECT EXTRACT(YEAR_MONTH FROM @end_date));
SELECT GROUP_CONCAT(partition_name)
INTO @partitions
FROM information_schema.partitions p
WHERE table_name = ‘partitioned_table’
AND SUBSTRING_INDEX(partition_name, ‘P’, -1) BETWEEN @start_yearmonth AND @end_yearmonth;
SET @query = CONCAT(
‘CREATE TABLE part_of_partitioned_table (PRIMARY KEY(id))
SELECT partitioned_table.*
FROM partitioned_table PARTITION(‘, @partitions, ‘)
JOIN users u USING(user_id)
WHERE date(partitioned_table.date) BETWEEN ‘, @start_date, ‘ AND ‘, @end_date
);
PREPARE stmt FROM @query;
EXECUTE stmt;
“`
Bu örnekte, belirli bir tarih aralığındaki partition’ları seçerek dinamik bir sorgu oluşturulmuş ve bu sorgu çalıştırılmıştır.
—
Bu bilgilerle, MySQL’de değişkenlerin nasıl kullanıldığını ve satır numaralandırma işlemlerini daha iyi anlayabilirsiniz. Bir sonraki yazıda, JOIN’ler ve alt sorgular gibi daha gelişmiş SQL konularına değineceğiz.
—