{"id":217,"title":"SQL Notlar\u0131: De\u011fi\u015fkenler ve Sat\u0131r Numaraland\u0131rma","content":"<p>MySQL'de de\u011fi\u015fkenler, sorgular s\u0131ras\u0131nda ge\u00e7ici de\u011ferler saklamak ve bu de\u011ferleri kullanmak i\u00e7in kullan\u0131l\u0131r. Ayr\u0131ca, de\u011fi\u015fkenler kullan\u0131larak sat\u0131r numaraland\u0131rma gibi i\u015flemler de ger\u00e7ekle\u015ftirilebilir. Bu b\u00f6l\u00fcmde, MySQL'de de\u011fi\u015fkenlerin nas\u0131l kullan\u0131ld\u0131\u011f\u0131n\u0131 ve sat\u0131r numaraland\u0131rma i\u015flemlerini inceleyece\u011fiz.<\/p><p>### 1. **De\u011fi\u015fkenlerin Tan\u0131mlanmas\u0131 ve Kullan\u0131m\u0131**<\/p><p>MySQL'de de\u011fi\u015fkenler `@` i\u015fareti ile tan\u0131mlan\u0131r ve `SET` veya `SELECT` ifadeleri ile de\u011fer atanabilir.<\/p><p>**\u00d6rnek Kullan\u0131m:**<br>```sql<br>SET @var_string = 'my_var';<br>SET @var_num = 2;<br>SET @var_date = '2015-07-20';<br>```<\/p><p>Bu \u00f6rnekte, `@var_string`, `@var_num` ve `@var_date` de\u011fi\u015fkenlerine s\u0131ras\u0131yla bir string, bir say\u0131 ve bir tarih de\u011feri atanm\u0131\u015ft\u0131r.<\/p><p>**SELECT ile De\u011fi\u015fken Atama:**<br>```sql<br>SELECT @var := '123';<br>```<\/p><p>Bu sorgu, `@var` de\u011fi\u015fkenine `'123'` de\u011ferini atar. `:=` operat\u00f6r\u00fc, de\u011fi\u015fken atama i\u015flemi i\u00e7in kullan\u0131l\u0131r.<\/p><p>**INTO ile De\u011fi\u015fken Atama:**<br>```sql<br>SELECT COUNT(*) INTO @total_users FROM users;<br>```<\/p><p>Bu sorgu, `users` tablosundaki toplam kay\u0131t say\u0131s\u0131n\u0131 `@total_users` de\u011fi\u015fkenine atar.<\/p><p>### 2. **Sat\u0131r Numaraland\u0131rma**<\/p><p>MySQL'de sat\u0131r numaraland\u0131rma i\u015flemi, de\u011fi\u015fkenler kullan\u0131larak ger\u00e7ekle\u015ftirilebilir. Bu, \u00f6zellikle sonu\u00e7 k\u00fcmesindeki sat\u0131rlara bir s\u0131ra numaras\u0131 eklemek istedi\u011finizde kullan\u0131\u015fl\u0131d\u0131r.<\/p><p>**\u00d6rnek Kullan\u0131m:**<br>```sql<br>SET @row_no := 0;<br>SELECT @row_no := @row_no + 1 AS row_number, team, person<br>FROM team_person;<br>```<\/p><p>Bu sorgu, `team_person` tablosundaki her sat\u0131r i\u00e7in bir sat\u0131r numaras\u0131 (`row_number`) olu\u015fturur ve sonu\u00e7 k\u00fcmesine ekler.<\/p><p>**Sonu\u00e7:**<br>```<br>+------------+------+----------+<br>| row_number | team | person &nbsp; |<br>+------------+------+----------+<br>| 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| A &nbsp; &nbsp;| John &nbsp; &nbsp; |<br>| 2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| B &nbsp; &nbsp;| Smith &nbsp; &nbsp;|<br>| 3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| A &nbsp; &nbsp;| Walter &nbsp; |<br>| 4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| A &nbsp; &nbsp;| Louis &nbsp; &nbsp;|<br>| 5 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| C &nbsp; &nbsp;| Elizabeth|<br>| 6 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| B &nbsp; &nbsp;| Wayne &nbsp; &nbsp;|<br>+------------+------+----------+<br>```<\/p><p>### 3. **Gruplara G\u00f6re Sat\u0131r Numaraland\u0131rma**<\/p><p>E\u011fer sat\u0131r numaraland\u0131rmay\u0131 belirli bir gruplama (\u00f6rne\u011fin, tak\u0131mlara g\u00f6re) yaparak ger\u00e7ekle\u015ftirmek istiyorsan\u0131z, de\u011fi\u015fkenler ve `IF` ifadesi kullan\u0131labilir.<\/p><p>**\u00d6rnek Kullan\u0131m:**<br>```sql<br>SELECT&nbsp;<br>&nbsp; &nbsp;@row_no := IF(@prev_val = t.team, @row_no + 1, 1) AS row_number,<br>&nbsp; &nbsp;@prev_val := t.team AS team,<br>&nbsp; &nbsp;t.person<br>FROM&nbsp;<br>&nbsp; &nbsp;team_person t,<br>&nbsp; &nbsp;(SELECT @row_no := 0) x,<br>&nbsp; &nbsp;(SELECT @prev_val := '') y<br>ORDER BY&nbsp;<br>&nbsp; &nbsp;t.team ASC, t.person DESC;<br>```<\/p><p>Bu sorgu, `team_person` tablosundaki sat\u0131rlar\u0131 `team` s\u00fctununa g\u00f6re gruplayarak her grup i\u00e7inde sat\u0131r numaraland\u0131rma yapar.<\/p><p>**Sonu\u00e7:**<br>```<br>+------------+------+----------+<br>| row_number | team | person &nbsp; |<br>+------------+------+----------+<br>| 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| A &nbsp; &nbsp;| Walter &nbsp; |<br>| 2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| A &nbsp; &nbsp;| Louis &nbsp; &nbsp;|<br>| 3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| A &nbsp; &nbsp;| John &nbsp; &nbsp; |<br>| 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| B &nbsp; &nbsp;| Wayne &nbsp; &nbsp;|<br>| 2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| B &nbsp; &nbsp;| Smith &nbsp; &nbsp;|<br>| 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| C &nbsp; &nbsp;| Elizabeth|<br>+------------+------+----------+<br>```<\/p><p>### 4. **De\u011fi\u015fkenlerle Dinamik Sorgular Olu\u015fturma**<\/p><p>De\u011fi\u015fkenler, dinamik sorgular olu\u015fturmak i\u00e7in de kullan\u0131labilir. \u00d6zellikle, b\u00fcy\u00fck veri setlerinde belirli ko\u015fullara g\u00f6re sorgular olu\u015fturmak istedi\u011finizde bu y\u00f6ntem kullan\u0131\u015fl\u0131d\u0131r.<\/p><p>**\u00d6rnek Kullan\u0131m:**<br>```sql<br>SET @start_date = '2015-07-20';<br>SET @end_date = '2016-01-31';<\/p><p>SET @start_yearmonth = (SELECT EXTRACT(YEAR_MONTH FROM @start_date));<br>SET @end_yearmonth = (SELECT EXTRACT(YEAR_MONTH FROM @end_date));<\/p><p>SELECT GROUP_CONCAT(partition_name)<br>INTO @partitions<br>FROM information_schema.partitions p<br>WHERE table_name = 'partitioned_table'<br>AND SUBSTRING_INDEX(partition_name, 'P', -1) BETWEEN @start_yearmonth AND @end_yearmonth;<\/p><p>SET @query = CONCAT(<br>&nbsp; &nbsp;'CREATE TABLE part_of_partitioned_table (PRIMARY KEY(id))<br>&nbsp; &nbsp;SELECT partitioned_table.*<br>&nbsp; &nbsp;FROM partitioned_table PARTITION(', @partitions, ')<br>&nbsp; &nbsp;JOIN users u USING(user_id)<br>&nbsp; &nbsp;WHERE date(partitioned_table.date) BETWEEN ', @start_date, ' AND ', @end_date<br>);<\/p><p>PREPARE stmt FROM @query;<br>EXECUTE stmt;<br>```<\/p><p>Bu \u00f6rnekte, belirli bir tarih aral\u0131\u011f\u0131ndaki partition'lar\u0131 se\u00e7erek dinamik bir sorgu olu\u015fturulmu\u015f ve bu sorgu \u00e7al\u0131\u015ft\u0131r\u0131lm\u0131\u015ft\u0131r.<\/p><p>---<\/p><p>Bu bilgilerle, MySQL'de de\u011fi\u015fkenlerin nas\u0131l kullan\u0131ld\u0131\u011f\u0131n\u0131 ve sat\u0131r numaraland\u0131rma i\u015flemlerini daha iyi anlayabilirsiniz. Bir sonraki yaz\u0131da, JOIN'ler ve alt sorgular gibi daha geli\u015fmi\u015f SQL konular\u0131na de\u011finece\u011fiz.<\/p><p>---<\/p><p>&nbsp;<\/p>","excerpt":"MySQL'de de\u011fi\u015fkenlerin nas\u0131l kullan\u0131ld\u0131\u011f\u0131n\u0131 ve sat\u0131r numaraland\u0131rma i\u015flemlerini daha iyi anlayabilirsiniz. Bir sonraki yaz\u0131da, JOIN'ler ve alt sorgular gibi daha geli\u015fmi\u015f SQL konular\u0131na de\u011finece\u011fiz.","created_at":"2025-01-13 14:42:59","updated_at":"2026-09-23 13:43:27","category_id":9,"view_count":572,"reading_time":4,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2025-01-13 14:42:59","featured_image":"resimyok.jpg","slug":"sql-notlari-degiskenler-ve-satir-numaralandirma","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim"}