Veritabanı ve MySQL Sistemleri #2

in utopian-io •  7 years ago  (edited)

Ne Öğreneceğim?

  • MySQL
  • Database

Gereksinimler

  • MySQL Server

Zorluk

  • Orta Düzey

Giriş

Günümüzde masaüstü, web ya da mobil uygulamalar; içerik kaynaklarını veritabanı denilen özel depolama birimlerinde saklar. Veritabanı, dosya ve diğer veri saklama ünitelerine göre çok daha sağlam ve çok daha performanslıdır.

Veritabanı ve MySQL Sistemleri serimizin ikinci ve son yazısında blog içeriğinden ziyade biraz daha teknik konulara değinerek bir kaç örnek ile devam edelim.

Takma İsimler (Alias)

Sorgulama işlemlerinde tablolardan kayıtlar alınırken bazen sütun isimlerinin sorgulama esnasında değiştirilmesi istenebilir. Eğer bir sütuna takma isim vermek isterseniz, sütun isimlerinden hemen sonra AS deyimini kullanarak yeni isim verebilirsiniz. Bu işlem sırasında tablonun yapısı değiştirilmez, sadece sorgudan alınan veri yapısı belirtilen biçimde ayarlanır. Tablomuzun yapısı aşağıdaki gibi olsun.
1.png
SELECT ad, sehir AS memleket FROM ogrenci;

Yukarıdaki örnek MySQL cümleciği ile tablodan ad ve sehir alanları seçilmektedir. Ayrıca sehir alanına takma isim (lakap) uygulanarak memleket olarak değiştirilmiştir.

Bu durumda tablodan veriler alınırken, sütun isimleri yandaki çıktıda olduğu gibi olacaktır. (sehir sütun ismi memleket olarak değiştirildiğine dikkat edin.)

Hazır Fonksiyonlar

Bu bölümde ise hayatımızı kolaylaştıran bazı hazır fonksiyonlardan bahsedeceğim. Bu bölümde yer alan hazır fonksiyonların dışında çok daha fazla fonksiyon vardır. En çok kullanılan hazır fonksiyonları görevlerine göre ayırarak sırayla öğrenmeye başlayalım.

Kümeleme Fonksiyonları

Kümeleme fonksiyonları (count hariç) genellikle GROUP BY deyimi ile birlikte kullanıldığıda anlamlı hâle gelir. Fakat yine de bu fonksiyonları GROUP BY deyimi ile kullanmak zorunda değilsiniz. Kümeleme fonksiyonları ile işlem yapılırken genellikle fonksiyon değerini hangi sütun ismiyle belirtileceği bilinemediğinden dolayı AS deyimi ile birlikte takma isim (alias) oluşturulur. İlerleyen örneklerde fonksiyonlardan sonra AS deyiminin neden kullanıldığını şimdiden ifade etmiş olayım. Aşağıdaki tabloda kümeleme fonksiyonları ve açıklamaları yer almaktadır.

3.png
Yukarıdaki çizelgede yer alan kümeleme fonksiyonları ile ilgili örneklere geçmeden önce yine bir tablo oluşturmak ve bu tabloya göre MySQL cümleciklerinin verdikleri tepkileri göstermek istiyorum. Bu örnekte kullanacağımız tablo yapısı ve içerdiği veriler aşağıdaki gibi olsun.

hj.png
SELECT COUNT (id) AS personel_sayisi FROM personel;

Yukarıdaki MySQL cümleciği ile çalışan personel sayısı bulunabilir. COUNT () fonksiyonuna hangi sütun alanının yazıldığının bir önemi yoktur. İsteğe bağlı olarak COUNT ( * ) biçiminde kullanılabilir. Örnek MySQL cümleciği ile aşağıdaki sonuç kümesi döndürülür.
a.png
SELECT SUM (maas) AS toplam_maas FROM personel;

Yukarıdaki MySQL cümleciği ile tabloda bulunan tüm kayıtların toplam maaşları hesaplanarak döndürülür. SUM () fonksiyonu ile hangi sütundaki değerlerin toplanacağı belirtilmelidir ve belirtilen değerin sayısal bir veri içermesi gereklidir. Örnek MySQL cümleciği ile aşağıdaki sonuç kümesi döndürülür.
n.png
SELECT pozisyon, SUM (maas) AS pozisyon_maaslari FROM personel GROUP VY pozisyon;

Sonuçları gruplama konusunda da ifade ettiğimiz gibi GROUP BY deyimi kümeleme fonksiyonları ile kullanıldığında gerçekten bir anlam ifade etmektedir. Örneğin; yukarıdaki MySQL cümleciği ile her pozisyonun aldığı toplam maaş hesaplanmaktadır. Buna göre, örnek MySQL cümleciği ile aşağıdaki sonuç kümesi döndürülür.
q.png
SELECT AVG (maas) AS ortalama_maas FROM personel personel GROUP BY pozisyon;

Bu örneğimizzde ise her pozisyonun aldığı ortalama maaş hesaplanmaktador. AVG () ile ortalama hesaplayan hazır fonksiyon da, aynı SUM () fonksiyonunda olduğu gibi çalışır.

Buna göre, örnek SQL cümleciği ile aşağıdaki sonuç kümesi döndürülür.
g.png
SELECT adsoyad, MIN (maas) FROM personel LIMIT 1;

Yukarıdaki örnekte ise çalışan personeller arasında en düşük maaş alan personelin adı soyadı ve maaş bilgisi talep edilmektedir. Örnek MySQL cümleciği ile aşağıdaki sonuç kümesi döndürülür.
w.png
SELECT adsoyad, MAX (maas) FROM personel LIMIT 1;
Yukarıdaki örnekte ise çalışan personeller arasında en yüksek maaş alan personelin adı soyadı ve maaş bilgisi talep edilmektedir. Örnek MySQL cümleciği ile aşağıdaki sonuç kümesi döndürülür.
j4.png

Zaman Fonksiyonları

Sorgularda sıklıkla kullanılan zaman fonksiyonları (genellikle en çok ihtiyaç duyulanlar) bu bölümde incelenmektedir. Zaman fonksiyonları kullanılarak MySQL sorgularında kayıtlar ile ilgili zaman değerleri kolayca ayarlanabilir. Zaman fonksiyonları, üzerinde çalışan sistem saatine göre tepki verir.

  • CURRENT_DATE( )
    Üzerinde çalışan sunucunun tarih değerini YYY-MM-DD formatında verir. Ayrıca bu fonksiyon yerine CURDATE( ) işlevi de kullanılabilir.
    SELECT CURRENT_DATE ( ); # Sonuç: '2018-01-23'
    SELECT CURDATE ( ); # Sonuç: '2018-01-23'

  • CURRENT_TIME( )
    ÜZerinde çalışan sunucunun saat değerini HH:MM:SSformatında verir. Ayrıca bu fonksiyon yerine CURTIME( ) işlevi de kullanılabilir. Aşağıdaki bu iki fonksiyonun aynı sonucu üreteceğini gösteren örnek yer almaktadır.
    SELECT CURRENT_TIME ( ); # Sonuç: '04:59:15'
    SELECT CURTIME ( ); # Sonuç: '04:59:15'

  • NOW( )
    Üzerinde çalışılan sunucunun o anki tarih ve saat değerini YYYY-MM-DD HH:MM:SS formatında verir. Ayrıca bu fonksiyon yerine CURRENT_TIMESTAMP ( ) işlevi de kullanılabilir.
    SELECT NOW ( ); # Sonuç: '2018-01-23 04:59:15'
    SELECT CURRENT_TIMESTAMP ( ); # Sonuç: '2018-01-23 04:59:15'

  • DAY ( )
    Belirtilen zaman damgasından sadece gün değerini (sayısal olarak) döndürür.
    SELECT DAY('2018-01-23 04:59:15'); # Sonuç: '23'

  • MONTH ( )
    Belirtilen zaman dalgasından sadece ay değerini (sayısal olarak) döndürülür.
    SELECT MONTH('2018-01-23 04:59:15'); # Sonuç: '1'

  • YEAR ( )
    Belirtilen zaman damgasından sadece yıl değerini (sayısal olarak) döndürür.
    SELECT YEAR('2018-01-23 04:59:15'); # Sonuç: '2018'

  • DATE ( )
    Belirtilen zaman damgası eğer tarih ve saat formatından oluşuyor ise, sadece tarih değerini döndürür.
    SELECT DATE('2018-01-23 04:59:15'); # Sonuç: '2018-01-23'

  • TIME ( )
    Belirtilen zaman damgası eğer tarih ve saat formatından oluşuyor ise, sadece saat değerini döndürür.
    SELECT TIME('2018-01-23 04:59:15'); # Sonuç: '04:59:15'

  • DATE FORMAT ( )
    Zaman damgalarını bir dizge ile formatlamak için kullanılır. Ayrıca bu fonksiyon ile zaman damgasından istenilen (sadece yıl, gün, ay bilgisi gibi) bilgi kolayca elde edilebilir. İlk parametre olarak zaman damgası ve ikinci parametre olarak dizge gönderilir. Dizgenin hemen başına yüzde işareti (%) konulması gerekmektedir.
    SELECT DATE_FORMAT (NOW(), '%Y/%m/%d'); # Sonuç: '2018/01/23'
    Yukarıdaki örnekte sistemin şimdiki tarih ve saat değerini farklı biçimde formatlayarak ekrana yazdırdık.
    SELECT DATE_FORMAT ('2018-01-23 04:59:15', '%H-%i-%s'); # Sonuç: '4-59-15'
    Yukarıdaki örnekte ise, zaman damgasını elle belirterek saat değerini farklı formatta ekrana yazdırdık. Dikkat ederseniz giriş dizgesinde saat değerleri arasında iki nokta üst üste iken, formatlama işleminde kısa tire ile çıktı aldık.

Metin İşleme Fonksiyonları

MySQL ile birlikte kullanabileceğiniz birçok metin işleme (string) fonksiyonları olmasına rağmen, bu bölümde en çok kullanılanlara yer vereceğim.

  • LENGTH ( )
    Bu işlev ile birlikte tanımlanan (parametre olarak gönderilen) string ifadesinin uzunluğunu sayısal olarak döndürür.
    SELECT LENGTH ('Merhaba Utopian'); # Sonuç: '15'

  • TRIM ( )
    String bir ifadenin başındaki ve sonundaki boşlukları temizlemek için kullanılır. String ifadenin sadece başındaki boşlukları temizlemek için LTRIM( ) veya sadece sonundaki boşlukları temizlemek için ise RTRIM( ) işlevleri kullanılabilir.
    SELECT TRIM(' Utopian '); # Sonuç: 'Utopian'
    SELECT LTRIM(' Utopian '); # Sonuç: 'Utopian '
    SELECT RTRIM(' Utopian '); # Sonuç: ' Utopian'

  • SUBSTRING ( )
    String bir ifadenin belirtilen karakterinden başlayarak belirli bir uzunluktaki kısmını döndürür.
    SELECT SUBSTRING ('Utopian', 3);# Sonuç: 'ian'
    SELECT SUBSTRING ('Utopian', -3,2); # Sonuç: 'ia'

  • LEFT ( )
    String bir ifadenin başından belirlenen karakter kadarını döndürür.
    SELECT LEFT ('Utopian', 2); # Sonuç: 'Ut'

  • RIGHT ( )
    String bir ifadenin sonundan belirtilen karakter kadarını döndürür.
    SELECT RIGHT ('Utopian', 4); # Sonuç: 'pian'

  • CONTAC ( )
    Parametre olarak (virgül ile birbirinden ayrılmış halde) gönderilen string ifadeleri birleştirilerek tek bir string oluşturur.
    SELECT CONTAC('Steemit' , '&' , 'Utopian'); # Sonuç: 'Steemit&Utopian'

İndeksler (index)

WHERE sorgularının çok sık kullanıldığı alanlar için, arama işlemini daha hızlı gerçekleştirmek için indeksler kullanılır. Eğer tabloda indeks tanımlı değil ise, sorgulama esnasında birinci kayıttan başlanarak kayıt bulunana kadar tek tek sorgulama yapılır. Index'ler sayesinde tarama işlemi rastgele yapılır. Bir tabloda en fazla 32 sütunda indeks oluşturulabilir.

Bazı WHERE sorgularında AND operatörü kullanarak birden fazla sütunda arama gerçekleştirilebilir. Bu durumda birden fazla (en fazla 15 adet) sütunu kapsayacak şekilde indeksler de oluşturulabilir.

MySQL veritabanı yönetim sistemi, tanımlı indeksleri aşağıdaki durumlarda kullanacaktır.

  • WHERE ifadelerin uyan satırları daha hızlı aramak için.
  • Sıralama ve gruplama işlemini organize etmek için.
  • Birleştirme işlemlerinde (JOIN) diğer tablolardan satır atlamak için.
  • Gruplama işlemlerinden MAX( ), MIN( ) ve AVG( ) gibi değerleri hesaplamak için.

CREATE INDEX indeks_adi ON tablo_adi (sutun1, sutun2, ...);

Yukarıda yer alan yazım şekli ile bir tablo üzerinde indeks oluşturulabilir. Oluşturulan bir indeksi silmek için ise DROP INDEX komutundan hemen sonra indeksin adı yazılması yererlidir.
DROP INDEX indeks_adi

Katkılarından dolayı Sercan Çakır'a teşekkürler.

Veritabanı ve MySQL serimizi sonlandırmış bulunmaktayız, benzer bir çok alıştırma yaparak database bilginizi geliştirebilirsiniz. Okuduğunuz için teşekkürler, iyi çalışmalar.

Series



Posted on Utopian.io - Rewarding Open Source Contributors

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Good information 👍👍👍👍 i like it @sedatyildiz

Thanks.

Thank you to 👍👌🎁

Hocam çok güzel anlatmışsın eline sağlık.

Teşekkür ederim vakit ayırıp okuduğunuz için.

Thank you for the contribution. It has been approved.

You can contact us on Discord.
[utopian-moderator]

Thank you.

Hey @sedatyildiz I am @utopian-io. I have just upvoted you!

Achievements

  • You have less than 500 followers. Just gave you a gift to help you succeed!
  • Seems like you contribute quite often. AMAZING!

Suggestions

  • Contribute more often to get higher and higher rewards. I wish to see you often!
  • Work on your followers to increase the votes/rewards. I follow what humans do and my vote is mainly based on that. Good luck!

Get Noticed!

  • Did you know project owners can manually vote with their own voting power or by voting power delegated to their projects? Ask the project owner to review your contributions!

Community-Driven Witness!

I am the first and only Steem Community-Driven Witness. Participate on Discord. Lets GROW TOGETHER!

mooncryption-utopian-witness-gif

Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x