SQL Notları: Regular Expressions (Regex) Kullanımı ve View Oluşturma

MySQL, veritabanı yönetiminde güçlü araçlar sunar. Bu araçlardan ikisi, **Regular Expressions (Regex)** ve **View** oluşturmadır. Bu yazıda, bu iki konuyu detaylı bir şekilde inceleyeceğiz.

#### 1. Regular Expressions (Regex) ile Veri Filtreleme

Regular Expressions (Regex), karmaşık arama desenlerini belirlemek için kullanılan güçlü bir araçtır. MySQL’de `REGEXP` (veya eş anlamlısı `RLIKE`) operatörü ile regex kullanarak verileri filtreleyebilirsiniz.

##### Örnek 1: Belirli Bir Desen İçeren İsimleri Seçme

Örneğin, `LAST_NAME` alanında “in” içeren ve `FIRST_NAME` alanında “a” harfi bulunan tüm çalışanları seçmek istiyorsanız:

“`sql
SELECT * FROM employees 
WHERE FIRST_NAME REGEXP ‘a’ 
AND LAST_NAME REGEXP ‘in’;
“`

Bu sorguda, `REGEXP` operatörü kullanılarak belirli bir desen aranıyor. `^` veya `$` kullanılmadığı için desen, metnin herhangi bir yerinde olabilir.

##### Örnek 2: Belirli Harflerle Başlayan İsimleri Seçme

Eğer `FIRST_NAME` alanı “A”, “B” veya “C” ile başlayan çalışanları seçmek istiyorsanız:

“`sql
SELECT * FROM employees 
WHERE FIRST_NAME REGEXP ‘^[ABC]’;
“`

Bu sorguda, `^` işareti, desenin başlangıcını belirtir. `[ABC]` ise “A”, “B” veya “C” harflerinden herhangi birini ifade eder.

##### Örnek 3: Desen Eşleşmelerini Sayma

Regex kullanarak eşleşen ve eşleşmeyen satırları saymak da mümkündür. Örneğin, `FIRST_NAME` alanı “N” ile başlayan çalışanları saymak için:

“`sql
SELECT 
   IF(FIRST_NAME REGEXP ‘^N’, ‘matches ^N’, ‘does not match ^N’) as matching,
   COUNT(*)
FROM employees
GROUP BY matching;
“`

Bu sorgu, “N” ile başlayan ve başlamayan isimlerin sayısını gruplayarak gösterir.

#### 2. View Oluşturma ve Kullanımı

View’lar, karmaşık sorguları basitleştirmek ve tekrar kullanılabilir hale getirmek için kullanılır. Bir view, bir veya daha fazla tablodan veri çeken bir `SELECT` sorgusunu paketler.

##### Örnek 1: Basit Bir View Oluşturma

Aşağıdaki örnekte, `t` tablosundan `qty` ve `price` sütunlarını seçen ve bu sütunların çarpımını içeren bir view oluşturuluyor:

“`sql
CREATE TABLE t (qty INT, price INT);
INSERT INTO t VALUES(3, 50);

CREATE VIEW v AS 
SELECT qty, price, qty*price AS value 
FROM t;

SELECT * FROM v;
“`

Bu view, `qty` ve `price` sütunlarını ve bunların çarpımını içeren bir tablo gibi davranır.

##### Örnek 2: İki Tablodan Veri Çeken View

View’lar, birden fazla tablodan veri çekmek için de kullanılabilir. Örneğin, `main_table` ve `other_table` tablolarından veri çeken bir view oluşturalım:

“`sql
CREATE VIEW myview AS
SELECT a.*, b.extra_data 
FROM main_table a
LEFT OUTER JOIN other_table b
ON a.id = b.id;
“`

Bu view, `main_table` ve `other_table` tablolarını birleştirir ve `extra_data` sütununu ekler.

##### Örnek 3: View’ı Güncelleme ve Silme

View’lar, tablolar gibi güncellenebilir veya silinebilir. Ancak, view’ların güncellenebilir olması için belirli koşullar vardır. Örneğin, `GROUP BY`, `UNION`, `HAVING`, `DISTINCT` gibi karmaşık sorgular içeren view’lar güncellenemez.

“`sql
CREATE VIEW few_rows_from_t1 AS 
SELECT * FROM t1 LIMIT 10;

DROP VIEW few_rows_from_t1;
“`

Bu örnekte, `t1` tablosundan ilk 10 satırı seçen bir view oluşturuluyor ve daha sonra bu view siliniyor.

#### 3. View’ların Kısıtlamaları

– View’lar, sistem değişkenlerine veya kullanıcı tanımlı değişkenlere referans veremez.
– View’lar, geçici tablolara referans veremez ve geçici view’lar oluşturulamaz.
– View’lar, tetikleyicilerle ilişkilendirilemez.
– View’lar, her zaman eşdeğer `SELECT` sorgusu kadar iyi performans göstermeyebilir.

#### Sonuç

MySQL’de **Regular Expressions** ve **View** oluşturma, veritabanı yönetiminde oldukça faydalı araçlardır. Regex, karmaşık arama desenleri oluşturmanıza olanak tanırken, View’lar karmaşık sorguları basitleştirir ve tekrar kullanılabilir hale getirir. Bu araçları etkili bir şekilde kullanarak, veritabanı sorgularınızı daha verimli hale getirebilirsiniz.

Bu yazıda, MySQL’de regex kullanımı ve view oluşturma konularını ele aldık. Umarım bu bilgiler, veritabanı yönetimi süreçlerinizde size yardımcı olur. Bir sonraki yazıda görüşmek üzere!