SlideShare a Scribd company logo
1 of 70
Download to read offline
T.C.
      MİLLÎ EĞİTİM BAKANLIĞI




  BİLİŞİM TEKNOLOJİLERİ




INTERNET PROGRAMCILIĞI - 5
           482BK0098




            Ankara, 2011
   Bu modül, mesleki ve teknik eğitim okul/kurumlarında uygulanan Çerçeve
    Öğretim Programlarında yer alan yeterlikleri kazandırmaya yönelik olarak
    öğrencilere rehberlik etmek amacıyla hazırlanmış bireysel öğrenme
    materyalidir.
   Millî Eğitim Bakanlığınca ücretsiz olarak verilmiştir.
   PARA İLE SATILMAZ.
İÇİNDEKİLER

AÇIKLAMALAR ....................................................................................................................ii
GİRİŞ ....................................................................................................................................... 1
ÖĞRENME FAALİYETİ-1 ..................................................................................................... 3
1. MYSQL VERİ TABANI YÖNETİMİ................................................................................. 3
   1.1. Veri Tabanı Oluşturma (Create Database).................................................................... 3
      1.1.1. MySQL Veri Tabanı Sunucusu ............................................................................. 5
      1.1.2. MySQL Kurulumu................................................................................................. 5
      1.1.3. MySQL Yazım Kuralları ....................................................................................... 5
      1.1.4. MySQL Yeni Kullanıcı Oluşturma........................................................................ 6
   1.2. Tablo Oluşturma (Create Table) ................................................................................... 8
   1.3. Index Yapıları (Create Index) ..................................................................................... 12
   1.4. Insert Kullanımı .......................................................................................................... 14
   1.5. Select Kullanımı.......................................................................................................... 15
   1.6. Delete Kullanımı ......................................................................................................... 22
   1.7. Update Kullanımı........................................................................................................ 22
   1.8. Alter Kullanımı ........................................................................................................... 23
   1.9. MySQL Fonksiyonları ................................................................................................ 26
      1.9.1. Standart Fonksiyonlar.......................................................................................... 26
      1.9.2. Tarih ve Zaman Fonksiyonları............................................................................. 27
      1.9.3. Karşılaştırma Fonksiyon ve Operatörleri............................................................. 39
      1.9.4. Mantıksal Operatörler.......................................................................................... 40
      1.9.5. Kontrol Mekanizmaları ve Karakter Fonksiyonları............................................. 42
      1.9.6. Aritmetik Operatörler .......................................................................................... 46
      1.9.7. Matematiksel Fonksiyonlar ................................................................................. 47
   UYGULAMA FAALİYETİ .............................................................................................. 50
   ÖLÇME VE DEĞERLENDİRME .................................................................................... 51
ÖĞRENME FAALİYETİ–2 .................................................................................................. 53
2. PHP İLE MySQL VERİ TABANINA ERİŞMEK............................................................. 53
   2.1. PHP İle Veri Tabanı Etkileşimleri .............................................................................. 53
   2.2. MySQL Sunucusuna Bağlantı..................................................................................... 55
   2.3. Veri Tabanı Seçimi ..................................................................................................... 55
   2.4. Veri Tabanını Sorgulamak .......................................................................................... 56
   2.5. SQL Sunucu Üzerinde İşlemler .................................................................................. 56
   2.6. MySQL Bağlantısını Kapatma.................................................................................... 57
   UYGULAMA FAALİYETİ .............................................................................................. 61
   ÖLÇME VE DEĞERLENDİRME .................................................................................... 62
MODÜL DEĞERLENDİRME .............................................................................................. 63
CEVAP ANAHTARLARI ..................................................................................................... 64
ÖNERİLEN KAYNAKLAR.................................................................................................. 65
KAYNAKÇA ......................................................................................................................... 66




                                                                       i
AÇIKLAMALAR
                 AÇIKLAMALAR

KOD              482BK0098
ALAN             Bilişim Teknolojileri
DAL/MESLEK       Web Programcılığı
MODÜLÜN ADI      Internet Programcılığı - 5

                 Gerekli ortam sağlandığında programlama komutları
MODÜLÜN TANIMI   yardımıyla veri tabanı işlemleri yapma ile ilgili konuların
                 anlatıldığı öğrenme materyalidir.

SÜRE             40/32
ÖN KOŞUL         Internet Programcılığı - 4 modülünü başarmış olmak
YETERLİK         Programlama içinde form ve nesneler kullanmak
                 Genel Amaç
                 Gerekli ortam sağlandığında hazırlanan program ile veri
                 tabanı işlemleri yapabileceksiniz.

MODÜLÜN AMACI    Amaçlar
                  Veri tabanı programlama dilinin (MySQL) kullanımını
                 öğrenerek uygulamalar yapabileceksiniz.
                  Veri tabanı programlama diliyle etkileşimli web (php ile)
                 uygulamaları gerçekleştirebileceksiniz.
                 Ortam
                 Bilişim teknolojileri laboratuvarı, işletme ortamı, bilgisayar
EĞİTİM ÖĞRETİM
                 laboratuvarı
ORTAMLARI VE
                 Donanım
DONANIMLARI
                 Projeksiyon, bilgisayar… web programlama yazılımlarını
                 çalıştırabilecek yeterlikte bilgisayar, , internet bağlantısı
                  Her faaliyet sonrasında o faaliyetle ilgili değerlendirme
                 soruları ile kendi kendinizi değerlendireceksiniz.
ÖLÇME VE
                  Öğretmen, modül sonunda size ölçme aracı (uygulama,
DEĞERLENDİRME
                 soru-cevap)      uygulayarak     modül     uygulamaları      ile
                 kazandığınız bilgi ve becerileri ölçerek değerlendirecektir.




                                 ii
GİRİŞ
                                        GİRİŞ
      Sevgili Öğrenci,

      Programlama ile birlikte insanlar tüm verilerini bilgisayar ortamında tutmak
istemişlerdir. Bunun için hemen hemen tüm programlama dillerinde dosyalama işlemi
yapılabilmektedir. Bu ortamlardaki kısıtlamalar, her şey istenildiği gibi yapılamadığından
sadece veri kontrollerinde iyi olan programlama dilleri geliştirilmiştir.

       Veri tabanı programları; bir kurumun çalışanlarının kimlik, adres, kurum vb.
bilgilerinin tutulup işlendiği ve bunlarla ilgili değişikliklerin yapıldığı programlama
dilleridir.

       MySQL Linux ve PHP ile çok iyi anlaşabilen bir veri tabanı programlama dilidir.
Günümüzde zaten web tasarımcısı olan birisi, tasarımını bir veri tabanıyla mutlaka
birleştirmelidir. Çünkü artık insanlar işlerini web ortamına taşımışlardır. İnternet üzerinden
alışveriş yapmak, okullara kayıt yaptırmak veya bilgilerini görmek, uçak veya otobüs bileti
almak gibi işlemlerde sizin bilgileriniz hep bu veri tabanlarında tutulmaktadır.

       Internet ortamında veri tabanı işlemi için de bazı web programlama dilleri, kendilerine
uygun olan, anlaşabileceği veri tabanı programlama dilini seçer. PHP birçok veri tabanı
dilini destekler. MySQL de birçok web programlama dilinde çalışır. Ama sanki PHP
MySQL, MySQL de PHP için geliştirilmiştir gibidir. İkisi de açık kod, ucuz veya bedava
olan dillerdir.




                                              1
2
ÖĞRENME FAALİYETİ–1
                   ÖĞRENME FAALİYETİ-1
     AMAÇ

      Veri tabanı programlama dilinin (MySQL) kullanımını öğrenerek uygulamalar
yapabileceksiniz.

   ARAŞTIRMA

            Dünya çapında kullanılan veri tabanı programlarını araştırınız.
            MySQL ve diğer veri tabanlarını avantaj ve dezavantaj olarak karşılaştırınız.
            Herhangi bir alışveriş web sitesinin nasıl veri kaydı yaptığını araştırınız.

      Araştırma işlemleri için üyelik gerektiren web sitelerinin üyelik bilgilerinin nasıl
tutulduğunu, alışveriş sitelerinin nasıl hazırlandığını düşünerek böyle birkaç web sitesini
inceleyiniz.



        1. MYSQL VERİ TABANI YÖNETİMİ
1.1. Veri Tabanı Oluşturma (Create Database)
       Veri tabanı (database), verilerin bilgisayar ortamında saklanması olarak tanımlanabilir.
Aynı tür bilgileri içeren veriler birkaç gruba ayrılır ve bu grupların her birine tablo (table)
denir. Veri tabanı tablo veya tablolardan oluşur. Tablolar da her bir bilginin saklandığı
alanlardan (fields) oluşur.

                                     VERİ TABANI



    TABLO - 1                           TABLO - 2                              TABLO - 3


     ALAN - 1                            ALAN - 1                               ALAN - 1

     ALAN - 2                            ALAN - 2                               ALAN - 2


     ALAN - n                            ALAN - n                               ALAN - n



                                           Şekil 1.1

                                              3
Bir veri tabanı adından da anlaşılacağı gibi bilgilerin depolandığı hiyerarşik bir
yapıdır. Biz web üzerinde kullanıcı adı, şifresi, e-posta adresi gibi bilgileri bu veri
tabanlarında saklarız. Aynı bilgileri bir dosyaya yazıp gerektiğinde dosyayı açıp bilgileri
okutmak da bir çözüm gibi görünse de bu işlem hem daha karmaşık ve zahmetli hem de daha
yavaştır. Aslında az çok İngilizce bilen birisi için MySQL kullanmak pek zor olmayacaktır.

      Veri tabanlarında tutulacak bilgilerin doğru olarak girilmesi, tekrarlı kayıtların
olmaması, verilerin güvenliği gibi özellikler ancak bir veri tabanı yöntemiyle
sağlanmaktadır. Bunları sağlayan birçok veri tabanı sunucusu vardır. Progress, Oracle,
Sybase, ProsgreSQL, MySQL, Access bunlardandır.




                                   Resim 1.1: Dosyalama


    MySQL’de veri tabanı oluşturmak oldukça kolaydır. Bunun için CREATE
DATABASE komutu kullanılır.

      Kullanımı:

      CREATE DATABASE veri tabanı_adı;

      veri tabanı_adı yerine oluşturmak istediğiniz veri tabanının adını yazmanız gerekir.

      Örnek: Aşağıdaki komutlarla ogrenci adlı bir veri tabanı oluşturulmuştur.

      mysql>create database ogrenci;
      Query OK,1row affected (0.03 sec)

      Bu veri tabanınızın kolaylıkla oluşturulduğunu ve her şeyin yolunda olduğunu
gösterir.

                                             4
Veri Tabanı Silme (Drop)

      Artık ihtiyacınız olmadığına inandığınız bir veri tabanını DROP DATABASE
komutuyla silebilirsiniz. Bu komutu uygulamadan önce çok iyi düşünmeli ve bu veri
tabanına ihtiyacınızın olmadığından emin olmalısınız. Çünkü bu sorgu ile tüm tabloları, tüm
indexleri ve veri tabanının kendisini silmiş olacaksınız. Yani kayıtlar geri gelmeyecektir.

      Kullanımı;

      DROP DATABASE veri tabanı_adı;

      veri tabanı_adı yerine silmek istediğiniz veri tabanının adını yazmanız gerekir.

      Örnek: Aşağıdaki komutlarla ogrenci adlı bir veri tabanı silinmiştir.

      mysql>drop database ogrenci;
      Query OK,1 row affected (0.03 sec)

      Bu veri tabanınızın kolaylıkla silindiğini gösterir.


1.1.1. MySQL Veri Tabanı Sunucusu

       MySQL veri tabanı ve sunucusunun en büyük özelliği ücretsiz oluşudur. Eğer ticari
amaçla kullanılacaksa az miktar ücret ödenmesi gerekebilir. MySQL sunucusunun en büyük
özelliklerinden birisi de PHP (web programlama dili) ile oldukça iyi çalışmasıdır. Sanki iki
ürün de birbiri için oluşturulmuş gibidir. MySQL sunucusu, işletim sisteminden bağımsız
olarak çalışmaktadır.

1.1.2. MySQL Kurulumu

       İnternet Programcılığı 1 modülünde de anlatıldığı gibi MySQL veri tabanı sunucusu
http://www.mysql.com adresinden indirilebilir. İndirilen sıkıştırılmış dosyayı herhangi bir
boş klasöre açılmalıdır. Açılan dosyalardan setup.exe programı çalıştırılır. MySQL
windows’ta standart olarak C:mysql klasörüne kurulacaktır.

1.1.3. MySQL Yazım Kuralları

      MySQL komut satırında dikkat edilmesi gereken kurallar şunlardır:

           Komut satırında yazılan ifadelerin bittiğini belirtmek için noktalı virgül ( ; )
            kullanılır.
            mysql>show databases;

           Bazı durumlarda noktalı virgül ( ; ) kullanılmaz.
            mysql>quit

                                               5
     Komutlar büyük veya küçük harfle yazılabilir.
            mysql>select current_time();
            mysql>SELECT CURRENT_TIME();

           Komutlar birden fazla satırda yazılabilir (sonuna noktalı virgül konulan
            komutlar, kelimeler bölünmemek kaydıyla).

     Doğru yazım:
     mysql> select
         > current_time();
     +--------------+
     |currnet time()|
     +--------------+
     |20:23:56      |
     +--------------+
     1 row in set (0.00 sec)
     mysql>

     Hatalı yazım:

     mysql>select current_
        >time();
     ERROR 1064: You have an error in your SQL syntax near ‘()’ at line 2
     mysql>

           Komutlarda Türkçe karakterler (ğ,Ğ,ı,İ,ş,Ş,ü,Ü,ö,Ö,ç,Ç) kullanılmaz.

1.1.4. MySQL Yeni Kullanıcı Oluşturma

      MySQL veri tabanı sistemi birçok farklı veri tabanı destekleyebilir. Genellikle
uygulama başına bir veri tabanı olacaktır. MySQL’de en kolay kısımlarından biri veri tabanı
oluşturmaktır. Bunun içinse MySQL sunucusunda tam yetkili bir kullanıcı olmanız gerekir.
Kurlumu siz yaptıysanız zaten yetkili sizsinizdir. Kurulum aşamasındaki şifrenizi
unutmayınız. Şimdi yeni bir yetkili kullanıcı eklemek için aşağıdaki komutlar kullanılır:

     mysql>GRANT ALL PRIVILEGES ON *.* TO miho@localhost INDENTFIED BY
       ‘mihoparola’ WITH GRANT OPTION;

     MySQL sunucusuna okuma, ekleme, düzeltme ve silme hakkı olan bir kullanıcıyı
eklemek için aşağıdaki komutlar kullanılır:

     mysql>insert into user
      >host,
      >user,
      >password,
      >Select_priv,
      >Insert_priv,
      >Update_priv,
                                            6
>Delete_priv,
        >Create_priv,
        >Drop_priv,
        >Reload_priv,
        >Shutdown_priv,
        >Process_priv,
        >File_priv,
        >Grant_priv,
        >References_priv,
        >Index_priv,
        >Alter_priv)
      VALUES
      (‘#’,’ahmet’,PASSWORD(‘3348’),’Y’, ’Y’, ’Y’, ’Y’,’N’, ’N’, ’N’, ’N’, ’N’, ’N’, ’N’,
      ’N’, ’N’, ’N’);

      Kullanıcı adı “ahmet”, şifresi “3348” olan tüm yetkilere sahip bir kullanıcı oluşturulur.
Yeni kullanıcıların tanımlarının geçerli olabilmesi için MySQL sunucusunda çıkılmalı ve
aşağıdaki komut satırı uygulanmalıdır.

    MySQL sunucusunda database oluşturma hakkı olan bir kullanıcı Create
database komutuyla yeni bir database oluşturabilir.

      Kullanımı:
      mysql>create database <veri tabanı adı>;

      Örnek:
      mysql> create database mezunlar;
      Query OK, 1 row affected (0.00 sec)

      Veri tabanını seçme (use):

      Artık mezunlar diye bir veri tabanı oluşturulmuştur. Fakta bu veri tabanını
kullanabilmek için seçmemiz gerekmektedir. Veri tabanını seçmek için use komutu
kullanılır.

      Kullanımı:
      mysql>use <database adı>;

      Örnek:
      mysql>use mezunlar;
      database changed
      Mezunlar veri tabanı seçilmiş oldu.




                                              7
1.2. Tablo Oluşturma (Create Table)
       Veri tabanı oluşturmada bir sonraki adım, tablo oluşturmaktır. Bunu, create table
MySQL komutunu kullanarak yapabiliriz. Tablo oluşturma işlemi yapılmadan önce mutlaka
veri tabanı seçilmelidir (use komutuyla). Bir create table ifadesinin genel formu şöyledir.




                                           Resim 1.2
      Kullanımı:
      Create Table <tablo adı>
      alan_adı veri_türü [Default ifade][alan_kısıtlaması],
      …
      …
      [tablo kısıtlaması]);

 Tablo Adı            :    Tabloya verilecek isim (örnek: mezunkayit)
 Alan Adı             :    Tabloda yer alacak bilgi alanlarının adı (örnek: ogr_no, adi,
                           soyadi)
 Alan Veri Türü       :    O alana girilecek bilginin türü (sayı, metin, tarih)
 Default İfade        :    O alan belirtilmezse başlangıçta atanacak değer
 Alan Kısıtlaması     :    O alanla ilgili kısıtlama (boş olmaması, o alana sadece E veya K
                           girilmesi gibi kısıtlamalar)
 Tablo                :    Her kaydın belirli alanlara göre kısıtlanması (kayıtların tek
 Kısıtlaması               olmasını sağlamak, başka bir tabloyla ilişkilendirmek)

      MySQL’de üç temel veri tipi vardır. Bunlar; sayısal (numeric), tarih ve saat (date and
time) ve karakter katarıdır (string). Bu kategorilerin her birinin içinde de pek çok tip bulunur.
Her bir tipin hafızada çeşitli depolama boyutları vardır. Veri türleri ve özellikleri aşağıdaki
tabloda görülmektedir.




                                               8
Resim 1.3: Örnek veri tabanı algoritması




                                  Alan Veri Türleri
                          Sayısal (Numeric) Veri Türleri
        Veri Türü                            Aralık            Kapladığı Yer
TINYINT                 -128 ile 127 arasında                  1 byte
[(m)][UNSIGNED]
[ZEROFILL]
SMALLINT                -32768 ile 32767 arasında              2 byte
[(m)][UNSIGNED]
[ZEROFILL]
MEDIUM                  -8388608 ile 8388607 arasında          3 byte
(m)][UNSIGNED][ZERO
FILL]
INT[(m)][UNSIGNED][Z    -2147483648 ile 2147483647 arasında    4 byte
EROFILL]
BIGINT                  -9223372036854775808 ile               8 byte
[(m)][UNSIGNED][ZERO    9223372036854775807 arasında
FILL]
FLOAT                   Virgülden sonra 4 ya da 8 haneli       4 byte
FLOAT (m,n)             İşaretli küçük reel sayı               4 byte
DOUBLE PRECISION        İşaretli normal reel sayı              8 byte
[(m,n)]
REAL [(m,n)]            Double ile aynıdır.                    8 byte
DECIMAL [(m,n)]         Double ile aynıdır.                    (m+n) byte
NUMERIC [(m,n)]         Decimal ile aynıdır.                   (m+n) byte
                                       9
Tarih ve Saat (Date and Time) Veri Türleri
        Veri Türü                            Aralık                         Kapladığı Yer
 TIMESTAMP [(m)]        O andaki sistem zamanını tutar (tarih ve            4 byte
                        saat)
 DATE                   YYYY-MM-DD,YY-MM-                                   4 byte
                        DD,YYMMDD formatında 0000-0-00 ile
                        9999-12-31 arasında
 TIME                   HH:MM:SS,HHMMSS,HHMM,HH                             3 byte
 DATETIME               YYYY-MM-DD HH:MM:SS                                 8 byte
                    Alfasayısal (Karakter-String) Veri Türleri
          Veri Türü                          Aralık                         Kapladığı Yer
 CHAR (m)[BNIARY]       M:1 ile 255 arası BINARY kullanılırsa               m byte
                        aramalarda büyük/küçük harf ayrımı
                        vardır.
 VARCHAR                 (m) [BINRY] Char ile aynıdır, fakat                (Girilen
                        kapladığı alan açısından farklıdır.                 uznlk+1) byte
 TINYTEXT(m),[BINARY Char ile aynıdır, fakat kapladığı yer                  (Girilen
 ]                      açısından farklıdır.                                uznlk+1) byte
 TINYTEXT ve            Varchar ile aynıdır. Küçük/büyük harf               (Girilen
 TINYBLOB               ayrımı vardır. Uzunluk belirtilmez.                 uznlk+1) byte
 TEXT ve BLOB           Küçük/büyük harf ayrımı vardır. Uzunluk             (Girilen
                        belirtilmez. Max. 65535 karakter                    uzunluk+2)
                                                                            byte
 MEDIUMTEXT ve                Küçük/büyük harf ayrımı vardır. Uzunluk       (Girilen uznlk
 MEDIUMBLOB                   belirtilmez. Max. 16777216 karakter.          + 3) byte
 LONGTEXT ve                  Küçük/büyük harf ayrımı vardır. Uzunluk       (Girilen
 LONGBLOB                     belirtilmez. Max. 4294967295 karakter         uznlk+4) byte
 ENUM(‘değer1’,’değer2’,      Verilen değerlerden bir tanesi mutlaka        En fazla 2 byte
 ….,’değern’)                 seçilidir (Alan kısıtlamasında kullanılır).
 SET (‘değer1’,               Verilen değerlerden birden çok seçilebilir.   1-8 byte
 ’değer2’,…., ’değern’)                                                     arasında

                                  Tablo 1.1: Alan veri türü

      Örnek: Mezun olan öğrenciler için mezun bilgilerinin tutulacağı bir tablo oluşturalım.
Bu tablo için aşağıdaki alan adları bulunacaktır. Tablo adını kayit olarak kabul edelim.

      Alan adı- açıklama
      adi      : Öğrenci adı
      soyadi : Öğrenci soyadı
      ogrno    : Öğrenci Nu.

      Kayit tablosunun oluşturulması:

      mysql> create table kayit
        ->( ad varchar(15) not null,

                                             10
->soyad varchar(15)not null,
       ->ogrno smallint(5) unsigned,
       ->constraint ogrno_pk primary key (ogrno)
       ->);
     Query OK, 0 rows affected (0.08 sec)

       Örnek: Bir alışveriş sitesinde müşteri bilgilerini tutacak bir tablo için aşağıdaki
alanlar bulunacaktır. Tablo adı musteri olsun.

     Alan adı - açıklama
     Musteri_id : Müşteri numarası
     adsoyad : Müşteri adı ve soyadı
     adres     : Müşteri adresi
     sehir     : Şehir
     tlfon     : Telefon

     Musteri tablosunu oluşturulması:

     mysql> create table musteri
       ->(musteri_id int unsigned not null auto_increment primary key,
       ->adsoyad varchar(50) not null,
       ->adres varchar(100) not null,
       ->sehir varchar(15) not null,
       ->tlfon varchar(11) not null
       ->);
     Query OK, 0 rows affected (0.08 sec)

       Örnek: Bir satış sitesine konulacak ürünlerin tutulacağı urun adlı tabloyu aşağıdaki
gibi oluşturalım.

     Alan adı            Açıklama
     Urun_kodu         : Satılacak ürün kodu
     Urun_markasi      : Satılacak ürünün markası
     Urun_turu         : Satılacak ürün türü
     Urun_fiyati       : Satılacak ürünün fiyatı

     Urun tablosunun oluşturulması:

     mysql> create table urun
       ->( urun_kodu integer(5) zerofill not null,
       ->urun_markasi varchar(20)not null default ‘BELİRSİZ’,
       ->urun_turu varchar(20)not null default ‘BELİRSİZ’,
       ->urun_fiyati bigint(10) unsigned,
       ->constraint urun_kodu_pk primary key (urun_kodu),
       ->);
     Query OK, 0 rows affected (0.07 sec)


                                            11
Tabloları Silmek (Drop Table)

       Bazen bir tablonun tamamından kurtulmak isteyebilirsiniz. Bunun için DROP TABLE
ifadesiyle yapabilirsiniz. Genel kullanımı aşağıdaki gibidir.

      Kullanımı:
      DROP TABLE tablo_adi

      Örnek: musteri tablosunu silmek için aşağıdaki ifade kullanılır.

      mysql> drop table musteri;

      Bu sorgu, tablodaki tüm satırları ve tablonun kendisini sileceğinden kullanırken
dikkatli olunmalıdır.

1.3. Index Yapıları (Create Index)
      Bir index, veri tabanı ortamında tablo gibi bir nesnedir ve ilişkili olarak kullanıldığı
tablonun indexleme alanı (priamry key) olarak kullanılan kolondaki verilere göre sıralanmış
biçimde işleme sokulmasını sağlar. Bir tablo indexlenmiş ise bu tablo içinde
gerçekleştirilecek bir arama ya da koşullu listeleme işlemi çok daha hızlı biçimde
gerçekleştirilebilecektir. CREATE INDEX belirtilen bir tablo üzerinden bir indeks oluşturur.
İndekslerin birincil kullanım amacı, veri tabanı başarımını artırmaktır (ancak, uygunsuz
kullanımı başarının düşmesiyle sonuçlanır).
       İndeks için anahtar alanları sütun isimleri olarak ya da parantez içinde yazılmış
ifadeler olarak belirtilir. İndeksleme yöntemi, çok sütunlu indeksleri destekliyorsa çok sayıda
alan belirtilebilir. Bir indeks alanı, tablonun satırındaki bir veya daha fazla sütun değerinden
hesaplanan bir ifade olabilir. Bu özellik, bazı temel veri dönüşümlerini temel alan veriye
daha hızlı erişim sağlamak için kullanılabilir.
       Auto_increment, tam sayı sütunlarında kullanabileceğiniz özel bir MySQL özelliğidir.
Tabloya satırlar eklerken ilgili alanı boş bıraktığımızda MySQL otomatik olarak benzersiz
bir tanımlayıcı değer oluşturacaktır. Bu değer, sütundaki mevcut maksimum değerlerin bir
fazla olacaktır. Her tabloda yalnızca bir tane bulunabilir. Auto_increment içeren sütunlar
indexlenmelidir.
      Bir sütun adının ardından gelen primary key, bu sütunun tablo için birincil anahtar
olduğunu belirtir. Bu sütuna yapılan girişlerin benzersiz olması gerekir (T.C. kimlik Nu.,
okuldaki öğrenci Nu.gibi). MySQL bu sütunu otomatik olarak indexler. Yukarıdaki müşteri
tablosundaki musteri_id ile birlikte kullanıldığında Auto_increment ile birlikte görülür.
Birincil anahtar üzerindeki otomatik index, auto_increment için gereken indexle ilgilenir.
      Bir sütun adının ardından birincil anahtar (primary key) belirleme işlemi sadece tek
sütunluk birincil anahtarlar için yapılabilir. Birincil anahtarların belirtilmesi, bu sütunlarda
indexlerin oluşturulmasını sağlar.


                                              12
Birincil anahtarlar ya da indexler olmadan da tablo oluşturmak mümkündür. Yeni
başayan MySQL kullanıcılarının karşılaştıkları sorunlardan biri çok hızlı olduğunu duymuş
oldukları bu veri tabanından yeterli performans elde edememektir. Bu performans sorunuyla
karşılaşmalarının nedeni, veri tabanlarında hiçbir index oluşturmamış olmalarıdır.
      MySQL tarafından otomatik olarak oluşturulan indexler başlangıç için işimizi
görecektir. Eğer anahtar olmayan bir sütunda çok fazla sorgu çalıştırdığınızı fark ederseniz
performansı artırmak için bu sütuna bir index eklemek isteyebilirsiniz. Bunu CREATE
INDEX ifadesini kullanarak yapabilirsiniz. Bu ifadenin genel formu aşağıdadır.

      Kullanımı:

      CREATE [ UNIQUE ] INDEX isim ON tablo [ USING yöntem ]
        ( { sütun | ( ifade ) } [ işleç_sınıfı ] [, ...] )
        [ TABLESPACE tablo_alanı ]
        [ WHERE dayanak ]

      Parametreler

      UNIQUE

       İndeks oluşturulurken ve her veri eklenişinde tabloda birbirinin aynı değerler
bulunmaması için sistemin sınama yapmasını sağlar. Girdilerin yinelenmesine sebep olacak
bir veri girme veya güncelleme işleminin yapılmaya çalışılması bir hata üretecektir.

      İsim     : Oluşturulacak indeksin ismi (Burada şema nitelemeli isimler kullanılamaz.
      İndeks daima tabloyu içeren şemada oluşturulur.)

      Tablo     : İndekslenecek tablonun ismi (Şema nitelemeli olabilir.)

      Yöntem : İndeks için kullanılacak yöntemin ismi. Değer olarak, btree, hash, rtree ve
      gist verilebilir. btree öntanımlı yöntemdir.

      Sütun     : Tablo sütunun ismidir.

      İfade      : Tablonun bir ya da daha fazla sütünu ile ilintili bir ifade. İfade, yukarıdaki
      söz diziminde gösterildiği gibi parantez içinde yazılmalıdır. Ancak, ifade bir işlev
      çağrısı biçimindeyse parantez içine alınmayabilir.

      işleç_sınıfı: Bir işleç sınıfının ismidir. Ayrıntılar için aşağıya bakınız.

      tablo_alanı: İndeksin oluşturulacağı tablo alandır. Belirtilmezse default_tablespace
      yapılandırma değişkeninin değeri, bu değişkene bir değer atanmamışsa veri tabanının
      öntanımlı tablo alanı kullanılır.

      Dayanak : Bir kısmi indeks için kısıt ifadesi

                                                13
Örnekler:

      films tablosunun title sütunu üzerinde bir B-tree indeksi oluşturmak için:
      mysql> CREATE UNIQUE INDEX title_idx ON films (title);

       films tablosunun code sütunu üzerinde bir indeks oluşturup bu indeksin indexspace
tablo alanında kalması için:
      mysql>CREATE INDEX code_idx ON films(code) TABLESPACE indexspace;

      mysql>CREATE INDEX namex ON "Depo.Dbf" (malz_adi)

     İşletmede çalışan personeli brüt maaşlarına göre azalan sırada (yüksek maaştan düşük
maaşa doğru) listelemek istenirse brüt alanına göre aşağıdaki gibi index oluşturmak gerekir:

      mysql>CREATE INDEX per_maas ON personel (brut DESC);

      Bir okuldaki öğrencileri öncelikle adlarına göre, aynı adda olanları soyadlarına göre,
hem adı hem soyadı aynı olanların ortalamalarına göre sırlanmış olarak listelenmesi istenirse
aşağıdaki komutlar kullanılmalıdır:

      mysql>CREATE INDEX ogr_ad_soyad_ort ON ogrenci (ad,soyad,ort);

      Mevcut Index’in Silinmesi (Index Drop)

      Bir tablo üzerinde tanımlanmış herhangi bir index, o tablonun veri tabanından
silinmesi ile otomatik olarak silinecektir. Tablo silinmeksizin o tablo üzerinde oluşturulan
indek içinse DROP INDEX komutu kullanılır.

      mysql>INDEX DROP ogr_ad_soyad_ort;

      Böylece ogrenci tablosu üzerinde oluşturulmuş ogr_ad_soyad_ort adlı indeks, ogrenci
tablosu veri tabanında kaldığı hâlde silinecektir.

1.4. Insert Kullanımı
      Bir veri tabanı ile işlem yapabilmek için önce ona veri girmemiz gerekir. Bunu
yapmanın en yaygın yolu da MySQL’in INSERT komutudur. Bir tablodaki her satır
normalde gerçek bir nesne veya ilişkiyi tarif eder ve o satırın sütun değerleri bu gerçek nesne
hakkındaki bilgileri depolar, INSERT ifadesini veri tabanına veri satırları eklemek için
kullanabiliriz.

      Kullanımı:

      INSERT INTO tablo [(kolon, kolon, ...)] VALUES (değer-1, değer-2, ...)
          ya da
        INSERT INTO tablo [(kolon, kolon, ...)] SELECT ....

                                              14
Görüldüğü gibi tabloya iki türde veri nakledilebiliyor.

     Örnek:

         mysql>insert into musteri( ad, soyad, adres, sehir, posta_kodu, telefon)
          values('Özgür','Dönmez','Arı Koop.2/2
          Batıkent','Ankara','06130','03122560123');
         mysql>insert into musteri values (null,’ali er’,’12.cad no:3
          Emek’,’Ankara’,’03123335566’);
         mysql>INSERT INTO musteri (musteri_no,adsoyad,sehir)
          values(3,’Davut ÖZTÜRK’,’Mersin’);
         mysql>INSERT INTO iller (cod_il) VALUES (33);
         mysql>INSERT INTO eski_uyeler
          VALUES('M','Karabulut','mk@karya.net','1979-03-29' );
         INSERT INTO musteri VALUES ("M. Selcuk Batal" , "61" , "Refahiye" ,
          "Erzincan");
         INSERT INTO mus_hesap VALUES ("1471" , "100" , {05/02/03});

       Tablo yerine, içine veri girmek istediğimiz gerçek tablonun adını koyduğumuza ve
değerlerin yerine de gerçek değerler girdiğimize dikkat ediniz. Bu örneklerdeki değerlerin
tümü tek tırnak içine alınmıştır. MySQL’deki karakter katarlarının her zaman çift veya tek
tırnak içinde olması gerekir. Sayılara ve tarihlere tırnak gerekmez.

      Insert ile birlikte sadece birkaç varyasyon daha kullanılabilir. Insert sözcüğünün
sonuna LOW_PRIOROTY ya da DELAYED eklenebilir. LOW_PRIORITY anahtar
sözcüğü, sistemin bekleyip verileri daha sonra tablodan okunmadıkları sırada girilebileceği
anlamına gelir. DELAYED anahtar sözcüğü, girilen verilerinizin tampon belleğe alınacağı
anlamına gelir. Sunucu meşgulse insert işleminin tamamlanmasını beklemek zorunda
kalmadan sorgu çalıştırmaya devam edebilirsiniz.

1.5. Select Kullanımı
       Bir veri tabanından veri elde etmeyi (almayı) tablonun belirli ölçütleriyle eşleşen
satırları seçerek yaparız. Bu işi yapan MySQL komutu SELECT komutudur. SELECT
ifadesinin kullanımının birçok seçeneği ve farklı yolu vardır. Bunlar aşağıda verilmiştir:

     SELECT [ALL|DISTINCT] {*|alan_adi_listesi}
     [INTO{OUTFILE|DUMPFILE}’dosya_adi’export_option]
     FROM tablo_adi
     [WHERE koşul]
     [GROUP BY alan_adi1[,alan_adi2]…]
     [HAVING search-condition]
     [ORDER BY siralama_alanalari]

      şeklinde bir ifadesi vardır.



                                             15
Şimdi öncelikle isteğe bağlı cümleciği olmayan belirli bir tablodan seçim yapan
sorgulara bakalım. Tipik olarak bu ögeler, tablonun sütunlarıdır (Her türlü MySQL
ifadesinin sonucu da olabilir.). Bu sorgu, musteri tablosundaki ad ve sehir sütunları
içeriklerini listeler.

      mysql>select ad, sehir from musteri;

       Kodları musteri tablosundaki ad ve sehir sütunlarındaki bilgileri aşağıdaki gibi
listeleyecektir:
      +--------------+---------------+
      |ad              |sehir        |
      +--------------+---------------+
      |Ahmet |Mersin          |
      |Ayşe     |Hatay                |
      |Ahsen    |Şanlıurfa    |
      +--------------+---------------+

       Yukarıda da görüldüğü gibi musteri tablosundan seçtiğimiz (ad ve sehir) ögeleri içeren
bir tablomuz oldu. Bu veri, musteri tablosundaki tüm satırlar için gösterilmektedir.

       Bir tablodan select anahtar sözcüğünün ardından listeleyerek istediğiniz sayıda sütun
belirtebilirsiniz. Başka bazı ögeleri belirtmek de mümkündür. Bunlardan bir tanesi de joker
karakter olan “*” işaretidir. Bu işaret belirtilmiş tablodan ve tablolardaki tüm sütunlarla
eşleşir. Örneğin, siparis adlı bir tablodaki tüm sütunları listelemek için aşağıdaki kodları
yazılır.

      mysql>select * from siparis; kodları siparis tablosundaki tüm
      sütunlarındaki bilgileri aşağıdaki gibi listeleyecektir:

      +--------------+---------------+----------------+-------    +
      |musteri_no      |siparis_tar |urun           | fiyat |
      +-------------+---------------+----------------+--------    +
      |001             |23.03.2007 |HDD             |120YTL       |
      |0034     |12.03.2007 |256MB RAM |85YTL|
      |003             |28.03.2007 |Power Supply            |28YTL|

      +-------------+---------------+----------------+--------+

       Bir tablonun alt kümelerine erişmek için (şartlı sorgulama yapmak için) bazı seçim
ölçütleri belirtmemiz gerekir. Bunu WHERE parametresi ile yapabiliriz.

      Kullanımı:

      SELECT <alan_adi [alan_adi1,…]> FROM <tablo_adi> WHERE <koşullar>

      mysql>select from musteri where adi=’ayşe’;

                                             16
musteri tablosundan tüm sütunları, ama sadece adi ayşe olan satırları seçecektir. Bunun
      çıktısı:

      +-------------+---------------+--------------- +-------      +
      |ad              |adres               |şehir          |telefon                |
      +-------------+---------------+--------------- +-------      +
      |ayşe     |orhaniye mh.        |MUĞLA          |2143526      |
      |ayşe     |emek cd.     |ANKARA                |5214556      |
      |ayşe     |güneyli köyü        |MERSİN                |4522356                |

      +-------------+---------------+--------------+----------+

       WHERE belirli satırları seçerken kullanılan ölçütleri belirtir. Bu örnekte adi ayşe olan
satırları seçtik. Tek eşittir işareti, eşitliği kontrol etmek için kullanıldı. Bunun PHP’de farklı
olduğu ve bunları birlikte kullanırken karıştırılabilecekleri unutulmamalıdır.

   MySQL eşitliği, ek olarak operatörleri bu düzenli deyimlerin tümünü destekler.
WHERE cümlecikleri içinde kullanılan operatör ve deyimler aşağıdaki tabloda verilmiştir.

                 WHERE Cümlecikleri için Kullanışlı Karşılaştırma Operatörleri
 OPERATÖRLER            AD(varsa)             ÖRNEK                       AÇIKLAMA
         =               Eşittir             ogrno=125          İki    değerin     eşit    olup
                                                                olmadığını kontrol eder.
         >             Büyüktür.              Fiyat>45          Bir değerin diğerinden büyük
                                                                olup olmadığını kontrol eder.
         <             Küçüktür.               Nt<44            Bir değerin diğerinden küçük
                                                                olup olmadığını kontrol eder.
        >=           Büyüktür veya            Nt>=45            Bir değerin diğerinden büyük
                        eşittir.                                ya da eşit olup olmadığını
                                                                kontrol eder.
        <=           Küçüktür veya            Nt<=44            Bir değerin diğerinden küçük
                        eşittir.                                ya da eşit olup olmadığını
                                                                kontrol eder.
    != veya <>        Eşit değildir.       Ad!=’ahmet’          İki değer eşit değil mi diye
                                                                bakar.
 IS NOT NULL                              Adres is not null     Alanın içinde değer bulunup
                                                                bulunmadığını kontrol eder.
    IS NULL                                 Adres is null       Alanın içinde değer yok mu
                                                                diye bakar.
   BETWEEN                                  Nt between          Bir     değerin       minimum
                                            50 and 90           değerden büyük veya eşit,
                                                                maksimum değerden küçük
                                                                veya eşit olup olmadığını
                                                                kontrol eder.
        IN                                   Sehir in           Bir değerin belirli bir kümede
                                        (“mersin”,”muğla”)      olup olmadığını kontrol eder.
                                               17
NOT IN                                  Sehir not in        Bir değer, bir kümede değil
                                        (“ankara”,”istanbul”)    mi diye bakar.
      LIKE               Örnek           İsim like (“ayşe%”)     Basit SQL eşleştirme işlemini
                       eşleştirme                                kullanarak bir değerin bir
                                                                 örnekle                eşleşip
                                                                 eşlenemediğini kontrol eder.
   NOT LIKE              Örnek                İsim not           Bir    değer   bir    örnekle
                       eşleştirme          like(“oya%”)          eşleşmiyor mu diye bakar.
           Tablo 1.2: WHERE cümlecikleri için kullanışlı karşılaştırma operatörleri


       Tablodaki son iki satır like ile ilgilidir. Bunlar örnek eşleştirme formlarıdır. Like basit
sql örnek (pattern) eşleştirilmesi kullanılır. Örnekler normal metin artı herhangi bir sayıdaki
karakter ile eşleşebilecek joker karakteri gösteren bir % karakterinden ve bir tek karakteri ile
eşleşen _ (alt çizği) karakterinden oluşabilir.

       Birden fazla ölçütü kontrol etmek için basit operatörleri ve örnek eşleştirme söz
dizimini kullanabilir ve bunları and ve or ile daha karmaşık bir ölçütler hâlinde
birleştirebilirsiniz.

      Örneğin:

      mysql> Select * form musteri where adi=’ayşe’ or adi=’fatma’;

      Bu örnekte musteri tablosunda adi ayşe veya Fatma olanları listeleyecektir.

      Örnek: Adı, Halil veya Nural veya Ahmet olan öğretmenlerin adının ve adreslerinin
görüntülenmesi için aşağıdaki ifade yazılır:

      mysql>select adi, adres from ogretmen where in (‘Halil’,’Nural’,’Ahmet’);

      Örnek: Soyadı “ÇATAK” ve cinsiyeti “E” olan öğrencilerin ad ve numaralarının
görüntülenmesi için aşağıdaki ifade kullanılır:

      mysql>select       ad,    ogrno     from        ogrenci   where   soyad=’ÇATAK’        and
      cinseyti=’E’;

       Örnek: Sınavdan 45’ten küçük olan öğrencilerin ad ve numarasının görüntülenmesi
için aşağıdaki ifade kullanılır:

      mysql>select adi, ogrno from ogrenci where not1<45;

      Örnek: Sınav notundan 70 ile 100 arası not alan öğrencilerin ad ve numarasının
görüntülenmesi için aşağıdaki ifade kullanılır:

      mysql>select adi, ogrno from ogrenci where not2 between 70 and 100;
                                                 18
Örnek: Doğum tarihi 30/03/1995 olan öğrencilerin ad ve numarasının görüntülenmesi
için aşağıdaki ifade kullanılır:

     mysql>select adi, ogrno from ogrenci where dogum_tarihi=’1995/03/30’;

      Örnek: Soyadı ‘ER’ ile başlayan öğrencilerin ad ve numarasının görüntülenmesi için
aşağıdaki ifade kullanılır:

     mysql>select adi, ogrno from ogrenci where soyadi like ‘ER%’;

      Örnek: Soyadı ‘AN’ ile biten öğrencilerin ad ve numarasının görüntülenmesi için
aşağıdaki ifade kullanılır:

     mysql>select adi, ogrno from ogrenci where soyadi like ‘%AN’;

      Örnek: Adının içinde ‘M’ geçen öğrencilerin ad ve numarasının görüntülenmesi için
aşağıdaki ifade kullanılır:

     mysql>select adi, ogrno from ogrenci where adi like ‘%M%’;

       Örnek: Adının içinde ‘M’ geçmeyen öğrencilerin ad ve numarasının görüntülenmesi
için aşağıdaki ifade kullanılır:

     mysql>select adi, ogrno from ogrenci where adi not like ‘%M%’;

       Örnek: Adının NULL (boş) olmayan öğrencilerin ad ve numarasının görüntülenmesi
için aşağıdaki ifade kullanılır:

     mysql>select adi, ogrno from ogrenci where adi is not null;

       Bir tablo sorgulandığı zaman sonuçlar birincil anahtara (primary key) göre sıralı
gelmektedir. Sonuçların sıralamasını değiştirmek mümkündür. ORDER BY bütün MySQL
ifadelerinde kullanılır.


     Kullanımı:
     Select <alan adi> from <tablo adi> [where <koşullar>] [order by alan1[,
     alan2, …]{asc|desc}];

      Örnek: Öğrenci tablosundaki kayıtları öğrencilerin adına göre sıralayarak adının,
soyadının ve numarasının görüntülenmesini sağlayan aşağıdaki gibi yazılır (Bu sıralamada
öğrenci bilgileri, adına göre a’dan z’ye doğru sıralanır.).

     mysql>select adi,soyadi, ogrno from ogrenci where order by adi;


                                          19
Örnek: Öğrenci tablosundaki kayıtları öğrencilerin adına göre tersten (büyükten
küçüğe) sıralayarak adının, soyadının ve numarasının görüntülenmesini sağlayan aşağıdaki
gibi yazılır (Bu sıralamada öğrenci bilgileri, adına göre z’den a’ya doğru sıralanır.).

      mysql>select adi, soyadi, ogrno from ogrenci where order by adi desc;

      İki veya Daha Fazla Tablonun Beraber Sorgulanması (JOIN)

       Birden fazla tablodan aynı anda bilgi getirilmesi (alınması) gerektiğinde ortak alanlar
üzerinden birleştirme yapılır. Birleştirme işlemi koşullar bölümünde yapılır, ortak olan
alanlar eşleştirilir. MySQL ifadelerinde alan isimlerinin önüne tablo adı yazılır. Tablo adı ile
alan adı arasına “.” (nokta) konulur.

      Kullanım:

      SELECT        alan1[,alan2,…]     FROM        tablo1,tablo2[tablo3,…]           WHERE
tablo1.alan1=tablo2.alan1 [AND tablo2.alan2=tablo2.alan2,…];

       Örnek: musteri ve siparis adlı iki tablo bulunmaktadır. Müşterilerin adlarının ve
sipariş verdikleri ürünlerin kodlarının, fiyatının ve tutarının görüntülenmesi için aşağıdaki
ifade kullanılır:

      mysql>SELECT musteri.adi,siparis.urunkodu,siparis.fiyat,siparis.tutar FROM
      musteri,siparis, WHERE musteri.musteri_no=siparismusteri_no;

       Örnek: ogrenci ve notlar adlı iki tablodan Ahmet adlı öğrencinin iki yazılı bir sözlü
notlarının görüntülenmesi için aşağıdaki ifade kullanılır:

      mysql>SELECT      ogrenci.adi, notlar.y1, notlar.y2,  notlar.s1 FROM
      ogrenci,notlar, WHERE ogrenci_no=notlar_no AND ogrenci.adi=’Ahmet’;

      Tablo Adlarına Takma Ad (Alias) Verme

       Tablolara başka isimlerle seslenmek çoğunlukla kullanışlı, bazen de gereklidir.
Tabloların diğer adlarına lakap (alias) denir. Bunları bir sorgunun dışında oluşturabilir ve
sonra da kullanmaya devam edebilirsiniz. Çoğunlukla kısa yazılırlar ve tercihen tablo
adlarının ilk harfleri kullanılır. Kullanacağımız tabloları tanımlarken ilgili tablonun lakabını
tanımlamak için AS cümleciği ekleyebiliriz. Takma ad (lakap) için FROM’dan sonra tablo
adı, bir boşluk ve takma ad azılır. Takma ad verildikten sonra bilgi alanları önüne bu takma
ad yazılır. Takma ad ile alan adı arasına yine “.” karakteri konulur.

      Örnek: Müşterilerin adının, vermiş olduğu siparişlerin tarihlerinin ve tutarının
görüntülenmesi için aşağıdaki ifade yazılır:

      mysql>SELECT m.adi,s.urunkodu,s.fiyat,s.tutar FROM musteri m, siparis s,
      WHERE m.musteri_no=s.musteri_no;

                                              20
Kayıtları Gruplama (GROUP BY)

       Çoğunlukla belirli bir kümenin içine kaç satırın düştüğünü veya bazı sütunların
ortalama değerlerini (örneğin, öğrenci not ortalaması gibi) bilmek istersiniz. MySQL’de bu
tip bir sorguyu yanıtlamada kullanılan bir dizi gruplama fonksiyonu bulunmaktadır. Bu
gruplama fonksiyonları bir tabloya veya bir tablo içindeki veri gruplarına uygulanabilir. Bu
gruplar üzerinde çeşitli işlemler yapılabilir. Listelenecek bilgi alanları mutlaka GROUP BY
ifadesinden sonra belirtilmelidir. SUM, COUNT, AVG, MIN, MAX gibi fonksiyonlarla
kullanılan alanlar GROUP BY’dan sonra belirtilmez.

      Kullanımı:

      SELECT alan1[,alan2,…] FROM tablo1 GROUP BY alan1[,alan2,…];

       Örnek: Her müşterinin müşteri numarası ve yapmış olduğu siparişlerin toplam
tutarının görüntülenmesi için aşağıdaki ifade yazılır:

      mysql>SELECT       musteri_no,     SUM     (tutar)   FROM     siparis   GROUP      BY
      musteri_no;

      Örnek: Bir okuldaki kız ve erkek öğrenci sayısının görüntülenmesi için aşağıdaki
      ifade yazılır:

      mysql>SELECT cinsiyeti, COUNT (*) FROM ongrenci GROUP BY cinsiyeti;

      Örnek: Bir okulun her sınıfında kaçar öğrenci olduğunun görüntülenmesi için
aşağıdaki ifade yazılır:

      mysql>SELECT sinif, COUNT (*) FROM sinif GROUP BY sinif;

      Gruplar Üzerinde Koşullu Sorgulama (HAVING)

      Gruplanmış veriler içerisinde belli koşula uyanlar sorgulanacaksa MySQL cümlesinde
HAVING ifadesi ile koşullar yazılır. Bu tür SQL cümlelerinde WHERE ile yazılan koşullar
varsa öncelikle bunlar göz önüne alınır, sonra gruplama işlemi yapılır. Gruplama sonunda da
HAVING ile verilen koşullara uygun kayıtlar listelenir. HAVING ile verilecek koşullar
mutlaka GROUP BY yanına yazılan alanlar olmalıdır.

      Örnek: 5’ ten az siparişte bulunan müşterilerin numarasının görüntülenmesi için
aşağıdaki ifade yazılır:

      mysql>SELECT musteri_no, COUNT(*)FROM siparis GROUP BY musteri_no
      HAVING count(*)<5;




                                            21
1.6. Delete Kullanımı
     MySQL veri tabanında kayıt silmek çok kolaydır. Girilen bilgileri silmek için delete
komutu kullanılır.

      Kullanımı:

      DELETE [LOW_PRIORITY] [QUICK ] [IGNORE] FROM tablo_adi
      [WHERE koşul]
      [ORDER BY satır_sütun]
      [LIMIT sayi]

       Örnek: Tablodaki tüm verileri (satırları) silmek için aşağıdaki ifadeyi yazmak
yeterlidir. Tüm veriler silineceğinde dikkatli kullanılmalıdır (musteri tablosundaki tüm
bilgiler silinir.).

      mysql> delete * from musteri;

       Örnek: Aşağıdaki SQL komutu kullanicilar tablosundaki bolum bilgisi “bilgisayar”
olan tüm kullanıcılar ile ilgili satırları silecektir.

      mysql> delete * from kullanicilar where bolum=’bilgisayar’;

      Örnek: Aşağıdaki SQL komutu ogrenci tablosundaki ad bilgisi “mesut” olan tüm
öğrenciler ile ilgili satırları silecektir.

      mysql> delete * from ogrenci where ad=’mesut’;

1.7. Update Kullanımı
      Veri tabanından veri almanın yanı sıra, çoğunlukla bu verileri değiştirmek de isteriz.
Örneğin öğrenci veri tabanındaki öğrenci veli adres bilgisini değiştirmek isteye biliriz. Bu ve
benzeri güncelleme (değiştirme) işlemleri için UPDATE ifadesi kullanılır.

      Kullanımı:
      UPDATE tablo_adi SET ala1=değer1,[,alan2=değer2,…] [WHERE koşul cümlesi] ;

       Temel olarak tablo_adi adlı tabloyu güncellemek, adlandırılan sütunların her birini
uygun deyime ayarlamaktır. Bir UPDATE, bir WHERE cümleciği kullanılarak belirli
satırlarla sınırlandırılabilir.

       NOT: Burada Where ifadesi kullanılmaz ise tablodaki bütün kayıtlar güncellenir,
koşul yazılırsa o koşula uygun kayıtlar güncellenir. Koşul kısmına dikkat edilmesi gereklidir,
çünkü istenmeyen sonuçlar doğurabilir. Bir kayıtta düzeltme yapacağınız yere bütün
kayıtların içeriklerini değiştirebilirsiniz.


                                              22
Örnek: Bir kitap satışı yapan mağaza, kitap fiyatlarını % 15 artırmak istiyor. Bunun
için kitap veri tabanındaki fiyat alanı üzerinde güncelleme yapmak gerekecektir.

      mysql>update kitap set fiyat=fiyat*1.15;

       Örnek: Öğrenci numarası 127 olan öğrencinin doğum tarihini 03/12/1997 olarak
değiştirecek MySQL kodu aşağıdaki gibi olacaktır:

      mysql>update ogrenci set dogum_tarihi=’1995/03/12’
      mysql>where ogrno=127;

1.8. Alter Kullanımı
      Alter Table (Tablo Güncelleme)

      Alter Table, bir tablonun tanımını değiştirir. Veri tabanındaki satırları güncellemeye
ek olarak, veri tabanı içindeki tabloların yapısını da değiştirmek gerekebilir. Bu amaç için
ALTER TABLE ifadesi kullanılır. MySQL ile bir tabloda istediğiniz kadar değişiklik
yapabilirsiniz. Değiştirme cümleciklerinin her biri tablonun farklı yönlerini değiştirmek için
kullanılabilir. Alter Table’nin çeşitli alt kullanımları vardır.

      Kullanımı:

      ALTER [IGNORE] TABLE tbl_name
        alter_specification [, alter_specification] ...

      alter_specification:
          table_option ...
        | ADD [COLUMN] column_definition [FIRST | AFTER col_name ]
        | ADD [COLUMN] (column_definition,...)
        | ADD {INDEX|KEY} [index_name] [index_type] (index_col_name,...)
        | ADD [CONSTRAINT [symbol]]PRIMARY KEY [index_type]
      (index_col_name,...)
        | ADD [CONSTRAINT [symbol]]UNIQUE [INDEX|KEY] [index_name]
      [index_type] (index_col_name,...)
        | ADD [CONSTRAINT [symbol]]FOREIGN KEY [index_name]
      (index_col_name,...)[reference_definition]
        | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
        | CHANGE [COLUMN] old_col_name column_definition [FIRST|AFTER
      col_name]
        | MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]
        | DROP [COLUMN] col_name
        | DROP PRIMARY KEY
        | DROP {INDEX|KEY} index_name
        | DROP FOREIGN KEY fk_symbol
        | DISABLE KEYS
        | ENABLE KEYS

                                             23
|   RENAME [TO] new_tbl_name
     |   ORDER BY col_name [, col_name] ...
     |   CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
     |   [DEFAULT] CHARACTER SET charset_name [COLLATE collation_name]
     |   DISCARD TABLESPACE
     |   IMPORT TABLESPACE

    index_col_name:
       col_name [(length)] [ASC | DESC]

    index_type:
       USING {BTREE | HASH}

              ALTER TABLE İfadesiyle Yapılabilen Değişiklikler
           Söz Dizimi                                Açıklama
ADD [COLUMN] column_definition Belirtilen konuma yeni bir sütun ekler.
[FIRST | AFTER col_name ]          column_definition’ın bir ad
                                   ve tipe ihtiyaç duyar.
ADD [COLUMN]                       Tablonun sonuna bir veya daha fazla
(column_definition,...)            sütun ekler.
ADD {INDEX|KEY} [index_name]
                                   Tabloda belirtilen sütun veya sütunlar
[index_type]
                                   üzerinde bir index oluşturur.
(index_col_name,...)
ADD [CONSTRAINT
[symbol]]PRIMARY KEY               Belirtilen sütun veya sütunları tablonun
[index_type]                       birincil anahtarı yapar.
(index_col_name,...)
ADD [CONSTRAINT
[symbol]]UNIQUE [INDEX|KEY]        Belirtilen sütun ve sütunlar üzerinde
[index_name] [index_type]          tabloya benzersiz bir index ekler.
(index_col_name,...)
ADD [CONSTRAINT
[symbol]]FOREIGN KEY
                                   Bir InnDB tablosuna yabancı bir anahtar
[index_name]
                                   ekler.
(index_col_name,...)[reference
_definition]
ALTER [COLUMN] col_name {SET
                                   Belirli bir sütunun varsayılan değerini
DEFAULT literal | DROP
                                   ekler veya kaldırır.
DEFAULT}
CHANGE [COLUMN] old_col_name
                                   Column adlı sütunu, listelenmiş tanıma
column_definition [FIRST|AFTER
                                   sahip olacak şekilde listeler.
col_name]
MODIFY [COLUMN]
                                   CHANGE benzer. Adları değil, sütun
column_definition [FIRST |
                                   tiplerini değiştirmek için kullanılır.
AFTER col_name]
DROP [COLUMN] col_name             Belirtilen sütunu siler.
DROP PRIMARY KEY                   Birincil indexi siler.
                                     24
DROP {INDEX|KEY} index_name                       Belirtilen indexi siler.
 DROP FOREIGN KEY fk_symbol                        Yabancı anahtarı siler.
 DISABLE KEYS                                      İndex güncelleme özelliğinin etkinliğini
                                                   kaldırır.
 ENABLE KEYS                                       İndex güncelleme özelliğini etkinleştirir.
 RENAME [TO] new_tbl_name                          Bir tabloyu yeniden adlandırır.
 ORDER BY col_name [, col_name]                    Tabloyu satırlar belirli bir şekilde
 …                                                 sıralanmış şekilde yeniden oluşturur.
 CONVERT TO CHARACTER SET
                                                   Metin tabanlı sütunların hepsini belirtilen
 charset_name [COLLATE
                                                   kümesine dönüştürür.
 collation_name]
 [DEFAULT] CHARACTER SET
 charset_name [COLLATE                             Varsayılan karakter kümesini ayarlar.
 collation_name]
 DISCARD TABLESPACE                                Bir InnDB dosyasının temelini oluşturan
                                                   tablespace dosyasını siler.
 IMPORT TABLESPACE                                 Bir InnDB dosyasının temelini oluşturan
                                                   tablespace dosyasını yeniden oluşturur.
                  Tablo 1.3: Alter Table ifadesiyle yapılabilen değişiklikler


       Örnek: Müşteri tablosunda adların 25 karaktere kadar uzun olmasına izin verilmiş
olsun. Verileri almaya başladıktan sonra bazı isimlerin çok uzun olduğu görülsün. Bu durum,
sütunu 50 karakter uzunluğunda olacak şekilde değiştirilerek düzeltilebilir.

     mysql>alter table musteri modify ad char(50) not null;

      Çok sık ortaya çıkan bir durum, bir sütun ekleme ihtiyacıdır.

      Örnek: Müşteri tablosunda müşterilerin e-mail adreslerini de almak istediğimizi
düşünelim. tablomuzda böyle bir sütun önceden yoktu. Bu durumda yeni bir sütun
eklenecektir.

     mysql>alter table musteri add email char(50) not null;

     Eklenen bir sütundan kurtulma isteği de yine çok sık karşılaşılan bir durumdur.
Yukarıda eklediğimiz sütunu aşağıdaki gibi silebiliriz:

     mysql>alter table musteri drop email;

      Örnek: Öğrenci kayıt bilgileri için oluşturulmuş olan ogrenci tablosunun adını, ogr
olarak değiştirmek için şu kodlar yazılır:

     mysql>alter table ogrenci rename ogr;




                                              25
Örnek: Bir kirtasiye veri tabanındaki kitap adlı alan adını book olarak değiştirelim:

     mysql>alter table kirtasiye change kitap book;

1.9. MySQL Fonksiyonları
1.9.1. Standart Fonksiyonlar
     AVG()
     Verilen alanın aritmetik ortalamasını alır.
     mysql>SELECT AVG(yas) FROM employee where bolum='Halkla İlişkiler';

     Yukarıdaki sorgu halkla ilişkiler bölümünde çalışan personelin yaş ortalamasını
     verecetir. AVG() fonksiyonu, istenen alandaki verilerin aritmetik ortasını görüntüler.


     SUM()

     Verilen alanların toplamını alır.

     mysql>SELECT SUM(maas) FROM employee WHERE bolum='Bilgi İşlem';

     Yukarıdaki sorgu, bilgi işlem bölümünde çalışan tüm personelin maaşlarının toplamını
     görüntüler.


     MIN()

     Verilen alanın kayıtlar arasındaki en küçük değerini verir.

     mysql>SELECT MIN(maas) AS enazmaas FROM employee WHERE
     bolum='Bilgi İşlem';

     Yukarıdaki sorgu, bilgi işlem bölümünda çalışan ve en düşük maaşı alan personeli
     görüntüler.


     MAX()

     Verilen alanın kayıtlar arasındaki en büyük değerini verir.

     mysql>SELECT MAX(maas) FROM employee WHERE bolum='Bilgi İşlem';

     Yukarıdaki sorgu, bilgi işlem bölümünda çalışan ve en yüksek maaşı alan personelin
     maaşını görüntüler.

                                             26
COUNT()

      Verilen      alanın     kayıtlar    arasında       kaç   defa    yazıldığını     bulur.

       Eğer şirketin basın yayın bölümünde çalışan evli ve maaşı 500 YTL’den az olan
kişilerin sayısını öğrenmek istiyorsak aşağıdaki sorgu işimizi görecektir.

      mysql>SELECT COUNT(*) FROM employee                      WHERE     maas<500      AND
      medeni_hal='evli' AND bolum='Basın Yayın'

      ROUND ()

      Verilen alanın virgülden sonraki değerini yuvarlar. Tam sayı kısmını verir.
      mysql> select round(15.56);
        >16

1.9.2. Tarih ve Zaman Fonksiyonları

      ADDDATE

      Bu fonksiyon tarih hesaplama işlemleri için
kullanılır.   Bu      fonksiyonla    aynı      çalışan
DATE_SUB()         DATE_ADD()           SUBDATE()
fonksiyonları vardır. ADDDATE() ve SUBDATE(),
DATE_ADD() ve DATE_SUB() fonksiyonlarının
eş anlamlılarıdır. Bunu kullanmanız için yazım
formatının sağ tarafındaki tip DATE veya
DATETIME olmalıdır. Burada kullanılan tarih,
DATETIME (tarihzaman) ya da DATE (tarih)
değeridir. Bunlar başlangıç değerini belirler. Yazım
formatı INTERVAL değerini belirler.. Bu değer,
başlangıç değerine eklenir veya çıkarılır.
                                                                Resim 1.4

      Yazım formatı, bir işaretler grubudur. Bu negatif INTERVAL'ler için '-' ile
başlayabilir. tip; ise bir anahtar kelimedir. Bu yazım formatının nasıl yorumlanacağını
gösterir. EXTRACT(tip FROM tarih) fonksiyonuyla INTERVAL tipini öğrenebilirsiniz.

       Yazım formatında gün, ay, yıl, saat, dakika, saniye gibi değerleri ayırmada kullanılan
işaretler yerine istediğiniz noktalama işaretlerini kullanabilirsiniz. Aşağıda verilen
parametreler bölümündeki yazım şekli önerilendir. 'Saatler: Dakikalar: Saniyeler' Yerine
'Saatler. Dakikalar. Saniyeler' veya 'Saatler, Dakikalar, Saniyeler' gibi kullanabilirsiniz.

      Fonksiyona girilen tarih değeri DATE ise ve hesaplamalarda kullandığınız tip YEAR,
MONTH ve DAY ise (yani TIME bölümleri değilse); hesaplamalar sonucunda döndürülen
değer DATE formatındadır. Bunun dışındakilerde döndürülen değer TIME formatındadır.

                                              27
Kullanımı:
ADDDATE(tarih,INTERVAL expr tip)
ADDDATE(expr,gün)
ADDDATE(tarih, INTERVAL yazım formatı tip)

Bu fonksiyonla aynı çalışan diğer fonksiyonlar
DATE_SUB(tarih, INTERVAL yazım formatı tip)
SUBDATE(tarih, INTERVAL yazım formatı tip)
DATE_ADD (tarih, INTERVAL yazım formatı tip)

Örnek:
mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);
    -> '1998-02-02'
mysql> SELECT ADDDATE('1998-01-02', INTERVAL 31 DAY);
    -> '1998-02-02'
Parametreler:

                Tip Adı                  YAZIM FORMATI
         MICROSECOND               Mikrosaniyeler
         SECOND                    Saniyeler
         MINUTE                    Dakikalar
         HOUR                      Saatler
         DAY                       Günler
         WEEK                      Haftalar
         MONTH                     Aylar
         QUARTER                   Çeyrekler
         YEAR                      Yıllar
         SECOND_MICROSECOND Saniyeler.Mikrosaniyeler
         MINUTE_MICROSECOND Dakikalar.Mikrosaniyeler
         MINUTE_SECOND             Dakikalar:Saniyeler
         HOUR_MICROSECOND          Saatler.Mikrosaniyeler
         HOUR_SECOND               Saatler:Dakikalar:Saniyeler
         HOUR_MINUTE               Saatler:Dakikalar
         DAY_MICROSECOND           Günler.Mikrosaniyeler
         DAY_SECOND                Günler Saatler:Dakikalar:Saniyeler
         DAY_MINUTE                Günler Saatler:Dakikalar
         DAY_HOUR                  Günler Saatler
         YEAR_MONTH                Yıllar-Aylar
                    Tablo 1.4: Tarih zaman parametreleri

                                    28
Örnek:
    <?php
     $tarih = '2005-01-31';
     $sql = mysql_query("SELECT ADDDATE('$tarih', INTERVAL 1 DAY) AS tari
    h");
     $sonuc = mysql_fetch_object($sql);
     echo $sonuc->tarih;
     //Sonuç: 2005-02-01
    ?>


    ADDTIME

    ADDTIME(expr,expr2)
    ADDTIME() fonksiyonu expr2 değerini expr değerine ekler ve sonucu döndürür.

    Kullanımı:
    expr : TIME (zaman) ya da DATETIME (tarih, zaman) olabilir.
    expr2 : ise sadece TIME (zaman) dır.

    ADDTIME(expr,expr2)

    Örnek:
    mysql> SELECT ADDTIME('1997-12-31 23:59:59.999999', '1
    1:1:1.000002');
      -> '1998-01-02 01:01:01.000001'

    mysql> SELECT ADDTIME('01:00:00.999999', '02:00:00.999998');
      -> '03:00:01.999997'

    CURDATE
    Bu günün tarihini 'YYY-MM-DD' veya 'YYYYMMDD' formatında döndürür.

    Kullanımı:
    mysql> SELECT CURDATE();
      -> '1997-12-15'
    mysql> SELECT CURDATE() + 0;
      -> 19971215

    CURRENT_DATE
    Bugünün tarihini 'YYYY-MM-DD' veya 'YYYYMMDD' formatında verir.
CURRENT_DATE ve CURRENT_DATE(), CURDATE() fonksiyonunun eş anlamlılarıdır.

    Kullanımı:
    mysql> SELECT CURRENT_DATE();
      -> '2005-10-03'
    mysql> SELECT CURRENT_DATE() + 0;
      -> 20051003
                                        29
CURRENT_TIME
       CURRENT_TIME ve CURRENT_TIME() fonksiyonları, CURTIME fonksiyonunun
eş anlamlısıdır.

       CURRENT_TIMESTAMP
       CURRENT_TIMESTAMP ve CURRENT_TIMESTAMP(), NOW() fonksiyonunun
eş anlamlılarıdır. Bunlar şimdiki tarihi ve zamanı verirler.

     Kullanımı:
     mysql>select CURRENT_TIMESTAMP();
       ->2005-10-03 14:50:59
     mysql>select CURRENT_TIMESTAMP;
       ->2005-10-03 14:50:59

     CURTIME
     Geçerli saati 'HH: MM: SS' veya 'HHMMSS formatında döndürür.

     Kullanımı:
     mysql> SELECT CURDATE();
       -> '1997-12-15'
     mysql> SELECT CURDATE() + 0;
       -> 19971215

     DATE
      DATE (tarih) veya DATETIME (tarih, zaman) ifadesinden tarihi çıkarır.
Bu fonksiyon MySQL 4.1.1’ de kullanılır.

     Kullanımı:
     mysql> SELECT DATE('2003-12-31 01:02:03');
       -> '2003-12-31'

     DATEDIFF
     İki tarih arasındaki farkı alır.

     Kullanımı:
     mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30');
       -> 1
     mysql> SELECT DATEDIFF('1997-11-30 23:59:59','1997-12-31');
       -> -31

     DATE_ADD
     Bu fonksiyon tarih hesaplama işlemleri için kullanılır.

       Bu fonksiyonla aynı çalışan DATE_SUB(), ADDDATE() ,SUBDATE() fonksiyonları
vardır. ADDDATE() ve SUBDATE(), DATE_ADD() ve DATE_SUB() fonksiyonlarının eş
anlamlılarıdır. Yazım formatı INTERVAL değerini belirler. Bu değer, başlangıç değerine
eklenir veya çıkarılır.
                                            30
Yazım formatında gün, ay, yıl, saat, dakika, saniye gibi değerleri ayırmada kullanılan
işaretler yerine istediğiniz noktalama işaretlerini kullanabilirsiniz.
      Aşağıda verilen parametreler bölümündeki yazım şekli önerilendir. 'Saatler:
Dakikalar: Saniyeler' yerine 'Saatler. Dakikalar. Saniyeler' veya Saatler, Dakikalar, Saniyeler'
gibi kullanabilirsiniz. Fonksiyona girilen tarih değeri DATE ise ve hesaplamalarda
kullandığınız tip YEAR, MONTH ve DAY ise hesaplamalar sonucunda döndürülen değer
DATE formatındadır. Bunun dışındakilerde döndürülen değer TIME formatındadır.

      DATE_ADD(date,INTERVAL expr type)
      DATE_ADD (tarih, INTERVAL yazım formatı tip)

      Bu fonksiyonla aynı çalışan diğer fonksiyonlar
      DATE_SUB(tarih, INTERVAL yazım formatı tip)
      ADDDATE(tarih, INTERVAL yazım formatı tip)
      SUBDATE(tarih, INTERVAL yazım formatı tip)

      Örnek: MySQL’de tarih hesaplama işlemleri
      <?php
      mysql> SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND;
        -> 1998-01-01 00:00:00 -
      >Verilen DATETIME Değerine 1 Saniye Ekleniyor...
      mysql> SELECT INTERVAL 1 DAY + "1997-12-31";
        -> 1998-01-01 -> Verilen DATE Değerine 1 Gün Ekleniyor
      mysql> SELECT "1998-01-01" - INTERVAL 1 SECOND;
        -> 1997-12-31 23:59:59 -
      > Verilen DATE veya DATETIME Değerine 1 Saniye Ekleniyor ve Sonucu DA
      TETIME Formatında Veriyor.
      mysql> SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL 1 SECOND);
        -> 1998-01-01 00:00:00 -
      > Verilen DATETIME Değerine 1 Saniye Ekleniyor
      mysql> SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL 1 DAY);
        -> 1998-01-01 23:59:59 ->Verilen DATETIME Değerine 1 Gün Ekleniyor
      mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
      INTERVAL "1:1" MINUTE_SECOND);
        -> 1998-01-01 00:01:00 -
      > Verilen DATETIME Değerine 1 Dakika 1 Saniye Ekleniyor
      mysql> SELECT DATE_SUB("1998-01-01 00:00:00",
                 INTERVAL "1 1:1:1" DAY_SECOND);
        -> 1997-12-30 22:58:59 -
      > Verilen DATETIME Değerinden 1 Gün 1 Saat:1Dakika:1 Saniye Çıkarılıyor

      mysql> SELECT DATE_ADD("1998-01-01 00:00:00",
                     INTERVAL "-1 10" DAY_HOUR);
           -> 1997-12-30 14:00:00 -
      > Verilen DATETIME Değerinden 1 Gün, 1 Saat Çıkarılıyor
      mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY);
           -> 1997-12-02 -> Verilen DATE Değerinden 31 Gün Çıkarılıyor

                                              31
?>

      Örnek: DATE_ADD() kullanım örnekleri

      <?php
        /*
        MySQL'deki tarih alanı datetime olarak ayarlandığını varsayarsak…
        +---------------------+
        | tarihalani       |
        +---------------------+
        | 2004-12-31 23:59:59 |
        +---------------------+
        */
        $sorgu = mysql_query("SELECT tarihalani + INTERVAL 1 SECOND"); //Ta
      rihe 1 Saniye Ekler
                // '2005-01-01 00:00:00'
        $sorgu = mysql_query("SELECT INTERVAL 1 DAY + tarihalani"); //Tarihe
      1 Gün Ekler
                // '2005-01-01'
        $sorgu = mysql_query("SELECT tarihalani -
       INTERVAL 1 SECOND; //Tarihten 1 Saniye Çıkarır
                // '2004-12-31 23:59:58'
        $sorgu = mysql_query("SELECT DATE_ADD(tarihalani,INTERVAL 1 SECON
      D); //Tarihe 1 Saniye Ekler
                // '2005-01-01 00:00:00'
        $sorgu = mysql_query("SELECT DATE_ADD(tarihalani,INTERVAL 1 DAY)")
      ; //Tarihe 1 Gün Ekler
                // '2005-01-01 23:59:59'
      $sorgu = mysql_query("SELECT DATE_ADD(tarihalani,INTERVAL '1:1' MINU
      TE_SECOND)");//Tarihe 1 Dakika 1 Saniye Ekler
                // '2005-01-01 00:01:00'
        $sorgu = mysql_query("SELECT DATE_ADD(tarihalani,INTERVAL '-
      1 10' DAY_HOUR)"); //Tarihden 1 Gün 10 Saat Çıkarır
              // '2004-12-30 14:59:59'
        $sorgu = mysql_query("SELECT DATE_ADD('1992-12-
      31 23:59:59.000002',INTERVAL '1.999999' SECOND_MICROSECOND)");//T
      arihden 1 Saniye 999999 Mikrosaniye Ekler
                // '1993-01-01 00:00:01.000001'
      ?>

      DATE_FORMAT

      MySQL'de tarihleri dönüştürmek için kullanılır. DATE_FORMAT() fonksiyonu PHP
fonksiyonuna benzer şekilde çalışır, ancak farklı biçimlendirme kodları kullanır.
MySQL'deki tarih ve saatler ISO 8601 biçimi kullanılarak işlenir. ISO 8601'de tarihlerin, yıl
önce olacak şekilde girilmesi gerekir. YYYY-AA-GG SS:DD:SS Örnek 2005'in Haziran ayı


                                             32
için 2005-06-01 olarak girilmelidir. Bu ISO 8601 tarih formatını, GG.AA.YYYY şekline
getirmek için bu fonksiyondan yararlanabilirsiniz


     Parametreler:

     %M      : Ay, tüm metin (January...December)
     %W      : Gün adı, tüm metin. (Sunday...Saturday)
     %D      : Ayın günü, sayısal, metin sonekiyle birlikte (örneğin, 1st)
     %Y      : Yıl, sayısal, 4-basamaklı
     %y      : Yıl, sayısal, 2-basamaklı
     %a      : Gün adı, 3-karakter (Sun...Sat)
     %d      : Ayın günü, sayısal, başta sıfır var.. (00...31)
     %e      : Ayın günü, sayısal, başta sıfır yok...(0...31)
     %m      : Ay, sayısal, başta sıfır var.. (00...12)
     %c      : Ay, sayısal, başta sıfır yok... (0...12)
     %b      : Ay, metin, 3-karakter(Jan...Dec)
     %j      : Yılın günü, sayısal..&amp;nbsp;
     %H      : Saat, 24-saat, başta sıfır var&amp;nbsp;
     %k      : Saat, 24-saat, başta sıfır yok&amp;nbsp;
     %h ya da %I : Saat, 12-saat, başta sıfır var&amp;nbsp;
     %l      : Saat, 12-saat, başta sıfır yok..&amp;nbsp;
     %i      : Dakika, sayısal, başta sıfır var.&amp;nbsp;
     %r      : Zaman, 12-saat (hh:mm:ss [AM|PM])&amp;nbsp;
     %T      : Zaman, 24-saat (hh:mm:ss)&amp;nbsp;
     %S ya da %s : Saniye, sayısal, başta sıfır var... (00...59)
     %p      : AM veya PM&amp;nbsp;
     %w      : Haftanın günü, sayısal, 0'dan (Sunday) 6'ya (Saturday) kadar...

     Örnek: MySQL Tarih Biçimini Şekillendirme
     <?php
       /*
       Dosyalar veri tabanındaki uyeler Tablosunu Kullandığınızı Varsayarsak
       +--------+---------------------+
       | uyeadi | kayittarihi       |
       +--------+---------------------+
       | ali | 2005-05-14 15:20:00 |
       +--------+---------------------+
       | veli | 2005-06-14 15:20:00 |
       +--------+---------------------+
       */
       $sorgu = mysql_query("SELECT DATE_FORMAT(kayittarihi, '%d.%m.%Y
     %H:%i:%s') AS kayittarihi FROM uyeler",$baglanti); //MySQL Tarih Alanı Bi
     çimlendiriliyor
       while($veri = mysql_fetch_array($sorgu)
       {
         echo $veri["kayittarihi"];

                                           33
}

      //Sonuç
      //14.05.2005 15:20:00
      //14.06.2005 15:20:00
     ?>

     Örnek: UNIXTIME Alanını Düzenleme
     <?php
       /*
       Dosyalar Klasöründeki uyeler Tablosunu Kullandığınızı Varsayarsak...
       +--------+---------------------+
       | uyeadi | kayit_tarihi      |
       +--------+---------------------+
       | ali | 1116076800            |
       +--------+---------------------+
       */
       require("ayar.php");
       require("baglan.php");
       $sorgu = mysql_query("SELECT DATE_FORMAT(FROM_UNIXTIME(kayit_t
     arihi), '%d.%m.%Y %H:%i:%s') AS kayit_tarihi FROM uyeler"); //Unixtime
      Zaman Biçimi Düzenleniyor
       $veri = mysql_fetch_array($sorgu)

           echo $veri["kayit_tarihi"];

      //Sonuç
      //14.05.2005 15:20:00
     ?>


     DATE_SUB

      Bu fonksiyon, tarih hesaplama işlemleri için kullanılır. Bu fonksiyonla aynı çalışan
DATE_ADD() ADDDATE() SUBDATE() fonksiyonları vardır. ADDDATE() ve
SUBDATE(), DATE_ADD() ve DATE_SUB() fonksiyonlarının eş anlamlılarıdır.
      Burada kullanılan tarih, DATETIME (tarih,zaman) ya da DATE (tarih) değeridir.
Bunlar başlangıç değerini belirler. Yazım formatı INTERVAL değerini belirler. Bu değer
başlangıç değerine eklenir veya çıkarılır.

     Kullanımı:
     DATE_SUB(date,INTERVAL expr type)
     DATE_SUB(tarih, INTERVAL yazım formatı tip)

     Bu fonksiyonla aynı çalışan diğer fonksiyonlar
     DATE_ADD (tarih, INTERVAL yazım formatı tip)
     ADDDATE(tarih, INTERVAL yazım formatı tip)
     SUBDATE(tarih, INTERVAL yazım formatı tip)
                                            34
DAY
Bu fonksiyon DAYOFMONTH() fonksiyonunun eş anlamlısıdır.

DAYNAME
Tarih için hafta günlerinin ismini verir ( İngilizce olarak ).

DAYNAME(tarih)
mysql> select DAYNAME("2005-08-22");
  -> 'Monday'

DAYOFMONTH
Geçerli tarih için ayın gününü verir (1-31 aralığında).

DAYOFMONTH(tarih)
mysql> select DAYOFMONTH('1998-02-03');
  -> 3

DAYOFWEEK

DAYOFWEEK(tarih)
Haftanın gününü döndürür.
Geçerli tarih için: (1=Pazar, 2= Pazartesi, ......7= Cumartesi) Bu değerler, ODBC
standardıyla aynıdır.

mysql> select DAYOFWEEK('1998-02-03');
  -> 3

Kullanımı:
mysql> select DAYOFWEEK('1998-02-03');
  -> 3

DAYOFYEAR
Geçerli tarih için yılın gün sayısını döndürür (1-366).

DAYOFYEAR(tarih)
mysql> select DAYOFYEAR('1998-02-03');
  -> 34

EXTRACT
Bu fonksiyon, aynı DATE_ADD() ve DATE_SUB() fonksiyonlarındaki INTERVAL
tiplerini kullanır. Yalnız tarih hesaplamaları yerine tarihten payları çıkarır.


EXTRACT(typ FROM tarih)

Örnek: EXTRACT() Kullanım Örnekleri


                                         35
<?php
 $sql1 = mysql_query("SELECT EXTRACT(YEAR FROM '2005-10-
03') AS tarih");
 $sonuc = mysql_fetch_object($sql1);
 echo $sonuc->tarih; //2005
 $sql2 = mysql_query("SELECT EXTRACT(YEAR_MONTH FROM '2005-10-
03 15:25:00') AS tarih");
 $sonuc = mysql_fetch_object($sql2);
 echo $sonuc->tarih; //200510
 $sql3 = mysql_query("SELECT EXTRACT(DAY_MINUTE FROM '2005-10-
03 15:25:00') AS tarih");
 $sonuc = mysql_fetch_object($sql3);
 echo $sonuc->tarih; //31525
?>

HOUR
Geçerli zamanın saatini döndürür (0–23 arasında).

HOUR(zaman)
mysql> select HOUR('10:05:03');
  -> 10

MINUTE
Geçerli zaman için dakikayı verir (0-59).

MINUTE(zaman)
mysql> select MINUTE('98-02-03 10:05:03');
  -> 5

MONTH
Datetime formatındaki tarihin ayını 1-12 şeklinde döndürür.

Kullanımı:
MONTH(tarih)
mysql> SELECT MONTH('1998–02–03');
     -> 2

Örnek: MONTH () Kullanımı
<?php
 /*
 MySQL'deki tarih alanı datetime olarak ayarlandığını varsayarsak.
 +---------------------+
 | tarihalani       |
 +---------------------+
 | 2005-06-14 15:20:00 |
 +---------------------+
 */

                                       36
$sorgu = mysql_query("SELECT MONTH(tarihalani) AS tarih_alani FROM t
abloadi");
 $sonuc = mysql_fetch_array($sorgu);
 echo $sonuc["tarih_alani"];
 //Çıktısı 6 Olacaktır
?>

MONTHNAME
Tarih için ayların ismini verir (İngilizce olarak).

MONTHNAME(tarih)
mysql> select MONTHNAME("1998-02-05");
  -> 'February'

NOW
Şimdiki zamanı 'YYYY-MM-DD HH:MM:SS' veya YYYYMMDDHHMMSS
formatında verir.
NOW()

Örnek: NOW() Kullanım Örnekleri
mysql> SELECT NOW();
  -> '1997-12-15 23:50:26'
mysql> SELECT NOW() + 0;
  -> 19971215235026

QUARTER
Geçerli tarih için yılın kaçıncı çeyreği olduğunu (1-4) döndürür.

QUARTER(tarih)
mysql> select QUARTER('98-04-01');
  -> 2

SECOND
Zaman için saniyeyi verir (0-59).

SECOND(zaman)
mysql> select SECOND('10:05:03');
  -> 3


TIME_TO_SEC
Fonksiyona verilen saat argümanını saniyeye çevirir.
TIME_TO_SEC(saat)

mysql> SELECT TIME_TO_SEC('22:23:00');
      -> 80580
mysql> SELECT TIME_TO_SEC('00:39:38');
      -> 2378
                                         37
WEEK
       Fonksiyon tek argümanla geçerli tarihin kaçıncı hafta olduğunu verir (0-53
aralığında). (Bazı yerlerde 53 haftanın başlangıcı da olabilir.) Bazı yerlerde Pazar, haftanın
ilk günüdür. İkinci argümanla WEEK() fonksiyonunda haftanın pazar veya pazartesi ile
başlayacağını belirleyebilirsiniz. İkinci argüman sıfır (0) olursa hafta pazar günleri başlar, 1
olursa pazartesi günleri başlar.

      WEEK(tarih), WEEK(tarih,ilkgün)
      mysql> select    WEEK('1998-02-20');
        -> 7
      mysql> select    WEEK('1998-02-20',0);
        -> 7
      mysql> select    WEEK('1998-02-20',1);
        -> 8
      mysql> select    WEEK('1998-12-31',1);
        -> 53

      WEEKDAY
      Geçerli tarih için haftanın gününü verir (0 = Pazartesi, 1= Salı, .....6= Pazar).

      WEEKDAY(tarih)
      mysql> select WEEKDAY('1997–10–04 22:23:00');
        -> 5
      mysql> select WEEKDAY('1997–11-05');
            -> 2

      YEAR
      Geçerli tarihin yılını döndürür (1000-9999).

      YEAR(tarih) mysql> select YEAR('98-02-03'); -> 1998

       YEARWEEK
       Geçerli tarihin yıl ve hatfasını döndürür. İkinci argüman, WEEK() fonksiyonundaki
ikinci argüman ile aynı çalışır. (ikinci argüman sıfır (0) olursa hafta pazar günleri başlar, 1
olursa pazartesi günleri başlar) Dikkat edilmesi gereken, senenin ilk ve son haftasındaki yıl,
argümanda verilen tarihteki seneden farklı olabilir.

      YEARWEEK(tarih), YEARWEEK(tarih,ilk)
      mysql> select YEARWEEK('1987-01-01'); -> 198653




                                               38
1.9.3. Karşılaştırma Fonksiyon ve Operatörleri

     Eşittir   “=”
      mysql>    SELECT 1 = 0;
       -> 0
      mysql>    SELECT ‘0’ = 0;
       -> 1
      mysql>    SELECT ‘0.0’ = 0;
       -> 0
      mysql>    SELECT ‘0.01’ = 0;
       -> 0
      mysql>    SELECT ‘.01’ = 0.1 ;
       -> 1

     Eşit Değildir    “<>”, “!=”
      mysql> SELECT ‘.01’ <> ‘0.01’;
        -> 1
      mysql> SELECT .01 <> ‘0.01’;
        -> 0
      mysql> SELECT ‘zapp’ <> ‘zappp’;
        -> 1

     Küçüktür veya Eşittir    “<=”
      mysql>SELECT 0.1 <= 2;
        -> 1

     Küçüktür                 “<”
      mysql> SELECT 2 < 2;
        -> 1

     Büyüktür veya eşittir    “>=”
      mysql> SELECT 2 >= 2;
        -> 1

      mysql>SELECT 2 > 2;
        -> 1
     Büyüktür                 “>”

     GREATEST(değer1,değer2,.......)
     İki veya daha fazla değer verildiğinde en büyük olan değeri seçer. LEAST()
     komutuyla aynı şekilde kullanılır.
      mysql>SELECT GREATEST (2 , 0);
        ->2
      mysql>SELECT GREATEST (34.0 , 3.0 , 5.0 , 767.0);
        ->767.0



                                          39
MySQL 5.0.13 ‘ten önce, GREATEST() fonksiyonu sadece diğer değerlerin hepsi
     geçersiz duruma geçtiğinde geçersiz oluyordu. 5.0.13’te değerlerden herhangi biri
     geçersiz olduğunda hemen geçersiz oluyor.

     IN
     expr IN (değer,...)
     Verilen expr değerlerin herhangi birine eşitse “1” değilse “0” verir.

     mysql> SELECT 2 IN (0, 3, 5, 6);
       -> 0
     mysql> SELECT ‘wefwf’ IN (‘weee’, ‘wefwf’, ‘whfk’);
       -> 1




     INTERVAL (N,N1,N2,N3...)
     Eğer N<N1 ise “0”; eğer N<N2 ise “+1”; eğer N NULL ise “-1“ değerini alır ve alınan
     değerler toplanır. Fakat bu fonksiyonun doğru olarak çalışabilmesi için
     N1<N2<N3.....<Nn olmalıdır.

     mysql> SELECT INTERVAL ( 23, 1, 15, 17, 30, 44, 200 );
       -> 3
     mysql> SELECT INTERVAL ( 10, 1, 10, 100, 1000 );
       -> 2
     mysql> SELECT INTERVAL ( 22, 23, 30, 44, 200 );
             ->0


     LEAST (değer1, değer2)
     İki ya da daha fazla değerlikten en küçük olanını seçer. Eğer girilen değerler string ise
     harf sırasına göre bulacaktır.

     mysql> SELECT LEAST ( 2, 0 );
       -> 0
     mysql> SELECT LEAST ( 3.0, 34.0, 5.0, 767.0 );
       -> 3.0
     mysql> SELECT LEAST ( ‘B’, ‘A’, ‘C’ )
       -> ‘A’’


1.9.4. Mantıksal Operatörler

     SQL’de mantıksal operatörler TRUE, FALSE VE NULL terimlerinden oluşur.
     MySQL’de ise 1(TRUE), 0(FALSE) ve NULL terimleri kullanılır.



                                             40
NOT (DEĞİL) “!”
     Lojik DEĞİL KAPISI ’na eşittir. 1 girilirse çıkışı 0; 0 girilirse çıkışı 1 yapar.

      mysql> SELECT      NOT 10 ;
       -> 0
      mysql> SELECT      NOT 0 ;
       -> 1
      mysql> SELECT      NOT NULL;
       -> NULL
      mysql> SELECT      NOT ! (1+1);
       -> 0
      mysql> SELECT      NOT ! 1 + 1;
       -> 1

     En son verilen örnekte sonuç ‘1’ dir, çünkü “( ! 1) + 1’” değerine eşittir.

     AND (VE) “&&”
     Lojik VE KAPISI’na eşittir. Girişlerden herhangi biri ‘0’ ise çıkış değerini ‘0’ verir.

      mysql> SELECT      1 && 1 ;
        -> 1
      mysql> SELECT      1 && 0 ;
        -> 0
      mysql> SELECT      1 && NULL ;
        -> NULL
      mysql> SELECT      0 && NULL ;
        -> 0
      mysql> SELECT      NULL && 0 ;
        -> 0

      OR (VEYA)     “| |”
      Lojik VEYA KAPISI’na eşittir. Girişlerden herhangi birisi ‘1’ olduğunda çıkış
değerini ‘1’ verir.

      mysql> SELECT       1 || 1 ;
        -> 1
      mysql> SELECT       1 || 0 ;
        -> 1
      mysql> SELECT       0 || 0 ;
        -> 0
      mysql> SELECT       0 || NULL ;
        -> NULL
      mysql> SELECT       1 || NULL ;
        -> 1




                                             41
XOR (ÖZEL VEYA)
       Lojik olarak ÖZEL VEYA KAPISI’nın yaptığı işi görür. Girişler aynı olduğunda
çıkış değerini ‘0’; diğer durumlarda ‘1’ verir.

      mysql> SELECT      1 XOR 1 ;
        -> 0
      mysql> SELECT      1 XOR 0 ;
        -> 1
      mysql> SELECT      1 XOR NULL ;
        -> NULL
      mysql> SELECT      1 XOR 1 XOR 1 ;
        -> 1

      Matematiksel olarak “( a AND ( NOT b)) OR (( NOT a ) AND b) “ değerine
      eşittir.

1.9.5. Kontrol Mekanizmaları ve Karakter Fonksiyonları

       1.CASE değer WHEN [ değeri karşılaştır ] THEN sonuç [ WHEN [ değeri
       karşılaştır ]
        THEN sonuç ...]
        [ELSE sonuç ] END
       2. CASE WHEN [ durum ] THEN sonuç [when [ durum ] THEN sonuç ...] [ELSE
      sonuç ]

       Birincisinde eğer değer karşılaştırılacak değere eşitse sonuçta söylenen durumu yapar.
Eğer değer karşılaştırılacak durumlara eşit değilse ELSE komutu ile söylenen sonucu
yaptırır.

      İkincisinde ise, eğer durum gerçekleşiyorsa sonuçta söyleneni yapar. Eğer durum
gerçekleşmiyorsa yine ELSE komutundan sonra söylenen işi yapar.

      mysql> SELECT CASE 1 WHEN 1 THEN ‘one’
        -> WHEN 2 THEN ‘two’ ELSE ‘more’ END;
        -> ‘one’
      mysql> SELECT CASE 1>0 THEN ‘true’ ELSE ‘false’ END;
        -> ‘true’
      mysql> SELECT CASE BINARY ‘B’
        -> WHEN ‘a’ THEN 1 WHEN ’b’ THEN 2 END;
        -> NULL




                                             42
IF(expr1, expr2, expr3)

      Mysql> SELECT IF ( 1 > 2 , 1, 0);
        -> 0
      mysql> SELECT IF ( 1 < 2, ‘YES’, ‘NO’ );
        -> ‘YES’
      mysql> SELECT IF (STRCMP(‘test’, ‘test1’), ‘no’, ‘yes’ );
        -> ‘no’

     expr1’de yazan eğer doğruysa expr2; değilse exper3’de yazanı uygular.

     ASCII ( str )
     Eğer girilen değer null bir ifade değilse değerin ascıı kodunu verir( 0 – 255 ).

     BIN(N)
     Girilen sayıyı BINARY sayı sistemine çevirir.

      mysql> SELECT BIN ( 12 );
        -> ‘1100’

     BIT_LENGHT (str)
     Girilen değerin kaç bitlik olduğunu bulur.

      mysql> SELECT BIT_LENGHT (‘text’)
        -> 32

     CHAR (N,....)
     Girilen ascıı kodları karakterlere dönüştürür.

      mysql> SELECT CHAR ( 77, 121, 83, 81, ‘76’ );
        -> ‘MySQL’
      mysql> SELECT CHAR ( 77, 77.3, ‘77.3’ );
        -> ‘MMM’

      CONCAT( str1, str2,... )
      String toplama yapar. Eğer değerlerden herhangi birisi null bir ifade ise null olan
ifadeyi seçer.

      mysql> SELECT CONCAT ( ‘My’, ‘S’, ‘QL’ );
        -> ‘MySQL’
      mysql> SELECT CONCAT ( ‘My’, NULL, ‘QL’ );
         -> NULL
      mysql> SELECT CONCAT ( 14.3 );
              - > 14.3




                                             43
CONCAT_WS ( separator, str1, str2,...)
       Tıpkı CONCAT fonksiyonunda olduğu gibi string toplama yapar, fakat bunun tek
farkı değerler arasına istediğimiz bir karakter koyabilmemizdir. Eğer değerlerin arasında bir
null değer varsa onu pas geçer ve bir sonrakiyle birleştirir.

      mysql> SELECT CONCAT_WS ( ‘,’ , ‘First name’, ‘Second name’, ‘Last
      name’ );
        -> ‘First name, Second name, Last name’
      mysql> SELECT CONCAT_WS ( ‘,’ , ‘First name’, NULL, ‘Last name’ );
        -> ‘First name, Last name’


      ELT ( N, str1, str2, strn,...)
      N=1 ise str1’i, N=2 ise str2’i, N=n ise strn‘i seçer.

      mysql>     SELECT ELT ( 1, ‘ej’, ‘der’, ‘alp’);
          ->     ‘ej’
      mysql>     SELECT ELT ( 4, ‘ej’, ‘der’, ‘alp’);
          ->     ‘alp’

       FIELD ( str, str1, str2,str3,... )
       Eğer str’deki yazı diğerlerinin içinde varsa kaç numaralı str’ de olduğunu verir. Eğer
str diğerlerinin içinde yoksa ‘0’ verir.

      mysql>     SELECT FIELD ( ‘ej’, ‘hej’, ‘ej’, ‘foo’);
          ->     2
      mysql>     SELECT FIELD ( ‘ej’, ‘hej’, ‘lej’, ‘foo’);
          ->     0

      FIND_IN_SET ( str, strlist)
      Verilen str’nin strlist içinde kaçıncı sırada olduğunu bulur.

      mysql> SELECT FIND_IN_TEXT ( ‘b’, ‘a, b, c, d’);
          -> 2

        FORMAT ( X, D )
        ‘#,###,###.##’ diye bir X sayısının olduğunu varsayalım. D sayısı bu sayının ondalıklı
kısmını yuvarlar veya ‘0’ koyarak ondalıklı kısımdaki D tane sayı olmasını sağlar. Eğer D
sıfır ise ondalıklı kısım kalkar.

      Mysql>     SELECT FORMAT ( 12332.123456, 4 );
          ->     12,332.1235
      mysql>     SELECT FORMAT ( 12332.1, 4);
          ->     12,332.1000
      mysql>     SELECT FORMAT ( 12332.2, 0);
          ->     12,332

                                               44
INSERT(str,pos,len,newstr)
         Verilen metin içerisine istenilen posizyondan itibaren ‘ ’ işareti içinde verilen değeri
yazar.
         mysql> SELECT INSERT('Quadratic', 3, 4, 'What');
          -> 'QuWhattic'
         mysql> SELECT INSERT('Quadratic', -1, 4, 'What');
           -> 'Quadratic'
         mysql> SELECT INSERT('Quadratic', 3, 100, 'What');
           -> 'QuWhat'

         LEFT(str,len)
         Parantez içerisinde verilen metnin, verilen karakter sayısı kadarını soldan itibaren alır.
         mysql> SELECT LEFT('foobarbar', 5);
            -> 'fooba'

         LENGTH(str)
         ‘’ (tırnak) içinde verilen string ifadenin sayısını verir.
         mysql> SELECT LENGTH('text');
           -> 4

         LOWER(str)
         Büyük harflerle yazılan string ifadeyi küçük harflere çevirir.
         mysql> SELECT LOWER('QUADRATICALLY');
           -> 'quadratically'

         LTRIM(str)
         Yazılan string ifadenin solunda bulunan boşluğu siler.
         mysql> SELECT LTRIM(' barbar');
           -> 'barbar'

         RTRIM(str)
         Yazılan string ifadenin sağında bulunan boşluğu siler.
         mysql> SELECT LTRIM(‘barbar             ');
           -> 'barbar'

         MID(str,pos,len)
         Verilen string, soldan belirtilen pozisyonundan itibaren belirtilen kadar karakterini alır.

         REPEAT(str,count)
         Tırnak içinde verilen karakteri istendiği kadar yazdırır.
         mysql> SELECT REPEAT('MySQL', 3);
           -> 'MySQLMySQLMySQL'

         REVERSE(str)
         Verilen string ifadeyi tersinden yazdırır.
         mysql> SELECT REVERSE('abc');
           -> 'cba'

                                                   45
RIGHT(str,len)
     Verilen string içinden sağdan verilen değer kadar olan karakteri alır.
     mysql> SELECT RIGHT('foobarbar', 4);
       -> 'rbar'

     SPACE(N)
     Verilen sayısal değer kadar boşluk verir.
     mysql> SELECT SPACE(6);
       -> '   '

     UPPER(str)
     Verilen string ifadeyi tamamen büyük karakterlere çevirir.
     mysql> SELECT UPPER('Hej');
       -> 'HEJ'

1.9.6. Aritmetik Operatörler
     Toplama
     mysql> SELECT 3+5;
       -> 8

     Çıkarma
     mysql> SELECT 3-5;
       -> -2

     Negatif sayı (devamındaki sayıyı negatif yapar)
     mysql> SELECT - 2;
       -> -2

     Çarpma
     mysql> SELECT 3*5;
         -> 15
     mysql> SELECT 18014398509481984*18014398509481984.0;
         -> 324518553658426726783156020576256.0

     Bölme
     mysql> SELECT 3/5;
       -> 0.60
     Sıfıra bölme hatası olduğunda sonuçta NULL değeri döner.
     mysql> SELECT 102/(1-1);
       -> NULL

     DIV
     Tam bölme; bölme işlemi sonunda virgül kısmı atılır, tam kısmı yazar.
     mysql> SELECT 5 DIV 2;
       -> 2



                                             46
N%M
     Kalan bulma; N bölü M. işleminden kalanı verir.

1.9.7. Matematiksel Fonksiyonlar

     ABS(X)
     Verilen sayısal değerin mutlak değerini verir.
     mysql> SELECT ABS(2);
       -> 2
     mysql> SELECT ABS(-32);
       -> 32

     ACOS(X)
     Verilen değerin arc cosine değerini verir.
     mysql> SELECT ACOS(1);
       -> 0
     mysql> SELECT ACOS(1.0001);
       -> NULL
     mysql> SELECT ACOS(0);
       -> 1.5707963267949

     ASIN(X)
     Verilen değerin arc sinus değerini verir.
     mysql> SELECT ASIN(0.2);
        -> 0.20135792079033
     mysql> SELECT ASIN('foo');
     +-------------+
     | ASIN('foo') |
     +-------------+
     |        0|
     +-------------+
     1 row in set, 1 warning (0.00 sec)
     mysql> SHOW WARNINGS;
     +---------+------+-----------------------------------------+
     | Level | Code | Message                            |
     +---------+------+-----------------------------------------+
     | Warning | 1292 | Truncated incorrect DOUBLE value: 'foo' |
     +---------+------+-----------------------------------------+

     ATAN(X)
     Verilen değerin arc tangent değerini verir.
     mysql> SELECT ATAN(2);
           -> 1.1071487177941
     mysql> SELECT ATAN(-2);
           -> -1.1071487177941



                                             47
COS(X)
Radians değeri verilen değerin cosinusini verir.
mysql> SELECT COS(PI());
     -> -1

COT(X)
Verilen değerin cotangant değerini verir.
mysql> SELECT COT(12);
  -> -1.5726734063977
mysql> SELECT COT(0);
  -> NULL

DEGREES(X)
Verilen değişkenini değerini radyandan derceye döüştürür.
mysql> SELECT DEGREES(PI());
  -> 180
mysql> SELECT DEGREES(PI() / 2);
  -> 90

LN(X) LOG(X), LOG(B,X)
X değişken değerinin doğal logaritmasını verir.
mysql> SELECT LN(2);
  -> 0.69314718055995
mysql> SELECT LN(-2);
  -> NULL
mysql> SELECT LOG(2);
  -> 0.69314718055995
mysql> SELECT LOG(-2);
  -> NULL

MOD(N,M), N % M, N MOD M
N değerinin M. değerine bölümünden kalanını verir.
mysql>   SELECT MOD(234, 10);
  -> 4
mysql>   SELECT 253 % 7;
  -> 1
mysql>   SELECT MOD(29,9);
  -> 2
mysql>   SELECT 29 MOD 9;
  -> 2

PI ( X)
PI sayısının değerini verir.
mysql> SELECT PI();
  -> 3.141593
mysql> SELECT PI()+0.000000000000000000;
  -> 3.141592653589793116

                                       48
RADIANS(X)
X değişkenin değeri dereceden radyana dönüştürür.
mysql> SELECT RADIANS(90);
  -> 1.5707963267949

TAN(X)
Radyan olarak verilen değerin tanjantını verir.
mysql> SELECT TAN(PI());
  -> -1.2246063538224e-16
mysql> SELECT TAN(PI()+1);
  -> 1.5574077246549

SQRT(X)
X değerinin karekökünü verir (Negatif sayıların karekökü olmaz.).
mysql> SELECT SQRT(4);
  -> 2
mysql> SELECT SQRT(20);
  -> 4.4721359549996
mysql> SELECT SQRT(-16);
  -> NULL

SIGN(X)
Değişkenlerin işaretlerini verir ( -1  sayı negatifse 0  sıfır olduğunda veya 1
sayı pozitif olduğunda).
mysql> SELECT SIGN(-32);
  -> -1
mysql> SELECT SIGN(0);
  -> 0
mysql> SELECT SIGN(234);
  -> 1

SIN(X)
Radyan olarak verilen değerin sinüsünü verir.
mysql> SELECT SIN(PI());
  -> 1.2246063538224e-16
mysql> SELECT ROUND(SIN(PI()));
  -> 0




                                       49
UYGULAMA FAALİYETİ

UYGULAMA FAALİYETİ


                                         MAGAZA



    MUSTERI                                URUN                               SIPARIS

                                        urun_no
   Musteri_no                                                                 Musteri_no
                                        markasi
   adi                                                                       Siparis_tarihi
                                        urun_adi
   soyadi                                                                     Urun_kodu

                                        Urun_fiyat
   kart_no                                                                       fiyat

   zaman                                                                        miktar

                                                                                 tutar
                                          Şekil 1.2

           İşlem Basamakları                                      Öneriler
 Yukarıdaki şekle göre MAGAZA adlı
  bir veri tabanı oluşturunuz.
 musteri, urun ve siparis adlı tabloları
  oluşturunuz.
                                                 Uygulamalar için kayıtlarda            benzer
 Her tabloya beşer kayıt giriniz.                değerler girebilirsiniz (aynı          isimli,
                                                  fiyatları aynı olan ürünler gibi).
 Girilen kayıtlardan urun fiyatı 25YTL
  olan ürünleri listeleyiniz.
 Müşteri adı Mesut ve sipariş tarihi
  30/04/2007           olan        kayıtları
  görüntüleyiniz.
 Girmiş         olduğunuz          müşteri
  kayıtlarından ikisini siliniz.
 Ürünlerden       bazılarının   fiyatlarını
  değiştiriniz.
 Ürün fiyatı en pahalı olan ürün
  hangisi?
 Tabloları siliniz.
 Magaza veri tabanını siliniz.

                                               50
Internet programcılığı 5
Internet programcılığı 5
Internet programcılığı 5
Internet programcılığı 5
Internet programcılığı 5
Internet programcılığı 5
Internet programcılığı 5
Internet programcılığı 5
Internet programcılığı 5
Internet programcılığı 5
Internet programcılığı 5
Internet programcılığı 5
Internet programcılığı 5
Internet programcılığı 5
Internet programcılığı 5
Internet programcılığı 5

More Related Content

Similar to Internet programcılığı 5

Nesne tabanlı programlamaya giriş
Nesne tabanlı programlamaya girişNesne tabanlı programlamaya giriş
Nesne tabanlı programlamaya girişErol Dizdar
 
Nesne tabanlı programlamada karar ve döngü yapıları
Nesne tabanlı programlamada karar ve döngü yapılarıNesne tabanlı programlamada karar ve döngü yapıları
Nesne tabanlı programlamada karar ve döngü yapılarıErol Dizdar
 
Kodlamaya hazırlık
Kodlamaya hazırlıkKodlamaya hazırlık
Kodlamaya hazırlıkErol Dizdar
 
Tasarımın temel ilkeleri
Tasarımın temel ilkeleriTasarımın temel ilkeleri
Tasarımın temel ilkeleriErol Dizdar
 
Internet programcılığı 1
Internet programcılığı 1Internet programcılığı 1
Internet programcılığı 1Erol Dizdar
 
Sunucu işletim sistemi 5
Sunucu işletim sistemi 5Sunucu işletim sistemi 5
Sunucu işletim sistemi 5Erol Dizdar
 
Sunucu işletim sistemi 6
Sunucu işletim sistemi 6Sunucu işletim sistemi 6
Sunucu işletim sistemi 6Erol Dizdar
 
Internet programcılığı 3
Internet programcılığı 3Internet programcılığı 3
Internet programcılığı 3Erol Dizdar
 
Tcp ip ve ip adresleme
Tcp ip ve ip adreslemeTcp ip ve ip adresleme
Tcp ip ve ip adreslemeOnur Şaner
 
Nesne tabanlı programlama 6
Nesne tabanlı programlama 6Nesne tabanlı programlama 6
Nesne tabanlı programlama 6Erol Dizdar
 
Sistem güvenliği
Sistem güvenliğiSistem güvenliği
Sistem güvenliğiOnur Şaner
 
Internet programciligi-2
Internet programciligi-2Internet programciligi-2
Internet programciligi-2major5
 
Işletim sistemi kurulumu
Işletim sistemi kurulumuIşletim sistemi kurulumu
Işletim sistemi kurulumuErol Dizdar
 
Sunucu işletim sistemi 4
Sunucu işletim sistemi 4Sunucu işletim sistemi 4
Sunucu işletim sistemi 4Erol Dizdar
 
Nesne tabanlı programlama 3
Nesne tabanlı programlama 3Nesne tabanlı programlama 3
Nesne tabanlı programlama 3Erol Dizdar
 
789 yazilim360egitimleri2014
789 yazilim360egitimleri2014789 yazilim360egitimleri2014
789 yazilim360egitimleri2014yunus yiğit
 
Sunucu işletim sistemi 1
Sunucu işletim sistemi 1Sunucu işletim sistemi 1
Sunucu işletim sistemi 1Erol Dizdar
 
Kontrol deyimleri
Kontrol deyimleriKontrol deyimleri
Kontrol deyimleriErol Dizdar
 
Tcp ip iletim katmanı
Tcp ip iletim katmanıTcp ip iletim katmanı
Tcp ip iletim katmanıOnur Şaner
 

Similar to Internet programcılığı 5 (20)

Nesne tabanlı programlamaya giriş
Nesne tabanlı programlamaya girişNesne tabanlı programlamaya giriş
Nesne tabanlı programlamaya giriş
 
Nesne tabanlı programlamada karar ve döngü yapıları
Nesne tabanlı programlamada karar ve döngü yapılarıNesne tabanlı programlamada karar ve döngü yapıları
Nesne tabanlı programlamada karar ve döngü yapıları
 
Kodlamaya hazırlık
Kodlamaya hazırlıkKodlamaya hazırlık
Kodlamaya hazırlık
 
Tasarımın temel ilkeleri
Tasarımın temel ilkeleriTasarımın temel ilkeleri
Tasarımın temel ilkeleri
 
Internet programcılığı 1
Internet programcılığı 1Internet programcılığı 1
Internet programcılığı 1
 
Sunucu işletim sistemi 5
Sunucu işletim sistemi 5Sunucu işletim sistemi 5
Sunucu işletim sistemi 5
 
Sunucu işletim sistemi 6
Sunucu işletim sistemi 6Sunucu işletim sistemi 6
Sunucu işletim sistemi 6
 
Internet programcılığı 3
Internet programcılığı 3Internet programcılığı 3
Internet programcılığı 3
 
Tcp ip ve ip adresleme
Tcp ip ve ip adreslemeTcp ip ve ip adresleme
Tcp ip ve ip adresleme
 
Nesne tabanlı programlama 6
Nesne tabanlı programlama 6Nesne tabanlı programlama 6
Nesne tabanlı programlama 6
 
Sistem güvenliği
Sistem güvenliğiSistem güvenliği
Sistem güvenliği
 
Internet programciligi-2
Internet programciligi-2Internet programciligi-2
Internet programciligi-2
 
Işletim sistemi kurulumu
Işletim sistemi kurulumuIşletim sistemi kurulumu
Işletim sistemi kurulumu
 
Sunucu işletim sistemi 4
Sunucu işletim sistemi 4Sunucu işletim sistemi 4
Sunucu işletim sistemi 4
 
Nesne tabanlı programlama 3
Nesne tabanlı programlama 3Nesne tabanlı programlama 3
Nesne tabanlı programlama 3
 
Basit kodlar
Basit kodlarBasit kodlar
Basit kodlar
 
789 yazilim360egitimleri2014
789 yazilim360egitimleri2014789 yazilim360egitimleri2014
789 yazilim360egitimleri2014
 
Sunucu işletim sistemi 1
Sunucu işletim sistemi 1Sunucu işletim sistemi 1
Sunucu işletim sistemi 1
 
Kontrol deyimleri
Kontrol deyimleriKontrol deyimleri
Kontrol deyimleri
 
Tcp ip iletim katmanı
Tcp ip iletim katmanıTcp ip iletim katmanı
Tcp ip iletim katmanı
 

More from Erol Dizdar

Kardiyovasküler Sistem Terminolojisi
Kardiyovasküler Sistem TerminolojisiKardiyovasküler Sistem Terminolojisi
Kardiyovasküler Sistem TerminolojisiErol Dizdar
 
ENDOKRİN SİSTEME AİT TERİMLER
ENDOKRİN SİSTEME AİT TERİMLERENDOKRİN SİSTEME AİT TERİMLER
ENDOKRİN SİSTEME AİT TERİMLERErol Dizdar
 
KAN TERMİMOLOJİSİ
KAN TERMİMOLOJİSİKAN TERMİMOLOJİSİ
KAN TERMİMOLOJİSİErol Dizdar
 
SİNDİRİM SİSTEMİ TERMİNOLOJİSİ
SİNDİRİM SİSTEMİ TERMİNOLOJİSİSİNDİRİM SİSTEMİ TERMİNOLOJİSİ
SİNDİRİM SİSTEMİ TERMİNOLOJİSİErol Dizdar
 
SİNİR SİSTEMİ VE PSİKİYATRİ TERİMLERİ
SİNİR SİSTEMİ VE PSİKİYATRİ TERİMLERİSİNİR SİSTEMİ VE PSİKİYATRİ TERİMLERİ
SİNİR SİSTEMİ VE PSİKİYATRİ TERİMLERİErol Dizdar
 
ÜrinerSistem Terminolojisi
ÜrinerSistem TerminolojisiÜrinerSistem Terminolojisi
ÜrinerSistem TerminolojisiErol Dizdar
 
TIBBİ TERMİNOLOJİ
TIBBİ TERMİNOLOJİTIBBİ TERMİNOLOJİ
TIBBİ TERMİNOLOJİErol Dizdar
 
Anksiyete(Kaygı) Bozuklukları
Anksiyete(Kaygı) BozukluklarıAnksiyete(Kaygı) Bozuklukları
Anksiyete(Kaygı) BozukluklarıErol Dizdar
 
Akılcı İlaç Kullanımı Ne Demektir?
Akılcı İlaç Kullanımı Ne Demektir?Akılcı İlaç Kullanımı Ne Demektir?
Akılcı İlaç Kullanımı Ne Demektir?Erol Dizdar
 
Yaşlı Hastada İlaç Kullanımı
Yaşlı Hastada İlaç KullanımıYaşlı Hastada İlaç Kullanımı
Yaşlı Hastada İlaç KullanımıErol Dizdar
 
GEBELİKTE AKILCI İLAÇ KULLANIMI
GEBELİKTE AKILCI İLAÇ KULLANIMIGEBELİKTE AKILCI İLAÇ KULLANIMI
GEBELİKTE AKILCI İLAÇ KULLANIMIErol Dizdar
 
Akılcı İlaç Kullanımı (AİK) nedir?
Akılcı İlaç Kullanımı (AİK) nedir?Akılcı İlaç Kullanımı (AİK) nedir?
Akılcı İlaç Kullanımı (AİK) nedir?Erol Dizdar
 
AKILCI ANTİBİYOTİK KULLANIMI 2
AKILCI ANTİBİYOTİK KULLANIMI 2AKILCI ANTİBİYOTİK KULLANIMI 2
AKILCI ANTİBİYOTİK KULLANIMI 2Erol Dizdar
 
AKILCI ANTİBİYOTİK KULLANIMI
AKILCI ANTİBİYOTİK KULLANIMIAKILCI ANTİBİYOTİK KULLANIMI
AKILCI ANTİBİYOTİK KULLANIMIErol Dizdar
 
COVID-19 Salgın Yönetimi ve Çalışma Rehberi
COVID-19 Salgın Yönetimi ve Çalışma RehberiCOVID-19 Salgın Yönetimi ve Çalışma Rehberi
COVID-19 Salgın Yönetimi ve Çalışma RehberiErol Dizdar
 
Kendi vpn sunucunuzu kurmak
Kendi vpn sunucunuzu kurmakKendi vpn sunucunuzu kurmak
Kendi vpn sunucunuzu kurmakErol Dizdar
 
Bilgisayar İlk Yardım
Bilgisayar İlk YardımBilgisayar İlk Yardım
Bilgisayar İlk YardımErol Dizdar
 
Düzce ve Çevresinde Gıda Olarak Tüketilen Yabani Bitkilerin Tüketim Biçimleri...
Düzce ve Çevresinde Gıda Olarak Tüketilen Yabani Bitkilerin Tüketim Biçimleri...Düzce ve Çevresinde Gıda Olarak Tüketilen Yabani Bitkilerin Tüketim Biçimleri...
Düzce ve Çevresinde Gıda Olarak Tüketilen Yabani Bitkilerin Tüketim Biçimleri...Erol Dizdar
 
Düzce Bitki Biyolojik Çeşitliliği, Endemik, Nadir Bitki Taksonları ve Koruma ...
Düzce Bitki Biyolojik Çeşitliliği, Endemik, Nadir Bitki Taksonları ve Koruma ...Düzce Bitki Biyolojik Çeşitliliği, Endemik, Nadir Bitki Taksonları ve Koruma ...
Düzce Bitki Biyolojik Çeşitliliği, Endemik, Nadir Bitki Taksonları ve Koruma ...Erol Dizdar
 
Mazeretleri yıkarak başarılı olmak
Mazeretleri yıkarak başarılı olmakMazeretleri yıkarak başarılı olmak
Mazeretleri yıkarak başarılı olmakErol Dizdar
 

More from Erol Dizdar (20)

Kardiyovasküler Sistem Terminolojisi
Kardiyovasküler Sistem TerminolojisiKardiyovasküler Sistem Terminolojisi
Kardiyovasküler Sistem Terminolojisi
 
ENDOKRİN SİSTEME AİT TERİMLER
ENDOKRİN SİSTEME AİT TERİMLERENDOKRİN SİSTEME AİT TERİMLER
ENDOKRİN SİSTEME AİT TERİMLER
 
KAN TERMİMOLOJİSİ
KAN TERMİMOLOJİSİKAN TERMİMOLOJİSİ
KAN TERMİMOLOJİSİ
 
SİNDİRİM SİSTEMİ TERMİNOLOJİSİ
SİNDİRİM SİSTEMİ TERMİNOLOJİSİSİNDİRİM SİSTEMİ TERMİNOLOJİSİ
SİNDİRİM SİSTEMİ TERMİNOLOJİSİ
 
SİNİR SİSTEMİ VE PSİKİYATRİ TERİMLERİ
SİNİR SİSTEMİ VE PSİKİYATRİ TERİMLERİSİNİR SİSTEMİ VE PSİKİYATRİ TERİMLERİ
SİNİR SİSTEMİ VE PSİKİYATRİ TERİMLERİ
 
ÜrinerSistem Terminolojisi
ÜrinerSistem TerminolojisiÜrinerSistem Terminolojisi
ÜrinerSistem Terminolojisi
 
TIBBİ TERMİNOLOJİ
TIBBİ TERMİNOLOJİTIBBİ TERMİNOLOJİ
TIBBİ TERMİNOLOJİ
 
Anksiyete(Kaygı) Bozuklukları
Anksiyete(Kaygı) BozukluklarıAnksiyete(Kaygı) Bozuklukları
Anksiyete(Kaygı) Bozuklukları
 
Akılcı İlaç Kullanımı Ne Demektir?
Akılcı İlaç Kullanımı Ne Demektir?Akılcı İlaç Kullanımı Ne Demektir?
Akılcı İlaç Kullanımı Ne Demektir?
 
Yaşlı Hastada İlaç Kullanımı
Yaşlı Hastada İlaç KullanımıYaşlı Hastada İlaç Kullanımı
Yaşlı Hastada İlaç Kullanımı
 
GEBELİKTE AKILCI İLAÇ KULLANIMI
GEBELİKTE AKILCI İLAÇ KULLANIMIGEBELİKTE AKILCI İLAÇ KULLANIMI
GEBELİKTE AKILCI İLAÇ KULLANIMI
 
Akılcı İlaç Kullanımı (AİK) nedir?
Akılcı İlaç Kullanımı (AİK) nedir?Akılcı İlaç Kullanımı (AİK) nedir?
Akılcı İlaç Kullanımı (AİK) nedir?
 
AKILCI ANTİBİYOTİK KULLANIMI 2
AKILCI ANTİBİYOTİK KULLANIMI 2AKILCI ANTİBİYOTİK KULLANIMI 2
AKILCI ANTİBİYOTİK KULLANIMI 2
 
AKILCI ANTİBİYOTİK KULLANIMI
AKILCI ANTİBİYOTİK KULLANIMIAKILCI ANTİBİYOTİK KULLANIMI
AKILCI ANTİBİYOTİK KULLANIMI
 
COVID-19 Salgın Yönetimi ve Çalışma Rehberi
COVID-19 Salgın Yönetimi ve Çalışma RehberiCOVID-19 Salgın Yönetimi ve Çalışma Rehberi
COVID-19 Salgın Yönetimi ve Çalışma Rehberi
 
Kendi vpn sunucunuzu kurmak
Kendi vpn sunucunuzu kurmakKendi vpn sunucunuzu kurmak
Kendi vpn sunucunuzu kurmak
 
Bilgisayar İlk Yardım
Bilgisayar İlk YardımBilgisayar İlk Yardım
Bilgisayar İlk Yardım
 
Düzce ve Çevresinde Gıda Olarak Tüketilen Yabani Bitkilerin Tüketim Biçimleri...
Düzce ve Çevresinde Gıda Olarak Tüketilen Yabani Bitkilerin Tüketim Biçimleri...Düzce ve Çevresinde Gıda Olarak Tüketilen Yabani Bitkilerin Tüketim Biçimleri...
Düzce ve Çevresinde Gıda Olarak Tüketilen Yabani Bitkilerin Tüketim Biçimleri...
 
Düzce Bitki Biyolojik Çeşitliliği, Endemik, Nadir Bitki Taksonları ve Koruma ...
Düzce Bitki Biyolojik Çeşitliliği, Endemik, Nadir Bitki Taksonları ve Koruma ...Düzce Bitki Biyolojik Çeşitliliği, Endemik, Nadir Bitki Taksonları ve Koruma ...
Düzce Bitki Biyolojik Çeşitliliği, Endemik, Nadir Bitki Taksonları ve Koruma ...
 
Mazeretleri yıkarak başarılı olmak
Mazeretleri yıkarak başarılı olmakMazeretleri yıkarak başarılı olmak
Mazeretleri yıkarak başarılı olmak
 

Internet programcılığı 5

  • 1. T.C. MİLLÎ EĞİTİM BAKANLIĞI BİLİŞİM TEKNOLOJİLERİ INTERNET PROGRAMCILIĞI - 5 482BK0098 Ankara, 2011
  • 2. Bu modül, mesleki ve teknik eğitim okul/kurumlarında uygulanan Çerçeve Öğretim Programlarında yer alan yeterlikleri kazandırmaya yönelik olarak öğrencilere rehberlik etmek amacıyla hazırlanmış bireysel öğrenme materyalidir.  Millî Eğitim Bakanlığınca ücretsiz olarak verilmiştir.  PARA İLE SATILMAZ.
  • 3. İÇİNDEKİLER AÇIKLAMALAR ....................................................................................................................ii GİRİŞ ....................................................................................................................................... 1 ÖĞRENME FAALİYETİ-1 ..................................................................................................... 3 1. MYSQL VERİ TABANI YÖNETİMİ................................................................................. 3 1.1. Veri Tabanı Oluşturma (Create Database).................................................................... 3 1.1.1. MySQL Veri Tabanı Sunucusu ............................................................................. 5 1.1.2. MySQL Kurulumu................................................................................................. 5 1.1.3. MySQL Yazım Kuralları ....................................................................................... 5 1.1.4. MySQL Yeni Kullanıcı Oluşturma........................................................................ 6 1.2. Tablo Oluşturma (Create Table) ................................................................................... 8 1.3. Index Yapıları (Create Index) ..................................................................................... 12 1.4. Insert Kullanımı .......................................................................................................... 14 1.5. Select Kullanımı.......................................................................................................... 15 1.6. Delete Kullanımı ......................................................................................................... 22 1.7. Update Kullanımı........................................................................................................ 22 1.8. Alter Kullanımı ........................................................................................................... 23 1.9. MySQL Fonksiyonları ................................................................................................ 26 1.9.1. Standart Fonksiyonlar.......................................................................................... 26 1.9.2. Tarih ve Zaman Fonksiyonları............................................................................. 27 1.9.3. Karşılaştırma Fonksiyon ve Operatörleri............................................................. 39 1.9.4. Mantıksal Operatörler.......................................................................................... 40 1.9.5. Kontrol Mekanizmaları ve Karakter Fonksiyonları............................................. 42 1.9.6. Aritmetik Operatörler .......................................................................................... 46 1.9.7. Matematiksel Fonksiyonlar ................................................................................. 47 UYGULAMA FAALİYETİ .............................................................................................. 50 ÖLÇME VE DEĞERLENDİRME .................................................................................... 51 ÖĞRENME FAALİYETİ–2 .................................................................................................. 53 2. PHP İLE MySQL VERİ TABANINA ERİŞMEK............................................................. 53 2.1. PHP İle Veri Tabanı Etkileşimleri .............................................................................. 53 2.2. MySQL Sunucusuna Bağlantı..................................................................................... 55 2.3. Veri Tabanı Seçimi ..................................................................................................... 55 2.4. Veri Tabanını Sorgulamak .......................................................................................... 56 2.5. SQL Sunucu Üzerinde İşlemler .................................................................................. 56 2.6. MySQL Bağlantısını Kapatma.................................................................................... 57 UYGULAMA FAALİYETİ .............................................................................................. 61 ÖLÇME VE DEĞERLENDİRME .................................................................................... 62 MODÜL DEĞERLENDİRME .............................................................................................. 63 CEVAP ANAHTARLARI ..................................................................................................... 64 ÖNERİLEN KAYNAKLAR.................................................................................................. 65 KAYNAKÇA ......................................................................................................................... 66 i
  • 4. AÇIKLAMALAR AÇIKLAMALAR KOD 482BK0098 ALAN Bilişim Teknolojileri DAL/MESLEK Web Programcılığı MODÜLÜN ADI Internet Programcılığı - 5 Gerekli ortam sağlandığında programlama komutları MODÜLÜN TANIMI yardımıyla veri tabanı işlemleri yapma ile ilgili konuların anlatıldığı öğrenme materyalidir. SÜRE 40/32 ÖN KOŞUL Internet Programcılığı - 4 modülünü başarmış olmak YETERLİK Programlama içinde form ve nesneler kullanmak Genel Amaç Gerekli ortam sağlandığında hazırlanan program ile veri tabanı işlemleri yapabileceksiniz. MODÜLÜN AMACI Amaçlar  Veri tabanı programlama dilinin (MySQL) kullanımını öğrenerek uygulamalar yapabileceksiniz.  Veri tabanı programlama diliyle etkileşimli web (php ile) uygulamaları gerçekleştirebileceksiniz. Ortam Bilişim teknolojileri laboratuvarı, işletme ortamı, bilgisayar EĞİTİM ÖĞRETİM laboratuvarı ORTAMLARI VE Donanım DONANIMLARI Projeksiyon, bilgisayar… web programlama yazılımlarını çalıştırabilecek yeterlikte bilgisayar, , internet bağlantısı  Her faaliyet sonrasında o faaliyetle ilgili değerlendirme soruları ile kendi kendinizi değerlendireceksiniz. ÖLÇME VE  Öğretmen, modül sonunda size ölçme aracı (uygulama, DEĞERLENDİRME soru-cevap) uygulayarak modül uygulamaları ile kazandığınız bilgi ve becerileri ölçerek değerlendirecektir. ii
  • 5. GİRİŞ GİRİŞ Sevgili Öğrenci, Programlama ile birlikte insanlar tüm verilerini bilgisayar ortamında tutmak istemişlerdir. Bunun için hemen hemen tüm programlama dillerinde dosyalama işlemi yapılabilmektedir. Bu ortamlardaki kısıtlamalar, her şey istenildiği gibi yapılamadığından sadece veri kontrollerinde iyi olan programlama dilleri geliştirilmiştir. Veri tabanı programları; bir kurumun çalışanlarının kimlik, adres, kurum vb. bilgilerinin tutulup işlendiği ve bunlarla ilgili değişikliklerin yapıldığı programlama dilleridir. MySQL Linux ve PHP ile çok iyi anlaşabilen bir veri tabanı programlama dilidir. Günümüzde zaten web tasarımcısı olan birisi, tasarımını bir veri tabanıyla mutlaka birleştirmelidir. Çünkü artık insanlar işlerini web ortamına taşımışlardır. İnternet üzerinden alışveriş yapmak, okullara kayıt yaptırmak veya bilgilerini görmek, uçak veya otobüs bileti almak gibi işlemlerde sizin bilgileriniz hep bu veri tabanlarında tutulmaktadır. Internet ortamında veri tabanı işlemi için de bazı web programlama dilleri, kendilerine uygun olan, anlaşabileceği veri tabanı programlama dilini seçer. PHP birçok veri tabanı dilini destekler. MySQL de birçok web programlama dilinde çalışır. Ama sanki PHP MySQL, MySQL de PHP için geliştirilmiştir gibidir. İkisi de açık kod, ucuz veya bedava olan dillerdir. 1
  • 6. 2
  • 7. ÖĞRENME FAALİYETİ–1 ÖĞRENME FAALİYETİ-1 AMAÇ Veri tabanı programlama dilinin (MySQL) kullanımını öğrenerek uygulamalar yapabileceksiniz. ARAŞTIRMA  Dünya çapında kullanılan veri tabanı programlarını araştırınız.  MySQL ve diğer veri tabanlarını avantaj ve dezavantaj olarak karşılaştırınız.  Herhangi bir alışveriş web sitesinin nasıl veri kaydı yaptığını araştırınız. Araştırma işlemleri için üyelik gerektiren web sitelerinin üyelik bilgilerinin nasıl tutulduğunu, alışveriş sitelerinin nasıl hazırlandığını düşünerek böyle birkaç web sitesini inceleyiniz. 1. MYSQL VERİ TABANI YÖNETİMİ 1.1. Veri Tabanı Oluşturma (Create Database) Veri tabanı (database), verilerin bilgisayar ortamında saklanması olarak tanımlanabilir. Aynı tür bilgileri içeren veriler birkaç gruba ayrılır ve bu grupların her birine tablo (table) denir. Veri tabanı tablo veya tablolardan oluşur. Tablolar da her bir bilginin saklandığı alanlardan (fields) oluşur. VERİ TABANI TABLO - 1 TABLO - 2 TABLO - 3 ALAN - 1 ALAN - 1 ALAN - 1 ALAN - 2 ALAN - 2 ALAN - 2 ALAN - n ALAN - n ALAN - n Şekil 1.1 3
  • 8. Bir veri tabanı adından da anlaşılacağı gibi bilgilerin depolandığı hiyerarşik bir yapıdır. Biz web üzerinde kullanıcı adı, şifresi, e-posta adresi gibi bilgileri bu veri tabanlarında saklarız. Aynı bilgileri bir dosyaya yazıp gerektiğinde dosyayı açıp bilgileri okutmak da bir çözüm gibi görünse de bu işlem hem daha karmaşık ve zahmetli hem de daha yavaştır. Aslında az çok İngilizce bilen birisi için MySQL kullanmak pek zor olmayacaktır. Veri tabanlarında tutulacak bilgilerin doğru olarak girilmesi, tekrarlı kayıtların olmaması, verilerin güvenliği gibi özellikler ancak bir veri tabanı yöntemiyle sağlanmaktadır. Bunları sağlayan birçok veri tabanı sunucusu vardır. Progress, Oracle, Sybase, ProsgreSQL, MySQL, Access bunlardandır. Resim 1.1: Dosyalama MySQL’de veri tabanı oluşturmak oldukça kolaydır. Bunun için CREATE DATABASE komutu kullanılır. Kullanımı: CREATE DATABASE veri tabanı_adı; veri tabanı_adı yerine oluşturmak istediğiniz veri tabanının adını yazmanız gerekir. Örnek: Aşağıdaki komutlarla ogrenci adlı bir veri tabanı oluşturulmuştur. mysql>create database ogrenci; Query OK,1row affected (0.03 sec) Bu veri tabanınızın kolaylıkla oluşturulduğunu ve her şeyin yolunda olduğunu gösterir. 4
  • 9. Veri Tabanı Silme (Drop) Artık ihtiyacınız olmadığına inandığınız bir veri tabanını DROP DATABASE komutuyla silebilirsiniz. Bu komutu uygulamadan önce çok iyi düşünmeli ve bu veri tabanına ihtiyacınızın olmadığından emin olmalısınız. Çünkü bu sorgu ile tüm tabloları, tüm indexleri ve veri tabanının kendisini silmiş olacaksınız. Yani kayıtlar geri gelmeyecektir. Kullanımı; DROP DATABASE veri tabanı_adı; veri tabanı_adı yerine silmek istediğiniz veri tabanının adını yazmanız gerekir. Örnek: Aşağıdaki komutlarla ogrenci adlı bir veri tabanı silinmiştir. mysql>drop database ogrenci; Query OK,1 row affected (0.03 sec) Bu veri tabanınızın kolaylıkla silindiğini gösterir. 1.1.1. MySQL Veri Tabanı Sunucusu MySQL veri tabanı ve sunucusunun en büyük özelliği ücretsiz oluşudur. Eğer ticari amaçla kullanılacaksa az miktar ücret ödenmesi gerekebilir. MySQL sunucusunun en büyük özelliklerinden birisi de PHP (web programlama dili) ile oldukça iyi çalışmasıdır. Sanki iki ürün de birbiri için oluşturulmuş gibidir. MySQL sunucusu, işletim sisteminden bağımsız olarak çalışmaktadır. 1.1.2. MySQL Kurulumu İnternet Programcılığı 1 modülünde de anlatıldığı gibi MySQL veri tabanı sunucusu http://www.mysql.com adresinden indirilebilir. İndirilen sıkıştırılmış dosyayı herhangi bir boş klasöre açılmalıdır. Açılan dosyalardan setup.exe programı çalıştırılır. MySQL windows’ta standart olarak C:mysql klasörüne kurulacaktır. 1.1.3. MySQL Yazım Kuralları MySQL komut satırında dikkat edilmesi gereken kurallar şunlardır:  Komut satırında yazılan ifadelerin bittiğini belirtmek için noktalı virgül ( ; ) kullanılır. mysql>show databases;  Bazı durumlarda noktalı virgül ( ; ) kullanılmaz. mysql>quit 5
  • 10. Komutlar büyük veya küçük harfle yazılabilir. mysql>select current_time(); mysql>SELECT CURRENT_TIME();  Komutlar birden fazla satırda yazılabilir (sonuna noktalı virgül konulan komutlar, kelimeler bölünmemek kaydıyla). Doğru yazım: mysql> select > current_time(); +--------------+ |currnet time()| +--------------+ |20:23:56 | +--------------+ 1 row in set (0.00 sec) mysql> Hatalı yazım: mysql>select current_ >time(); ERROR 1064: You have an error in your SQL syntax near ‘()’ at line 2 mysql>  Komutlarda Türkçe karakterler (ğ,Ğ,ı,İ,ş,Ş,ü,Ü,ö,Ö,ç,Ç) kullanılmaz. 1.1.4. MySQL Yeni Kullanıcı Oluşturma MySQL veri tabanı sistemi birçok farklı veri tabanı destekleyebilir. Genellikle uygulama başına bir veri tabanı olacaktır. MySQL’de en kolay kısımlarından biri veri tabanı oluşturmaktır. Bunun içinse MySQL sunucusunda tam yetkili bir kullanıcı olmanız gerekir. Kurlumu siz yaptıysanız zaten yetkili sizsinizdir. Kurulum aşamasındaki şifrenizi unutmayınız. Şimdi yeni bir yetkili kullanıcı eklemek için aşağıdaki komutlar kullanılır: mysql>GRANT ALL PRIVILEGES ON *.* TO miho@localhost INDENTFIED BY ‘mihoparola’ WITH GRANT OPTION; MySQL sunucusuna okuma, ekleme, düzeltme ve silme hakkı olan bir kullanıcıyı eklemek için aşağıdaki komutlar kullanılır: mysql>insert into user >host, >user, >password, >Select_priv, >Insert_priv, >Update_priv, 6
  • 11. >Delete_priv, >Create_priv, >Drop_priv, >Reload_priv, >Shutdown_priv, >Process_priv, >File_priv, >Grant_priv, >References_priv, >Index_priv, >Alter_priv) VALUES (‘#’,’ahmet’,PASSWORD(‘3348’),’Y’, ’Y’, ’Y’, ’Y’,’N’, ’N’, ’N’, ’N’, ’N’, ’N’, ’N’, ’N’, ’N’, ’N’); Kullanıcı adı “ahmet”, şifresi “3348” olan tüm yetkilere sahip bir kullanıcı oluşturulur. Yeni kullanıcıların tanımlarının geçerli olabilmesi için MySQL sunucusunda çıkılmalı ve aşağıdaki komut satırı uygulanmalıdır. MySQL sunucusunda database oluşturma hakkı olan bir kullanıcı Create database komutuyla yeni bir database oluşturabilir. Kullanımı: mysql>create database <veri tabanı adı>; Örnek: mysql> create database mezunlar; Query OK, 1 row affected (0.00 sec) Veri tabanını seçme (use): Artık mezunlar diye bir veri tabanı oluşturulmuştur. Fakta bu veri tabanını kullanabilmek için seçmemiz gerekmektedir. Veri tabanını seçmek için use komutu kullanılır. Kullanımı: mysql>use <database adı>; Örnek: mysql>use mezunlar; database changed Mezunlar veri tabanı seçilmiş oldu. 7
  • 12. 1.2. Tablo Oluşturma (Create Table) Veri tabanı oluşturmada bir sonraki adım, tablo oluşturmaktır. Bunu, create table MySQL komutunu kullanarak yapabiliriz. Tablo oluşturma işlemi yapılmadan önce mutlaka veri tabanı seçilmelidir (use komutuyla). Bir create table ifadesinin genel formu şöyledir. Resim 1.2 Kullanımı: Create Table <tablo adı> alan_adı veri_türü [Default ifade][alan_kısıtlaması], … … [tablo kısıtlaması]); Tablo Adı : Tabloya verilecek isim (örnek: mezunkayit) Alan Adı : Tabloda yer alacak bilgi alanlarının adı (örnek: ogr_no, adi, soyadi) Alan Veri Türü : O alana girilecek bilginin türü (sayı, metin, tarih) Default İfade : O alan belirtilmezse başlangıçta atanacak değer Alan Kısıtlaması : O alanla ilgili kısıtlama (boş olmaması, o alana sadece E veya K girilmesi gibi kısıtlamalar) Tablo : Her kaydın belirli alanlara göre kısıtlanması (kayıtların tek Kısıtlaması olmasını sağlamak, başka bir tabloyla ilişkilendirmek) MySQL’de üç temel veri tipi vardır. Bunlar; sayısal (numeric), tarih ve saat (date and time) ve karakter katarıdır (string). Bu kategorilerin her birinin içinde de pek çok tip bulunur. Her bir tipin hafızada çeşitli depolama boyutları vardır. Veri türleri ve özellikleri aşağıdaki tabloda görülmektedir. 8
  • 13. Resim 1.3: Örnek veri tabanı algoritması Alan Veri Türleri Sayısal (Numeric) Veri Türleri Veri Türü Aralık Kapladığı Yer TINYINT -128 ile 127 arasında 1 byte [(m)][UNSIGNED] [ZEROFILL] SMALLINT -32768 ile 32767 arasında 2 byte [(m)][UNSIGNED] [ZEROFILL] MEDIUM -8388608 ile 8388607 arasında 3 byte (m)][UNSIGNED][ZERO FILL] INT[(m)][UNSIGNED][Z -2147483648 ile 2147483647 arasında 4 byte EROFILL] BIGINT -9223372036854775808 ile 8 byte [(m)][UNSIGNED][ZERO 9223372036854775807 arasında FILL] FLOAT Virgülden sonra 4 ya da 8 haneli 4 byte FLOAT (m,n) İşaretli küçük reel sayı 4 byte DOUBLE PRECISION İşaretli normal reel sayı 8 byte [(m,n)] REAL [(m,n)] Double ile aynıdır. 8 byte DECIMAL [(m,n)] Double ile aynıdır. (m+n) byte NUMERIC [(m,n)] Decimal ile aynıdır. (m+n) byte 9
  • 14. Tarih ve Saat (Date and Time) Veri Türleri Veri Türü Aralık Kapladığı Yer TIMESTAMP [(m)] O andaki sistem zamanını tutar (tarih ve 4 byte saat) DATE YYYY-MM-DD,YY-MM- 4 byte DD,YYMMDD formatında 0000-0-00 ile 9999-12-31 arasında TIME HH:MM:SS,HHMMSS,HHMM,HH 3 byte DATETIME YYYY-MM-DD HH:MM:SS 8 byte Alfasayısal (Karakter-String) Veri Türleri Veri Türü Aralık Kapladığı Yer CHAR (m)[BNIARY] M:1 ile 255 arası BINARY kullanılırsa m byte aramalarda büyük/küçük harf ayrımı vardır. VARCHAR (m) [BINRY] Char ile aynıdır, fakat (Girilen kapladığı alan açısından farklıdır. uznlk+1) byte TINYTEXT(m),[BINARY Char ile aynıdır, fakat kapladığı yer (Girilen ] açısından farklıdır. uznlk+1) byte TINYTEXT ve Varchar ile aynıdır. Küçük/büyük harf (Girilen TINYBLOB ayrımı vardır. Uzunluk belirtilmez. uznlk+1) byte TEXT ve BLOB Küçük/büyük harf ayrımı vardır. Uzunluk (Girilen belirtilmez. Max. 65535 karakter uzunluk+2) byte MEDIUMTEXT ve Küçük/büyük harf ayrımı vardır. Uzunluk (Girilen uznlk MEDIUMBLOB belirtilmez. Max. 16777216 karakter. + 3) byte LONGTEXT ve Küçük/büyük harf ayrımı vardır. Uzunluk (Girilen LONGBLOB belirtilmez. Max. 4294967295 karakter uznlk+4) byte ENUM(‘değer1’,’değer2’, Verilen değerlerden bir tanesi mutlaka En fazla 2 byte ….,’değern’) seçilidir (Alan kısıtlamasında kullanılır). SET (‘değer1’, Verilen değerlerden birden çok seçilebilir. 1-8 byte ’değer2’,…., ’değern’) arasında Tablo 1.1: Alan veri türü Örnek: Mezun olan öğrenciler için mezun bilgilerinin tutulacağı bir tablo oluşturalım. Bu tablo için aşağıdaki alan adları bulunacaktır. Tablo adını kayit olarak kabul edelim. Alan adı- açıklama adi : Öğrenci adı soyadi : Öğrenci soyadı ogrno : Öğrenci Nu. Kayit tablosunun oluşturulması: mysql> create table kayit ->( ad varchar(15) not null, 10
  • 15. ->soyad varchar(15)not null, ->ogrno smallint(5) unsigned, ->constraint ogrno_pk primary key (ogrno) ->); Query OK, 0 rows affected (0.08 sec) Örnek: Bir alışveriş sitesinde müşteri bilgilerini tutacak bir tablo için aşağıdaki alanlar bulunacaktır. Tablo adı musteri olsun. Alan adı - açıklama Musteri_id : Müşteri numarası adsoyad : Müşteri adı ve soyadı adres : Müşteri adresi sehir : Şehir tlfon : Telefon Musteri tablosunu oluşturulması: mysql> create table musteri ->(musteri_id int unsigned not null auto_increment primary key, ->adsoyad varchar(50) not null, ->adres varchar(100) not null, ->sehir varchar(15) not null, ->tlfon varchar(11) not null ->); Query OK, 0 rows affected (0.08 sec) Örnek: Bir satış sitesine konulacak ürünlerin tutulacağı urun adlı tabloyu aşağıdaki gibi oluşturalım. Alan adı Açıklama Urun_kodu : Satılacak ürün kodu Urun_markasi : Satılacak ürünün markası Urun_turu : Satılacak ürün türü Urun_fiyati : Satılacak ürünün fiyatı Urun tablosunun oluşturulması: mysql> create table urun ->( urun_kodu integer(5) zerofill not null, ->urun_markasi varchar(20)not null default ‘BELİRSİZ’, ->urun_turu varchar(20)not null default ‘BELİRSİZ’, ->urun_fiyati bigint(10) unsigned, ->constraint urun_kodu_pk primary key (urun_kodu), ->); Query OK, 0 rows affected (0.07 sec) 11
  • 16. Tabloları Silmek (Drop Table) Bazen bir tablonun tamamından kurtulmak isteyebilirsiniz. Bunun için DROP TABLE ifadesiyle yapabilirsiniz. Genel kullanımı aşağıdaki gibidir. Kullanımı: DROP TABLE tablo_adi Örnek: musteri tablosunu silmek için aşağıdaki ifade kullanılır. mysql> drop table musteri; Bu sorgu, tablodaki tüm satırları ve tablonun kendisini sileceğinden kullanırken dikkatli olunmalıdır. 1.3. Index Yapıları (Create Index) Bir index, veri tabanı ortamında tablo gibi bir nesnedir ve ilişkili olarak kullanıldığı tablonun indexleme alanı (priamry key) olarak kullanılan kolondaki verilere göre sıralanmış biçimde işleme sokulmasını sağlar. Bir tablo indexlenmiş ise bu tablo içinde gerçekleştirilecek bir arama ya da koşullu listeleme işlemi çok daha hızlı biçimde gerçekleştirilebilecektir. CREATE INDEX belirtilen bir tablo üzerinden bir indeks oluşturur. İndekslerin birincil kullanım amacı, veri tabanı başarımını artırmaktır (ancak, uygunsuz kullanımı başarının düşmesiyle sonuçlanır). İndeks için anahtar alanları sütun isimleri olarak ya da parantez içinde yazılmış ifadeler olarak belirtilir. İndeksleme yöntemi, çok sütunlu indeksleri destekliyorsa çok sayıda alan belirtilebilir. Bir indeks alanı, tablonun satırındaki bir veya daha fazla sütun değerinden hesaplanan bir ifade olabilir. Bu özellik, bazı temel veri dönüşümlerini temel alan veriye daha hızlı erişim sağlamak için kullanılabilir. Auto_increment, tam sayı sütunlarında kullanabileceğiniz özel bir MySQL özelliğidir. Tabloya satırlar eklerken ilgili alanı boş bıraktığımızda MySQL otomatik olarak benzersiz bir tanımlayıcı değer oluşturacaktır. Bu değer, sütundaki mevcut maksimum değerlerin bir fazla olacaktır. Her tabloda yalnızca bir tane bulunabilir. Auto_increment içeren sütunlar indexlenmelidir. Bir sütun adının ardından gelen primary key, bu sütunun tablo için birincil anahtar olduğunu belirtir. Bu sütuna yapılan girişlerin benzersiz olması gerekir (T.C. kimlik Nu., okuldaki öğrenci Nu.gibi). MySQL bu sütunu otomatik olarak indexler. Yukarıdaki müşteri tablosundaki musteri_id ile birlikte kullanıldığında Auto_increment ile birlikte görülür. Birincil anahtar üzerindeki otomatik index, auto_increment için gereken indexle ilgilenir. Bir sütun adının ardından birincil anahtar (primary key) belirleme işlemi sadece tek sütunluk birincil anahtarlar için yapılabilir. Birincil anahtarların belirtilmesi, bu sütunlarda indexlerin oluşturulmasını sağlar. 12
  • 17. Birincil anahtarlar ya da indexler olmadan da tablo oluşturmak mümkündür. Yeni başayan MySQL kullanıcılarının karşılaştıkları sorunlardan biri çok hızlı olduğunu duymuş oldukları bu veri tabanından yeterli performans elde edememektir. Bu performans sorunuyla karşılaşmalarının nedeni, veri tabanlarında hiçbir index oluşturmamış olmalarıdır. MySQL tarafından otomatik olarak oluşturulan indexler başlangıç için işimizi görecektir. Eğer anahtar olmayan bir sütunda çok fazla sorgu çalıştırdığınızı fark ederseniz performansı artırmak için bu sütuna bir index eklemek isteyebilirsiniz. Bunu CREATE INDEX ifadesini kullanarak yapabilirsiniz. Bu ifadenin genel formu aşağıdadır. Kullanımı: CREATE [ UNIQUE ] INDEX isim ON tablo [ USING yöntem ] ( { sütun | ( ifade ) } [ işleç_sınıfı ] [, ...] ) [ TABLESPACE tablo_alanı ] [ WHERE dayanak ] Parametreler UNIQUE İndeks oluşturulurken ve her veri eklenişinde tabloda birbirinin aynı değerler bulunmaması için sistemin sınama yapmasını sağlar. Girdilerin yinelenmesine sebep olacak bir veri girme veya güncelleme işleminin yapılmaya çalışılması bir hata üretecektir. İsim : Oluşturulacak indeksin ismi (Burada şema nitelemeli isimler kullanılamaz. İndeks daima tabloyu içeren şemada oluşturulur.) Tablo : İndekslenecek tablonun ismi (Şema nitelemeli olabilir.) Yöntem : İndeks için kullanılacak yöntemin ismi. Değer olarak, btree, hash, rtree ve gist verilebilir. btree öntanımlı yöntemdir. Sütun : Tablo sütunun ismidir. İfade : Tablonun bir ya da daha fazla sütünu ile ilintili bir ifade. İfade, yukarıdaki söz diziminde gösterildiği gibi parantez içinde yazılmalıdır. Ancak, ifade bir işlev çağrısı biçimindeyse parantez içine alınmayabilir. işleç_sınıfı: Bir işleç sınıfının ismidir. Ayrıntılar için aşağıya bakınız. tablo_alanı: İndeksin oluşturulacağı tablo alandır. Belirtilmezse default_tablespace yapılandırma değişkeninin değeri, bu değişkene bir değer atanmamışsa veri tabanının öntanımlı tablo alanı kullanılır. Dayanak : Bir kısmi indeks için kısıt ifadesi 13
  • 18. Örnekler: films tablosunun title sütunu üzerinde bir B-tree indeksi oluşturmak için: mysql> CREATE UNIQUE INDEX title_idx ON films (title); films tablosunun code sütunu üzerinde bir indeks oluşturup bu indeksin indexspace tablo alanında kalması için: mysql>CREATE INDEX code_idx ON films(code) TABLESPACE indexspace; mysql>CREATE INDEX namex ON "Depo.Dbf" (malz_adi) İşletmede çalışan personeli brüt maaşlarına göre azalan sırada (yüksek maaştan düşük maaşa doğru) listelemek istenirse brüt alanına göre aşağıdaki gibi index oluşturmak gerekir: mysql>CREATE INDEX per_maas ON personel (brut DESC); Bir okuldaki öğrencileri öncelikle adlarına göre, aynı adda olanları soyadlarına göre, hem adı hem soyadı aynı olanların ortalamalarına göre sırlanmış olarak listelenmesi istenirse aşağıdaki komutlar kullanılmalıdır: mysql>CREATE INDEX ogr_ad_soyad_ort ON ogrenci (ad,soyad,ort); Mevcut Index’in Silinmesi (Index Drop) Bir tablo üzerinde tanımlanmış herhangi bir index, o tablonun veri tabanından silinmesi ile otomatik olarak silinecektir. Tablo silinmeksizin o tablo üzerinde oluşturulan indek içinse DROP INDEX komutu kullanılır. mysql>INDEX DROP ogr_ad_soyad_ort; Böylece ogrenci tablosu üzerinde oluşturulmuş ogr_ad_soyad_ort adlı indeks, ogrenci tablosu veri tabanında kaldığı hâlde silinecektir. 1.4. Insert Kullanımı Bir veri tabanı ile işlem yapabilmek için önce ona veri girmemiz gerekir. Bunu yapmanın en yaygın yolu da MySQL’in INSERT komutudur. Bir tablodaki her satır normalde gerçek bir nesne veya ilişkiyi tarif eder ve o satırın sütun değerleri bu gerçek nesne hakkındaki bilgileri depolar, INSERT ifadesini veri tabanına veri satırları eklemek için kullanabiliriz. Kullanımı: INSERT INTO tablo [(kolon, kolon, ...)] VALUES (değer-1, değer-2, ...) ya da INSERT INTO tablo [(kolon, kolon, ...)] SELECT .... 14
  • 19. Görüldüğü gibi tabloya iki türde veri nakledilebiliyor. Örnek:  mysql>insert into musteri( ad, soyad, adres, sehir, posta_kodu, telefon) values('Özgür','Dönmez','Arı Koop.2/2 Batıkent','Ankara','06130','03122560123');  mysql>insert into musteri values (null,’ali er’,’12.cad no:3 Emek’,’Ankara’,’03123335566’);  mysql>INSERT INTO musteri (musteri_no,adsoyad,sehir) values(3,’Davut ÖZTÜRK’,’Mersin’);  mysql>INSERT INTO iller (cod_il) VALUES (33);  mysql>INSERT INTO eski_uyeler VALUES('M','Karabulut','mk@karya.net','1979-03-29' );  INSERT INTO musteri VALUES ("M. Selcuk Batal" , "61" , "Refahiye" , "Erzincan");  INSERT INTO mus_hesap VALUES ("1471" , "100" , {05/02/03}); Tablo yerine, içine veri girmek istediğimiz gerçek tablonun adını koyduğumuza ve değerlerin yerine de gerçek değerler girdiğimize dikkat ediniz. Bu örneklerdeki değerlerin tümü tek tırnak içine alınmıştır. MySQL’deki karakter katarlarının her zaman çift veya tek tırnak içinde olması gerekir. Sayılara ve tarihlere tırnak gerekmez. Insert ile birlikte sadece birkaç varyasyon daha kullanılabilir. Insert sözcüğünün sonuna LOW_PRIOROTY ya da DELAYED eklenebilir. LOW_PRIORITY anahtar sözcüğü, sistemin bekleyip verileri daha sonra tablodan okunmadıkları sırada girilebileceği anlamına gelir. DELAYED anahtar sözcüğü, girilen verilerinizin tampon belleğe alınacağı anlamına gelir. Sunucu meşgulse insert işleminin tamamlanmasını beklemek zorunda kalmadan sorgu çalıştırmaya devam edebilirsiniz. 1.5. Select Kullanımı Bir veri tabanından veri elde etmeyi (almayı) tablonun belirli ölçütleriyle eşleşen satırları seçerek yaparız. Bu işi yapan MySQL komutu SELECT komutudur. SELECT ifadesinin kullanımının birçok seçeneği ve farklı yolu vardır. Bunlar aşağıda verilmiştir: SELECT [ALL|DISTINCT] {*|alan_adi_listesi} [INTO{OUTFILE|DUMPFILE}’dosya_adi’export_option] FROM tablo_adi [WHERE koşul] [GROUP BY alan_adi1[,alan_adi2]…] [HAVING search-condition] [ORDER BY siralama_alanalari] şeklinde bir ifadesi vardır. 15
  • 20. Şimdi öncelikle isteğe bağlı cümleciği olmayan belirli bir tablodan seçim yapan sorgulara bakalım. Tipik olarak bu ögeler, tablonun sütunlarıdır (Her türlü MySQL ifadesinin sonucu da olabilir.). Bu sorgu, musteri tablosundaki ad ve sehir sütunları içeriklerini listeler. mysql>select ad, sehir from musteri; Kodları musteri tablosundaki ad ve sehir sütunlarındaki bilgileri aşağıdaki gibi listeleyecektir: +--------------+---------------+ |ad |sehir | +--------------+---------------+ |Ahmet |Mersin | |Ayşe |Hatay | |Ahsen |Şanlıurfa | +--------------+---------------+ Yukarıda da görüldüğü gibi musteri tablosundan seçtiğimiz (ad ve sehir) ögeleri içeren bir tablomuz oldu. Bu veri, musteri tablosundaki tüm satırlar için gösterilmektedir. Bir tablodan select anahtar sözcüğünün ardından listeleyerek istediğiniz sayıda sütun belirtebilirsiniz. Başka bazı ögeleri belirtmek de mümkündür. Bunlardan bir tanesi de joker karakter olan “*” işaretidir. Bu işaret belirtilmiş tablodan ve tablolardaki tüm sütunlarla eşleşir. Örneğin, siparis adlı bir tablodaki tüm sütunları listelemek için aşağıdaki kodları yazılır. mysql>select * from siparis; kodları siparis tablosundaki tüm sütunlarındaki bilgileri aşağıdaki gibi listeleyecektir: +--------------+---------------+----------------+------- + |musteri_no |siparis_tar |urun | fiyat | +-------------+---------------+----------------+-------- + |001 |23.03.2007 |HDD |120YTL | |0034 |12.03.2007 |256MB RAM |85YTL| |003 |28.03.2007 |Power Supply |28YTL| +-------------+---------------+----------------+--------+ Bir tablonun alt kümelerine erişmek için (şartlı sorgulama yapmak için) bazı seçim ölçütleri belirtmemiz gerekir. Bunu WHERE parametresi ile yapabiliriz. Kullanımı: SELECT <alan_adi [alan_adi1,…]> FROM <tablo_adi> WHERE <koşullar> mysql>select from musteri where adi=’ayşe’; 16
  • 21. musteri tablosundan tüm sütunları, ama sadece adi ayşe olan satırları seçecektir. Bunun çıktısı: +-------------+---------------+--------------- +------- + |ad |adres |şehir |telefon | +-------------+---------------+--------------- +------- + |ayşe |orhaniye mh. |MUĞLA |2143526 | |ayşe |emek cd. |ANKARA |5214556 | |ayşe |güneyli köyü |MERSİN |4522356 | +-------------+---------------+--------------+----------+ WHERE belirli satırları seçerken kullanılan ölçütleri belirtir. Bu örnekte adi ayşe olan satırları seçtik. Tek eşittir işareti, eşitliği kontrol etmek için kullanıldı. Bunun PHP’de farklı olduğu ve bunları birlikte kullanırken karıştırılabilecekleri unutulmamalıdır. MySQL eşitliği, ek olarak operatörleri bu düzenli deyimlerin tümünü destekler. WHERE cümlecikleri içinde kullanılan operatör ve deyimler aşağıdaki tabloda verilmiştir. WHERE Cümlecikleri için Kullanışlı Karşılaştırma Operatörleri OPERATÖRLER AD(varsa) ÖRNEK AÇIKLAMA = Eşittir ogrno=125 İki değerin eşit olup olmadığını kontrol eder. > Büyüktür. Fiyat>45 Bir değerin diğerinden büyük olup olmadığını kontrol eder. < Küçüktür. Nt<44 Bir değerin diğerinden küçük olup olmadığını kontrol eder. >= Büyüktür veya Nt>=45 Bir değerin diğerinden büyük eşittir. ya da eşit olup olmadığını kontrol eder. <= Küçüktür veya Nt<=44 Bir değerin diğerinden küçük eşittir. ya da eşit olup olmadığını kontrol eder. != veya <> Eşit değildir. Ad!=’ahmet’ İki değer eşit değil mi diye bakar. IS NOT NULL Adres is not null Alanın içinde değer bulunup bulunmadığını kontrol eder. IS NULL Adres is null Alanın içinde değer yok mu diye bakar. BETWEEN Nt between Bir değerin minimum 50 and 90 değerden büyük veya eşit, maksimum değerden küçük veya eşit olup olmadığını kontrol eder. IN Sehir in Bir değerin belirli bir kümede (“mersin”,”muğla”) olup olmadığını kontrol eder. 17
  • 22. NOT IN Sehir not in Bir değer, bir kümede değil (“ankara”,”istanbul”) mi diye bakar. LIKE Örnek İsim like (“ayşe%”) Basit SQL eşleştirme işlemini eşleştirme kullanarak bir değerin bir örnekle eşleşip eşlenemediğini kontrol eder. NOT LIKE Örnek İsim not Bir değer bir örnekle eşleştirme like(“oya%”) eşleşmiyor mu diye bakar. Tablo 1.2: WHERE cümlecikleri için kullanışlı karşılaştırma operatörleri Tablodaki son iki satır like ile ilgilidir. Bunlar örnek eşleştirme formlarıdır. Like basit sql örnek (pattern) eşleştirilmesi kullanılır. Örnekler normal metin artı herhangi bir sayıdaki karakter ile eşleşebilecek joker karakteri gösteren bir % karakterinden ve bir tek karakteri ile eşleşen _ (alt çizği) karakterinden oluşabilir. Birden fazla ölçütü kontrol etmek için basit operatörleri ve örnek eşleştirme söz dizimini kullanabilir ve bunları and ve or ile daha karmaşık bir ölçütler hâlinde birleştirebilirsiniz. Örneğin: mysql> Select * form musteri where adi=’ayşe’ or adi=’fatma’; Bu örnekte musteri tablosunda adi ayşe veya Fatma olanları listeleyecektir. Örnek: Adı, Halil veya Nural veya Ahmet olan öğretmenlerin adının ve adreslerinin görüntülenmesi için aşağıdaki ifade yazılır: mysql>select adi, adres from ogretmen where in (‘Halil’,’Nural’,’Ahmet’); Örnek: Soyadı “ÇATAK” ve cinsiyeti “E” olan öğrencilerin ad ve numaralarının görüntülenmesi için aşağıdaki ifade kullanılır: mysql>select ad, ogrno from ogrenci where soyad=’ÇATAK’ and cinseyti=’E’; Örnek: Sınavdan 45’ten küçük olan öğrencilerin ad ve numarasının görüntülenmesi için aşağıdaki ifade kullanılır: mysql>select adi, ogrno from ogrenci where not1<45; Örnek: Sınav notundan 70 ile 100 arası not alan öğrencilerin ad ve numarasının görüntülenmesi için aşağıdaki ifade kullanılır: mysql>select adi, ogrno from ogrenci where not2 between 70 and 100; 18
  • 23. Örnek: Doğum tarihi 30/03/1995 olan öğrencilerin ad ve numarasının görüntülenmesi için aşağıdaki ifade kullanılır: mysql>select adi, ogrno from ogrenci where dogum_tarihi=’1995/03/30’; Örnek: Soyadı ‘ER’ ile başlayan öğrencilerin ad ve numarasının görüntülenmesi için aşağıdaki ifade kullanılır: mysql>select adi, ogrno from ogrenci where soyadi like ‘ER%’; Örnek: Soyadı ‘AN’ ile biten öğrencilerin ad ve numarasının görüntülenmesi için aşağıdaki ifade kullanılır: mysql>select adi, ogrno from ogrenci where soyadi like ‘%AN’; Örnek: Adının içinde ‘M’ geçen öğrencilerin ad ve numarasının görüntülenmesi için aşağıdaki ifade kullanılır: mysql>select adi, ogrno from ogrenci where adi like ‘%M%’; Örnek: Adının içinde ‘M’ geçmeyen öğrencilerin ad ve numarasının görüntülenmesi için aşağıdaki ifade kullanılır: mysql>select adi, ogrno from ogrenci where adi not like ‘%M%’; Örnek: Adının NULL (boş) olmayan öğrencilerin ad ve numarasının görüntülenmesi için aşağıdaki ifade kullanılır: mysql>select adi, ogrno from ogrenci where adi is not null; Bir tablo sorgulandığı zaman sonuçlar birincil anahtara (primary key) göre sıralı gelmektedir. Sonuçların sıralamasını değiştirmek mümkündür. ORDER BY bütün MySQL ifadelerinde kullanılır. Kullanımı: Select <alan adi> from <tablo adi> [where <koşullar>] [order by alan1[, alan2, …]{asc|desc}]; Örnek: Öğrenci tablosundaki kayıtları öğrencilerin adına göre sıralayarak adının, soyadının ve numarasının görüntülenmesini sağlayan aşağıdaki gibi yazılır (Bu sıralamada öğrenci bilgileri, adına göre a’dan z’ye doğru sıralanır.). mysql>select adi,soyadi, ogrno from ogrenci where order by adi; 19
  • 24. Örnek: Öğrenci tablosundaki kayıtları öğrencilerin adına göre tersten (büyükten küçüğe) sıralayarak adının, soyadının ve numarasının görüntülenmesini sağlayan aşağıdaki gibi yazılır (Bu sıralamada öğrenci bilgileri, adına göre z’den a’ya doğru sıralanır.). mysql>select adi, soyadi, ogrno from ogrenci where order by adi desc; İki veya Daha Fazla Tablonun Beraber Sorgulanması (JOIN) Birden fazla tablodan aynı anda bilgi getirilmesi (alınması) gerektiğinde ortak alanlar üzerinden birleştirme yapılır. Birleştirme işlemi koşullar bölümünde yapılır, ortak olan alanlar eşleştirilir. MySQL ifadelerinde alan isimlerinin önüne tablo adı yazılır. Tablo adı ile alan adı arasına “.” (nokta) konulur. Kullanım: SELECT alan1[,alan2,…] FROM tablo1,tablo2[tablo3,…] WHERE tablo1.alan1=tablo2.alan1 [AND tablo2.alan2=tablo2.alan2,…]; Örnek: musteri ve siparis adlı iki tablo bulunmaktadır. Müşterilerin adlarının ve sipariş verdikleri ürünlerin kodlarının, fiyatının ve tutarının görüntülenmesi için aşağıdaki ifade kullanılır: mysql>SELECT musteri.adi,siparis.urunkodu,siparis.fiyat,siparis.tutar FROM musteri,siparis, WHERE musteri.musteri_no=siparismusteri_no; Örnek: ogrenci ve notlar adlı iki tablodan Ahmet adlı öğrencinin iki yazılı bir sözlü notlarının görüntülenmesi için aşağıdaki ifade kullanılır: mysql>SELECT ogrenci.adi, notlar.y1, notlar.y2, notlar.s1 FROM ogrenci,notlar, WHERE ogrenci_no=notlar_no AND ogrenci.adi=’Ahmet’; Tablo Adlarına Takma Ad (Alias) Verme Tablolara başka isimlerle seslenmek çoğunlukla kullanışlı, bazen de gereklidir. Tabloların diğer adlarına lakap (alias) denir. Bunları bir sorgunun dışında oluşturabilir ve sonra da kullanmaya devam edebilirsiniz. Çoğunlukla kısa yazılırlar ve tercihen tablo adlarının ilk harfleri kullanılır. Kullanacağımız tabloları tanımlarken ilgili tablonun lakabını tanımlamak için AS cümleciği ekleyebiliriz. Takma ad (lakap) için FROM’dan sonra tablo adı, bir boşluk ve takma ad azılır. Takma ad verildikten sonra bilgi alanları önüne bu takma ad yazılır. Takma ad ile alan adı arasına yine “.” karakteri konulur. Örnek: Müşterilerin adının, vermiş olduğu siparişlerin tarihlerinin ve tutarının görüntülenmesi için aşağıdaki ifade yazılır: mysql>SELECT m.adi,s.urunkodu,s.fiyat,s.tutar FROM musteri m, siparis s, WHERE m.musteri_no=s.musteri_no; 20
  • 25. Kayıtları Gruplama (GROUP BY) Çoğunlukla belirli bir kümenin içine kaç satırın düştüğünü veya bazı sütunların ortalama değerlerini (örneğin, öğrenci not ortalaması gibi) bilmek istersiniz. MySQL’de bu tip bir sorguyu yanıtlamada kullanılan bir dizi gruplama fonksiyonu bulunmaktadır. Bu gruplama fonksiyonları bir tabloya veya bir tablo içindeki veri gruplarına uygulanabilir. Bu gruplar üzerinde çeşitli işlemler yapılabilir. Listelenecek bilgi alanları mutlaka GROUP BY ifadesinden sonra belirtilmelidir. SUM, COUNT, AVG, MIN, MAX gibi fonksiyonlarla kullanılan alanlar GROUP BY’dan sonra belirtilmez. Kullanımı: SELECT alan1[,alan2,…] FROM tablo1 GROUP BY alan1[,alan2,…]; Örnek: Her müşterinin müşteri numarası ve yapmış olduğu siparişlerin toplam tutarının görüntülenmesi için aşağıdaki ifade yazılır: mysql>SELECT musteri_no, SUM (tutar) FROM siparis GROUP BY musteri_no; Örnek: Bir okuldaki kız ve erkek öğrenci sayısının görüntülenmesi için aşağıdaki ifade yazılır: mysql>SELECT cinsiyeti, COUNT (*) FROM ongrenci GROUP BY cinsiyeti; Örnek: Bir okulun her sınıfında kaçar öğrenci olduğunun görüntülenmesi için aşağıdaki ifade yazılır: mysql>SELECT sinif, COUNT (*) FROM sinif GROUP BY sinif; Gruplar Üzerinde Koşullu Sorgulama (HAVING) Gruplanmış veriler içerisinde belli koşula uyanlar sorgulanacaksa MySQL cümlesinde HAVING ifadesi ile koşullar yazılır. Bu tür SQL cümlelerinde WHERE ile yazılan koşullar varsa öncelikle bunlar göz önüne alınır, sonra gruplama işlemi yapılır. Gruplama sonunda da HAVING ile verilen koşullara uygun kayıtlar listelenir. HAVING ile verilecek koşullar mutlaka GROUP BY yanına yazılan alanlar olmalıdır. Örnek: 5’ ten az siparişte bulunan müşterilerin numarasının görüntülenmesi için aşağıdaki ifade yazılır: mysql>SELECT musteri_no, COUNT(*)FROM siparis GROUP BY musteri_no HAVING count(*)<5; 21
  • 26. 1.6. Delete Kullanımı MySQL veri tabanında kayıt silmek çok kolaydır. Girilen bilgileri silmek için delete komutu kullanılır. Kullanımı: DELETE [LOW_PRIORITY] [QUICK ] [IGNORE] FROM tablo_adi [WHERE koşul] [ORDER BY satır_sütun] [LIMIT sayi] Örnek: Tablodaki tüm verileri (satırları) silmek için aşağıdaki ifadeyi yazmak yeterlidir. Tüm veriler silineceğinde dikkatli kullanılmalıdır (musteri tablosundaki tüm bilgiler silinir.). mysql> delete * from musteri; Örnek: Aşağıdaki SQL komutu kullanicilar tablosundaki bolum bilgisi “bilgisayar” olan tüm kullanıcılar ile ilgili satırları silecektir. mysql> delete * from kullanicilar where bolum=’bilgisayar’; Örnek: Aşağıdaki SQL komutu ogrenci tablosundaki ad bilgisi “mesut” olan tüm öğrenciler ile ilgili satırları silecektir. mysql> delete * from ogrenci where ad=’mesut’; 1.7. Update Kullanımı Veri tabanından veri almanın yanı sıra, çoğunlukla bu verileri değiştirmek de isteriz. Örneğin öğrenci veri tabanındaki öğrenci veli adres bilgisini değiştirmek isteye biliriz. Bu ve benzeri güncelleme (değiştirme) işlemleri için UPDATE ifadesi kullanılır. Kullanımı: UPDATE tablo_adi SET ala1=değer1,[,alan2=değer2,…] [WHERE koşul cümlesi] ; Temel olarak tablo_adi adlı tabloyu güncellemek, adlandırılan sütunların her birini uygun deyime ayarlamaktır. Bir UPDATE, bir WHERE cümleciği kullanılarak belirli satırlarla sınırlandırılabilir. NOT: Burada Where ifadesi kullanılmaz ise tablodaki bütün kayıtlar güncellenir, koşul yazılırsa o koşula uygun kayıtlar güncellenir. Koşul kısmına dikkat edilmesi gereklidir, çünkü istenmeyen sonuçlar doğurabilir. Bir kayıtta düzeltme yapacağınız yere bütün kayıtların içeriklerini değiştirebilirsiniz. 22
  • 27. Örnek: Bir kitap satışı yapan mağaza, kitap fiyatlarını % 15 artırmak istiyor. Bunun için kitap veri tabanındaki fiyat alanı üzerinde güncelleme yapmak gerekecektir. mysql>update kitap set fiyat=fiyat*1.15; Örnek: Öğrenci numarası 127 olan öğrencinin doğum tarihini 03/12/1997 olarak değiştirecek MySQL kodu aşağıdaki gibi olacaktır: mysql>update ogrenci set dogum_tarihi=’1995/03/12’ mysql>where ogrno=127; 1.8. Alter Kullanımı Alter Table (Tablo Güncelleme) Alter Table, bir tablonun tanımını değiştirir. Veri tabanındaki satırları güncellemeye ek olarak, veri tabanı içindeki tabloların yapısını da değiştirmek gerekebilir. Bu amaç için ALTER TABLE ifadesi kullanılır. MySQL ile bir tabloda istediğiniz kadar değişiklik yapabilirsiniz. Değiştirme cümleciklerinin her biri tablonun farklı yönlerini değiştirmek için kullanılabilir. Alter Table’nin çeşitli alt kullanımları vardır. Kullanımı: ALTER [IGNORE] TABLE tbl_name alter_specification [, alter_specification] ... alter_specification: table_option ... | ADD [COLUMN] column_definition [FIRST | AFTER col_name ] | ADD [COLUMN] (column_definition,...) | ADD {INDEX|KEY} [index_name] [index_type] (index_col_name,...) | ADD [CONSTRAINT [symbol]]PRIMARY KEY [index_type] (index_col_name,...) | ADD [CONSTRAINT [symbol]]UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...) | ADD [CONSTRAINT [symbol]]FOREIGN KEY [index_name] (index_col_name,...)[reference_definition] | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT} | CHANGE [COLUMN] old_col_name column_definition [FIRST|AFTER col_name] | MODIFY [COLUMN] column_definition [FIRST | AFTER col_name] | DROP [COLUMN] col_name | DROP PRIMARY KEY | DROP {INDEX|KEY} index_name | DROP FOREIGN KEY fk_symbol | DISABLE KEYS | ENABLE KEYS 23
  • 28. | RENAME [TO] new_tbl_name | ORDER BY col_name [, col_name] ... | CONVERT TO CHARACTER SET charset_name [COLLATE collation_name] | [DEFAULT] CHARACTER SET charset_name [COLLATE collation_name] | DISCARD TABLESPACE | IMPORT TABLESPACE index_col_name: col_name [(length)] [ASC | DESC] index_type: USING {BTREE | HASH} ALTER TABLE İfadesiyle Yapılabilen Değişiklikler Söz Dizimi Açıklama ADD [COLUMN] column_definition Belirtilen konuma yeni bir sütun ekler. [FIRST | AFTER col_name ] column_definition’ın bir ad ve tipe ihtiyaç duyar. ADD [COLUMN] Tablonun sonuna bir veya daha fazla (column_definition,...) sütun ekler. ADD {INDEX|KEY} [index_name] Tabloda belirtilen sütun veya sütunlar [index_type] üzerinde bir index oluşturur. (index_col_name,...) ADD [CONSTRAINT [symbol]]PRIMARY KEY Belirtilen sütun veya sütunları tablonun [index_type] birincil anahtarı yapar. (index_col_name,...) ADD [CONSTRAINT [symbol]]UNIQUE [INDEX|KEY] Belirtilen sütun ve sütunlar üzerinde [index_name] [index_type] tabloya benzersiz bir index ekler. (index_col_name,...) ADD [CONSTRAINT [symbol]]FOREIGN KEY Bir InnDB tablosuna yabancı bir anahtar [index_name] ekler. (index_col_name,...)[reference _definition] ALTER [COLUMN] col_name {SET Belirli bir sütunun varsayılan değerini DEFAULT literal | DROP ekler veya kaldırır. DEFAULT} CHANGE [COLUMN] old_col_name Column adlı sütunu, listelenmiş tanıma column_definition [FIRST|AFTER sahip olacak şekilde listeler. col_name] MODIFY [COLUMN] CHANGE benzer. Adları değil, sütun column_definition [FIRST | tiplerini değiştirmek için kullanılır. AFTER col_name] DROP [COLUMN] col_name Belirtilen sütunu siler. DROP PRIMARY KEY Birincil indexi siler. 24
  • 29. DROP {INDEX|KEY} index_name Belirtilen indexi siler. DROP FOREIGN KEY fk_symbol Yabancı anahtarı siler. DISABLE KEYS İndex güncelleme özelliğinin etkinliğini kaldırır. ENABLE KEYS İndex güncelleme özelliğini etkinleştirir. RENAME [TO] new_tbl_name Bir tabloyu yeniden adlandırır. ORDER BY col_name [, col_name] Tabloyu satırlar belirli bir şekilde … sıralanmış şekilde yeniden oluşturur. CONVERT TO CHARACTER SET Metin tabanlı sütunların hepsini belirtilen charset_name [COLLATE kümesine dönüştürür. collation_name] [DEFAULT] CHARACTER SET charset_name [COLLATE Varsayılan karakter kümesini ayarlar. collation_name] DISCARD TABLESPACE Bir InnDB dosyasının temelini oluşturan tablespace dosyasını siler. IMPORT TABLESPACE Bir InnDB dosyasının temelini oluşturan tablespace dosyasını yeniden oluşturur. Tablo 1.3: Alter Table ifadesiyle yapılabilen değişiklikler Örnek: Müşteri tablosunda adların 25 karaktere kadar uzun olmasına izin verilmiş olsun. Verileri almaya başladıktan sonra bazı isimlerin çok uzun olduğu görülsün. Bu durum, sütunu 50 karakter uzunluğunda olacak şekilde değiştirilerek düzeltilebilir. mysql>alter table musteri modify ad char(50) not null; Çok sık ortaya çıkan bir durum, bir sütun ekleme ihtiyacıdır. Örnek: Müşteri tablosunda müşterilerin e-mail adreslerini de almak istediğimizi düşünelim. tablomuzda böyle bir sütun önceden yoktu. Bu durumda yeni bir sütun eklenecektir. mysql>alter table musteri add email char(50) not null; Eklenen bir sütundan kurtulma isteği de yine çok sık karşılaşılan bir durumdur. Yukarıda eklediğimiz sütunu aşağıdaki gibi silebiliriz: mysql>alter table musteri drop email; Örnek: Öğrenci kayıt bilgileri için oluşturulmuş olan ogrenci tablosunun adını, ogr olarak değiştirmek için şu kodlar yazılır: mysql>alter table ogrenci rename ogr; 25
  • 30. Örnek: Bir kirtasiye veri tabanındaki kitap adlı alan adını book olarak değiştirelim: mysql>alter table kirtasiye change kitap book; 1.9. MySQL Fonksiyonları 1.9.1. Standart Fonksiyonlar AVG() Verilen alanın aritmetik ortalamasını alır. mysql>SELECT AVG(yas) FROM employee where bolum='Halkla İlişkiler'; Yukarıdaki sorgu halkla ilişkiler bölümünde çalışan personelin yaş ortalamasını verecetir. AVG() fonksiyonu, istenen alandaki verilerin aritmetik ortasını görüntüler. SUM() Verilen alanların toplamını alır. mysql>SELECT SUM(maas) FROM employee WHERE bolum='Bilgi İşlem'; Yukarıdaki sorgu, bilgi işlem bölümünde çalışan tüm personelin maaşlarının toplamını görüntüler. MIN() Verilen alanın kayıtlar arasındaki en küçük değerini verir. mysql>SELECT MIN(maas) AS enazmaas FROM employee WHERE bolum='Bilgi İşlem'; Yukarıdaki sorgu, bilgi işlem bölümünda çalışan ve en düşük maaşı alan personeli görüntüler. MAX() Verilen alanın kayıtlar arasındaki en büyük değerini verir. mysql>SELECT MAX(maas) FROM employee WHERE bolum='Bilgi İşlem'; Yukarıdaki sorgu, bilgi işlem bölümünda çalışan ve en yüksek maaşı alan personelin maaşını görüntüler. 26
  • 31. COUNT() Verilen alanın kayıtlar arasında kaç defa yazıldığını bulur. Eğer şirketin basın yayın bölümünde çalışan evli ve maaşı 500 YTL’den az olan kişilerin sayısını öğrenmek istiyorsak aşağıdaki sorgu işimizi görecektir. mysql>SELECT COUNT(*) FROM employee WHERE maas<500 AND medeni_hal='evli' AND bolum='Basın Yayın' ROUND () Verilen alanın virgülden sonraki değerini yuvarlar. Tam sayı kısmını verir. mysql> select round(15.56); >16 1.9.2. Tarih ve Zaman Fonksiyonları ADDDATE Bu fonksiyon tarih hesaplama işlemleri için kullanılır. Bu fonksiyonla aynı çalışan DATE_SUB() DATE_ADD() SUBDATE() fonksiyonları vardır. ADDDATE() ve SUBDATE(), DATE_ADD() ve DATE_SUB() fonksiyonlarının eş anlamlılarıdır. Bunu kullanmanız için yazım formatının sağ tarafındaki tip DATE veya DATETIME olmalıdır. Burada kullanılan tarih, DATETIME (tarihzaman) ya da DATE (tarih) değeridir. Bunlar başlangıç değerini belirler. Yazım formatı INTERVAL değerini belirler.. Bu değer, başlangıç değerine eklenir veya çıkarılır. Resim 1.4 Yazım formatı, bir işaretler grubudur. Bu negatif INTERVAL'ler için '-' ile başlayabilir. tip; ise bir anahtar kelimedir. Bu yazım formatının nasıl yorumlanacağını gösterir. EXTRACT(tip FROM tarih) fonksiyonuyla INTERVAL tipini öğrenebilirsiniz. Yazım formatında gün, ay, yıl, saat, dakika, saniye gibi değerleri ayırmada kullanılan işaretler yerine istediğiniz noktalama işaretlerini kullanabilirsiniz. Aşağıda verilen parametreler bölümündeki yazım şekli önerilendir. 'Saatler: Dakikalar: Saniyeler' Yerine 'Saatler. Dakikalar. Saniyeler' veya 'Saatler, Dakikalar, Saniyeler' gibi kullanabilirsiniz. Fonksiyona girilen tarih değeri DATE ise ve hesaplamalarda kullandığınız tip YEAR, MONTH ve DAY ise (yani TIME bölümleri değilse); hesaplamalar sonucunda döndürülen değer DATE formatındadır. Bunun dışındakilerde döndürülen değer TIME formatındadır. 27
  • 32. Kullanımı: ADDDATE(tarih,INTERVAL expr tip) ADDDATE(expr,gün) ADDDATE(tarih, INTERVAL yazım formatı tip) Bu fonksiyonla aynı çalışan diğer fonksiyonlar DATE_SUB(tarih, INTERVAL yazım formatı tip) SUBDATE(tarih, INTERVAL yazım formatı tip) DATE_ADD (tarih, INTERVAL yazım formatı tip) Örnek: mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY); -> '1998-02-02' mysql> SELECT ADDDATE('1998-01-02', INTERVAL 31 DAY); -> '1998-02-02' Parametreler: Tip Adı YAZIM FORMATI MICROSECOND Mikrosaniyeler SECOND Saniyeler MINUTE Dakikalar HOUR Saatler DAY Günler WEEK Haftalar MONTH Aylar QUARTER Çeyrekler YEAR Yıllar SECOND_MICROSECOND Saniyeler.Mikrosaniyeler MINUTE_MICROSECOND Dakikalar.Mikrosaniyeler MINUTE_SECOND Dakikalar:Saniyeler HOUR_MICROSECOND Saatler.Mikrosaniyeler HOUR_SECOND Saatler:Dakikalar:Saniyeler HOUR_MINUTE Saatler:Dakikalar DAY_MICROSECOND Günler.Mikrosaniyeler DAY_SECOND Günler Saatler:Dakikalar:Saniyeler DAY_MINUTE Günler Saatler:Dakikalar DAY_HOUR Günler Saatler YEAR_MONTH Yıllar-Aylar Tablo 1.4: Tarih zaman parametreleri 28
  • 33. Örnek: <?php $tarih = '2005-01-31'; $sql = mysql_query("SELECT ADDDATE('$tarih', INTERVAL 1 DAY) AS tari h"); $sonuc = mysql_fetch_object($sql); echo $sonuc->tarih; //Sonuç: 2005-02-01 ?> ADDTIME ADDTIME(expr,expr2) ADDTIME() fonksiyonu expr2 değerini expr değerine ekler ve sonucu döndürür. Kullanımı: expr : TIME (zaman) ya da DATETIME (tarih, zaman) olabilir. expr2 : ise sadece TIME (zaman) dır. ADDTIME(expr,expr2) Örnek: mysql> SELECT ADDTIME('1997-12-31 23:59:59.999999', '1 1:1:1.000002'); -> '1998-01-02 01:01:01.000001' mysql> SELECT ADDTIME('01:00:00.999999', '02:00:00.999998'); -> '03:00:01.999997' CURDATE Bu günün tarihini 'YYY-MM-DD' veya 'YYYYMMDD' formatında döndürür. Kullanımı: mysql> SELECT CURDATE(); -> '1997-12-15' mysql> SELECT CURDATE() + 0; -> 19971215 CURRENT_DATE Bugünün tarihini 'YYYY-MM-DD' veya 'YYYYMMDD' formatında verir. CURRENT_DATE ve CURRENT_DATE(), CURDATE() fonksiyonunun eş anlamlılarıdır. Kullanımı: mysql> SELECT CURRENT_DATE(); -> '2005-10-03' mysql> SELECT CURRENT_DATE() + 0; -> 20051003 29
  • 34. CURRENT_TIME CURRENT_TIME ve CURRENT_TIME() fonksiyonları, CURTIME fonksiyonunun eş anlamlısıdır. CURRENT_TIMESTAMP CURRENT_TIMESTAMP ve CURRENT_TIMESTAMP(), NOW() fonksiyonunun eş anlamlılarıdır. Bunlar şimdiki tarihi ve zamanı verirler. Kullanımı: mysql>select CURRENT_TIMESTAMP(); ->2005-10-03 14:50:59 mysql>select CURRENT_TIMESTAMP; ->2005-10-03 14:50:59 CURTIME Geçerli saati 'HH: MM: SS' veya 'HHMMSS formatında döndürür. Kullanımı: mysql> SELECT CURDATE(); -> '1997-12-15' mysql> SELECT CURDATE() + 0; -> 19971215 DATE DATE (tarih) veya DATETIME (tarih, zaman) ifadesinden tarihi çıkarır. Bu fonksiyon MySQL 4.1.1’ de kullanılır. Kullanımı: mysql> SELECT DATE('2003-12-31 01:02:03'); -> '2003-12-31' DATEDIFF İki tarih arasındaki farkı alır. Kullanımı: mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30'); -> 1 mysql> SELECT DATEDIFF('1997-11-30 23:59:59','1997-12-31'); -> -31 DATE_ADD Bu fonksiyon tarih hesaplama işlemleri için kullanılır. Bu fonksiyonla aynı çalışan DATE_SUB(), ADDDATE() ,SUBDATE() fonksiyonları vardır. ADDDATE() ve SUBDATE(), DATE_ADD() ve DATE_SUB() fonksiyonlarının eş anlamlılarıdır. Yazım formatı INTERVAL değerini belirler. Bu değer, başlangıç değerine eklenir veya çıkarılır. 30
  • 35. Yazım formatında gün, ay, yıl, saat, dakika, saniye gibi değerleri ayırmada kullanılan işaretler yerine istediğiniz noktalama işaretlerini kullanabilirsiniz. Aşağıda verilen parametreler bölümündeki yazım şekli önerilendir. 'Saatler: Dakikalar: Saniyeler' yerine 'Saatler. Dakikalar. Saniyeler' veya Saatler, Dakikalar, Saniyeler' gibi kullanabilirsiniz. Fonksiyona girilen tarih değeri DATE ise ve hesaplamalarda kullandığınız tip YEAR, MONTH ve DAY ise hesaplamalar sonucunda döndürülen değer DATE formatındadır. Bunun dışındakilerde döndürülen değer TIME formatındadır. DATE_ADD(date,INTERVAL expr type) DATE_ADD (tarih, INTERVAL yazım formatı tip) Bu fonksiyonla aynı çalışan diğer fonksiyonlar DATE_SUB(tarih, INTERVAL yazım formatı tip) ADDDATE(tarih, INTERVAL yazım formatı tip) SUBDATE(tarih, INTERVAL yazım formatı tip) Örnek: MySQL’de tarih hesaplama işlemleri <?php mysql> SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND; -> 1998-01-01 00:00:00 - >Verilen DATETIME Değerine 1 Saniye Ekleniyor... mysql> SELECT INTERVAL 1 DAY + "1997-12-31"; -> 1998-01-01 -> Verilen DATE Değerine 1 Gün Ekleniyor mysql> SELECT "1998-01-01" - INTERVAL 1 SECOND; -> 1997-12-31 23:59:59 - > Verilen DATE veya DATETIME Değerine 1 Saniye Ekleniyor ve Sonucu DA TETIME Formatında Veriyor. mysql> SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL 1 SECOND); -> 1998-01-01 00:00:00 - > Verilen DATETIME Değerine 1 Saniye Ekleniyor mysql> SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL 1 DAY); -> 1998-01-01 23:59:59 ->Verilen DATETIME Değerine 1 Gün Ekleniyor mysql> SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL "1:1" MINUTE_SECOND); -> 1998-01-01 00:01:00 - > Verilen DATETIME Değerine 1 Dakika 1 Saniye Ekleniyor mysql> SELECT DATE_SUB("1998-01-01 00:00:00", INTERVAL "1 1:1:1" DAY_SECOND); -> 1997-12-30 22:58:59 - > Verilen DATETIME Değerinden 1 Gün 1 Saat:1Dakika:1 Saniye Çıkarılıyor mysql> SELECT DATE_ADD("1998-01-01 00:00:00", INTERVAL "-1 10" DAY_HOUR); -> 1997-12-30 14:00:00 - > Verilen DATETIME Değerinden 1 Gün, 1 Saat Çıkarılıyor mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY); -> 1997-12-02 -> Verilen DATE Değerinden 31 Gün Çıkarılıyor 31
  • 36. ?> Örnek: DATE_ADD() kullanım örnekleri <?php /* MySQL'deki tarih alanı datetime olarak ayarlandığını varsayarsak… +---------------------+ | tarihalani | +---------------------+ | 2004-12-31 23:59:59 | +---------------------+ */ $sorgu = mysql_query("SELECT tarihalani + INTERVAL 1 SECOND"); //Ta rihe 1 Saniye Ekler // '2005-01-01 00:00:00' $sorgu = mysql_query("SELECT INTERVAL 1 DAY + tarihalani"); //Tarihe 1 Gün Ekler // '2005-01-01' $sorgu = mysql_query("SELECT tarihalani - INTERVAL 1 SECOND; //Tarihten 1 Saniye Çıkarır // '2004-12-31 23:59:58' $sorgu = mysql_query("SELECT DATE_ADD(tarihalani,INTERVAL 1 SECON D); //Tarihe 1 Saniye Ekler // '2005-01-01 00:00:00' $sorgu = mysql_query("SELECT DATE_ADD(tarihalani,INTERVAL 1 DAY)") ; //Tarihe 1 Gün Ekler // '2005-01-01 23:59:59' $sorgu = mysql_query("SELECT DATE_ADD(tarihalani,INTERVAL '1:1' MINU TE_SECOND)");//Tarihe 1 Dakika 1 Saniye Ekler // '2005-01-01 00:01:00' $sorgu = mysql_query("SELECT DATE_ADD(tarihalani,INTERVAL '- 1 10' DAY_HOUR)"); //Tarihden 1 Gün 10 Saat Çıkarır // '2004-12-30 14:59:59' $sorgu = mysql_query("SELECT DATE_ADD('1992-12- 31 23:59:59.000002',INTERVAL '1.999999' SECOND_MICROSECOND)");//T arihden 1 Saniye 999999 Mikrosaniye Ekler // '1993-01-01 00:00:01.000001' ?> DATE_FORMAT MySQL'de tarihleri dönüştürmek için kullanılır. DATE_FORMAT() fonksiyonu PHP fonksiyonuna benzer şekilde çalışır, ancak farklı biçimlendirme kodları kullanır. MySQL'deki tarih ve saatler ISO 8601 biçimi kullanılarak işlenir. ISO 8601'de tarihlerin, yıl önce olacak şekilde girilmesi gerekir. YYYY-AA-GG SS:DD:SS Örnek 2005'in Haziran ayı 32
  • 37. için 2005-06-01 olarak girilmelidir. Bu ISO 8601 tarih formatını, GG.AA.YYYY şekline getirmek için bu fonksiyondan yararlanabilirsiniz Parametreler: %M : Ay, tüm metin (January...December) %W : Gün adı, tüm metin. (Sunday...Saturday) %D : Ayın günü, sayısal, metin sonekiyle birlikte (örneğin, 1st) %Y : Yıl, sayısal, 4-basamaklı %y : Yıl, sayısal, 2-basamaklı %a : Gün adı, 3-karakter (Sun...Sat) %d : Ayın günü, sayısal, başta sıfır var.. (00...31) %e : Ayın günü, sayısal, başta sıfır yok...(0...31) %m : Ay, sayısal, başta sıfır var.. (00...12) %c : Ay, sayısal, başta sıfır yok... (0...12) %b : Ay, metin, 3-karakter(Jan...Dec) %j : Yılın günü, sayısal..&amp;nbsp; %H : Saat, 24-saat, başta sıfır var&amp;nbsp; %k : Saat, 24-saat, başta sıfır yok&amp;nbsp; %h ya da %I : Saat, 12-saat, başta sıfır var&amp;nbsp; %l : Saat, 12-saat, başta sıfır yok..&amp;nbsp; %i : Dakika, sayısal, başta sıfır var.&amp;nbsp; %r : Zaman, 12-saat (hh:mm:ss [AM|PM])&amp;nbsp; %T : Zaman, 24-saat (hh:mm:ss)&amp;nbsp; %S ya da %s : Saniye, sayısal, başta sıfır var... (00...59) %p : AM veya PM&amp;nbsp; %w : Haftanın günü, sayısal, 0'dan (Sunday) 6'ya (Saturday) kadar... Örnek: MySQL Tarih Biçimini Şekillendirme <?php /* Dosyalar veri tabanındaki uyeler Tablosunu Kullandığınızı Varsayarsak +--------+---------------------+ | uyeadi | kayittarihi | +--------+---------------------+ | ali | 2005-05-14 15:20:00 | +--------+---------------------+ | veli | 2005-06-14 15:20:00 | +--------+---------------------+ */ $sorgu = mysql_query("SELECT DATE_FORMAT(kayittarihi, '%d.%m.%Y %H:%i:%s') AS kayittarihi FROM uyeler",$baglanti); //MySQL Tarih Alanı Bi çimlendiriliyor while($veri = mysql_fetch_array($sorgu) { echo $veri["kayittarihi"]; 33
  • 38. } //Sonuç //14.05.2005 15:20:00 //14.06.2005 15:20:00 ?> Örnek: UNIXTIME Alanını Düzenleme <?php /* Dosyalar Klasöründeki uyeler Tablosunu Kullandığınızı Varsayarsak... +--------+---------------------+ | uyeadi | kayit_tarihi | +--------+---------------------+ | ali | 1116076800 | +--------+---------------------+ */ require("ayar.php"); require("baglan.php"); $sorgu = mysql_query("SELECT DATE_FORMAT(FROM_UNIXTIME(kayit_t arihi), '%d.%m.%Y %H:%i:%s') AS kayit_tarihi FROM uyeler"); //Unixtime Zaman Biçimi Düzenleniyor $veri = mysql_fetch_array($sorgu) echo $veri["kayit_tarihi"]; //Sonuç //14.05.2005 15:20:00 ?> DATE_SUB Bu fonksiyon, tarih hesaplama işlemleri için kullanılır. Bu fonksiyonla aynı çalışan DATE_ADD() ADDDATE() SUBDATE() fonksiyonları vardır. ADDDATE() ve SUBDATE(), DATE_ADD() ve DATE_SUB() fonksiyonlarının eş anlamlılarıdır. Burada kullanılan tarih, DATETIME (tarih,zaman) ya da DATE (tarih) değeridir. Bunlar başlangıç değerini belirler. Yazım formatı INTERVAL değerini belirler. Bu değer başlangıç değerine eklenir veya çıkarılır. Kullanımı: DATE_SUB(date,INTERVAL expr type) DATE_SUB(tarih, INTERVAL yazım formatı tip) Bu fonksiyonla aynı çalışan diğer fonksiyonlar DATE_ADD (tarih, INTERVAL yazım formatı tip) ADDDATE(tarih, INTERVAL yazım formatı tip) SUBDATE(tarih, INTERVAL yazım formatı tip) 34
  • 39. DAY Bu fonksiyon DAYOFMONTH() fonksiyonunun eş anlamlısıdır. DAYNAME Tarih için hafta günlerinin ismini verir ( İngilizce olarak ). DAYNAME(tarih) mysql> select DAYNAME("2005-08-22"); -> 'Monday' DAYOFMONTH Geçerli tarih için ayın gününü verir (1-31 aralığında). DAYOFMONTH(tarih) mysql> select DAYOFMONTH('1998-02-03'); -> 3 DAYOFWEEK DAYOFWEEK(tarih) Haftanın gününü döndürür. Geçerli tarih için: (1=Pazar, 2= Pazartesi, ......7= Cumartesi) Bu değerler, ODBC standardıyla aynıdır. mysql> select DAYOFWEEK('1998-02-03'); -> 3 Kullanımı: mysql> select DAYOFWEEK('1998-02-03'); -> 3 DAYOFYEAR Geçerli tarih için yılın gün sayısını döndürür (1-366). DAYOFYEAR(tarih) mysql> select DAYOFYEAR('1998-02-03'); -> 34 EXTRACT Bu fonksiyon, aynı DATE_ADD() ve DATE_SUB() fonksiyonlarındaki INTERVAL tiplerini kullanır. Yalnız tarih hesaplamaları yerine tarihten payları çıkarır. EXTRACT(typ FROM tarih) Örnek: EXTRACT() Kullanım Örnekleri 35
  • 40. <?php $sql1 = mysql_query("SELECT EXTRACT(YEAR FROM '2005-10- 03') AS tarih"); $sonuc = mysql_fetch_object($sql1); echo $sonuc->tarih; //2005 $sql2 = mysql_query("SELECT EXTRACT(YEAR_MONTH FROM '2005-10- 03 15:25:00') AS tarih"); $sonuc = mysql_fetch_object($sql2); echo $sonuc->tarih; //200510 $sql3 = mysql_query("SELECT EXTRACT(DAY_MINUTE FROM '2005-10- 03 15:25:00') AS tarih"); $sonuc = mysql_fetch_object($sql3); echo $sonuc->tarih; //31525 ?> HOUR Geçerli zamanın saatini döndürür (0–23 arasında). HOUR(zaman) mysql> select HOUR('10:05:03'); -> 10 MINUTE Geçerli zaman için dakikayı verir (0-59). MINUTE(zaman) mysql> select MINUTE('98-02-03 10:05:03'); -> 5 MONTH Datetime formatındaki tarihin ayını 1-12 şeklinde döndürür. Kullanımı: MONTH(tarih) mysql> SELECT MONTH('1998–02–03'); -> 2 Örnek: MONTH () Kullanımı <?php /* MySQL'deki tarih alanı datetime olarak ayarlandığını varsayarsak. +---------------------+ | tarihalani | +---------------------+ | 2005-06-14 15:20:00 | +---------------------+ */ 36
  • 41. $sorgu = mysql_query("SELECT MONTH(tarihalani) AS tarih_alani FROM t abloadi"); $sonuc = mysql_fetch_array($sorgu); echo $sonuc["tarih_alani"]; //Çıktısı 6 Olacaktır ?> MONTHNAME Tarih için ayların ismini verir (İngilizce olarak). MONTHNAME(tarih) mysql> select MONTHNAME("1998-02-05"); -> 'February' NOW Şimdiki zamanı 'YYYY-MM-DD HH:MM:SS' veya YYYYMMDDHHMMSS formatında verir. NOW() Örnek: NOW() Kullanım Örnekleri mysql> SELECT NOW(); -> '1997-12-15 23:50:26' mysql> SELECT NOW() + 0; -> 19971215235026 QUARTER Geçerli tarih için yılın kaçıncı çeyreği olduğunu (1-4) döndürür. QUARTER(tarih) mysql> select QUARTER('98-04-01'); -> 2 SECOND Zaman için saniyeyi verir (0-59). SECOND(zaman) mysql> select SECOND('10:05:03'); -> 3 TIME_TO_SEC Fonksiyona verilen saat argümanını saniyeye çevirir. TIME_TO_SEC(saat) mysql> SELECT TIME_TO_SEC('22:23:00'); -> 80580 mysql> SELECT TIME_TO_SEC('00:39:38'); -> 2378 37
  • 42. WEEK Fonksiyon tek argümanla geçerli tarihin kaçıncı hafta olduğunu verir (0-53 aralığında). (Bazı yerlerde 53 haftanın başlangıcı da olabilir.) Bazı yerlerde Pazar, haftanın ilk günüdür. İkinci argümanla WEEK() fonksiyonunda haftanın pazar veya pazartesi ile başlayacağını belirleyebilirsiniz. İkinci argüman sıfır (0) olursa hafta pazar günleri başlar, 1 olursa pazartesi günleri başlar. WEEK(tarih), WEEK(tarih,ilkgün) mysql> select WEEK('1998-02-20'); -> 7 mysql> select WEEK('1998-02-20',0); -> 7 mysql> select WEEK('1998-02-20',1); -> 8 mysql> select WEEK('1998-12-31',1); -> 53 WEEKDAY Geçerli tarih için haftanın gününü verir (0 = Pazartesi, 1= Salı, .....6= Pazar). WEEKDAY(tarih) mysql> select WEEKDAY('1997–10–04 22:23:00'); -> 5 mysql> select WEEKDAY('1997–11-05'); -> 2 YEAR Geçerli tarihin yılını döndürür (1000-9999). YEAR(tarih) mysql> select YEAR('98-02-03'); -> 1998 YEARWEEK Geçerli tarihin yıl ve hatfasını döndürür. İkinci argüman, WEEK() fonksiyonundaki ikinci argüman ile aynı çalışır. (ikinci argüman sıfır (0) olursa hafta pazar günleri başlar, 1 olursa pazartesi günleri başlar) Dikkat edilmesi gereken, senenin ilk ve son haftasındaki yıl, argümanda verilen tarihteki seneden farklı olabilir. YEARWEEK(tarih), YEARWEEK(tarih,ilk) mysql> select YEARWEEK('1987-01-01'); -> 198653 38
  • 43. 1.9.3. Karşılaştırma Fonksiyon ve Operatörleri Eşittir “=” mysql> SELECT 1 = 0; -> 0 mysql> SELECT ‘0’ = 0; -> 1 mysql> SELECT ‘0.0’ = 0; -> 0 mysql> SELECT ‘0.01’ = 0; -> 0 mysql> SELECT ‘.01’ = 0.1 ; -> 1 Eşit Değildir “<>”, “!=” mysql> SELECT ‘.01’ <> ‘0.01’; -> 1 mysql> SELECT .01 <> ‘0.01’; -> 0 mysql> SELECT ‘zapp’ <> ‘zappp’; -> 1 Küçüktür veya Eşittir “<=” mysql>SELECT 0.1 <= 2; -> 1 Küçüktür “<” mysql> SELECT 2 < 2; -> 1 Büyüktür veya eşittir “>=” mysql> SELECT 2 >= 2; -> 1 mysql>SELECT 2 > 2; -> 1 Büyüktür “>” GREATEST(değer1,değer2,.......) İki veya daha fazla değer verildiğinde en büyük olan değeri seçer. LEAST() komutuyla aynı şekilde kullanılır. mysql>SELECT GREATEST (2 , 0); ->2 mysql>SELECT GREATEST (34.0 , 3.0 , 5.0 , 767.0); ->767.0 39
  • 44. MySQL 5.0.13 ‘ten önce, GREATEST() fonksiyonu sadece diğer değerlerin hepsi geçersiz duruma geçtiğinde geçersiz oluyordu. 5.0.13’te değerlerden herhangi biri geçersiz olduğunda hemen geçersiz oluyor. IN expr IN (değer,...) Verilen expr değerlerin herhangi birine eşitse “1” değilse “0” verir. mysql> SELECT 2 IN (0, 3, 5, 6); -> 0 mysql> SELECT ‘wefwf’ IN (‘weee’, ‘wefwf’, ‘whfk’); -> 1 INTERVAL (N,N1,N2,N3...) Eğer N<N1 ise “0”; eğer N<N2 ise “+1”; eğer N NULL ise “-1“ değerini alır ve alınan değerler toplanır. Fakat bu fonksiyonun doğru olarak çalışabilmesi için N1<N2<N3.....<Nn olmalıdır. mysql> SELECT INTERVAL ( 23, 1, 15, 17, 30, 44, 200 ); -> 3 mysql> SELECT INTERVAL ( 10, 1, 10, 100, 1000 ); -> 2 mysql> SELECT INTERVAL ( 22, 23, 30, 44, 200 ); ->0 LEAST (değer1, değer2) İki ya da daha fazla değerlikten en küçük olanını seçer. Eğer girilen değerler string ise harf sırasına göre bulacaktır. mysql> SELECT LEAST ( 2, 0 ); -> 0 mysql> SELECT LEAST ( 3.0, 34.0, 5.0, 767.0 ); -> 3.0 mysql> SELECT LEAST ( ‘B’, ‘A’, ‘C’ ) -> ‘A’’ 1.9.4. Mantıksal Operatörler SQL’de mantıksal operatörler TRUE, FALSE VE NULL terimlerinden oluşur. MySQL’de ise 1(TRUE), 0(FALSE) ve NULL terimleri kullanılır. 40
  • 45. NOT (DEĞİL) “!” Lojik DEĞİL KAPISI ’na eşittir. 1 girilirse çıkışı 0; 0 girilirse çıkışı 1 yapar. mysql> SELECT NOT 10 ; -> 0 mysql> SELECT NOT 0 ; -> 1 mysql> SELECT NOT NULL; -> NULL mysql> SELECT NOT ! (1+1); -> 0 mysql> SELECT NOT ! 1 + 1; -> 1 En son verilen örnekte sonuç ‘1’ dir, çünkü “( ! 1) + 1’” değerine eşittir. AND (VE) “&&” Lojik VE KAPISI’na eşittir. Girişlerden herhangi biri ‘0’ ise çıkış değerini ‘0’ verir. mysql> SELECT 1 && 1 ; -> 1 mysql> SELECT 1 && 0 ; -> 0 mysql> SELECT 1 && NULL ; -> NULL mysql> SELECT 0 && NULL ; -> 0 mysql> SELECT NULL && 0 ; -> 0 OR (VEYA) “| |” Lojik VEYA KAPISI’na eşittir. Girişlerden herhangi birisi ‘1’ olduğunda çıkış değerini ‘1’ verir. mysql> SELECT 1 || 1 ; -> 1 mysql> SELECT 1 || 0 ; -> 1 mysql> SELECT 0 || 0 ; -> 0 mysql> SELECT 0 || NULL ; -> NULL mysql> SELECT 1 || NULL ; -> 1 41
  • 46. XOR (ÖZEL VEYA) Lojik olarak ÖZEL VEYA KAPISI’nın yaptığı işi görür. Girişler aynı olduğunda çıkış değerini ‘0’; diğer durumlarda ‘1’ verir. mysql> SELECT 1 XOR 1 ; -> 0 mysql> SELECT 1 XOR 0 ; -> 1 mysql> SELECT 1 XOR NULL ; -> NULL mysql> SELECT 1 XOR 1 XOR 1 ; -> 1 Matematiksel olarak “( a AND ( NOT b)) OR (( NOT a ) AND b) “ değerine eşittir. 1.9.5. Kontrol Mekanizmaları ve Karakter Fonksiyonları 1.CASE değer WHEN [ değeri karşılaştır ] THEN sonuç [ WHEN [ değeri karşılaştır ] THEN sonuç ...] [ELSE sonuç ] END 2. CASE WHEN [ durum ] THEN sonuç [when [ durum ] THEN sonuç ...] [ELSE sonuç ] Birincisinde eğer değer karşılaştırılacak değere eşitse sonuçta söylenen durumu yapar. Eğer değer karşılaştırılacak durumlara eşit değilse ELSE komutu ile söylenen sonucu yaptırır. İkincisinde ise, eğer durum gerçekleşiyorsa sonuçta söyleneni yapar. Eğer durum gerçekleşmiyorsa yine ELSE komutundan sonra söylenen işi yapar. mysql> SELECT CASE 1 WHEN 1 THEN ‘one’ -> WHEN 2 THEN ‘two’ ELSE ‘more’ END; -> ‘one’ mysql> SELECT CASE 1>0 THEN ‘true’ ELSE ‘false’ END; -> ‘true’ mysql> SELECT CASE BINARY ‘B’ -> WHEN ‘a’ THEN 1 WHEN ’b’ THEN 2 END; -> NULL 42
  • 47. IF(expr1, expr2, expr3) Mysql> SELECT IF ( 1 > 2 , 1, 0); -> 0 mysql> SELECT IF ( 1 < 2, ‘YES’, ‘NO’ ); -> ‘YES’ mysql> SELECT IF (STRCMP(‘test’, ‘test1’), ‘no’, ‘yes’ ); -> ‘no’ expr1’de yazan eğer doğruysa expr2; değilse exper3’de yazanı uygular. ASCII ( str ) Eğer girilen değer null bir ifade değilse değerin ascıı kodunu verir( 0 – 255 ). BIN(N) Girilen sayıyı BINARY sayı sistemine çevirir. mysql> SELECT BIN ( 12 ); -> ‘1100’ BIT_LENGHT (str) Girilen değerin kaç bitlik olduğunu bulur. mysql> SELECT BIT_LENGHT (‘text’) -> 32 CHAR (N,....) Girilen ascıı kodları karakterlere dönüştürür. mysql> SELECT CHAR ( 77, 121, 83, 81, ‘76’ ); -> ‘MySQL’ mysql> SELECT CHAR ( 77, 77.3, ‘77.3’ ); -> ‘MMM’ CONCAT( str1, str2,... ) String toplama yapar. Eğer değerlerden herhangi birisi null bir ifade ise null olan ifadeyi seçer. mysql> SELECT CONCAT ( ‘My’, ‘S’, ‘QL’ ); -> ‘MySQL’ mysql> SELECT CONCAT ( ‘My’, NULL, ‘QL’ ); -> NULL mysql> SELECT CONCAT ( 14.3 ); - > 14.3 43
  • 48. CONCAT_WS ( separator, str1, str2,...) Tıpkı CONCAT fonksiyonunda olduğu gibi string toplama yapar, fakat bunun tek farkı değerler arasına istediğimiz bir karakter koyabilmemizdir. Eğer değerlerin arasında bir null değer varsa onu pas geçer ve bir sonrakiyle birleştirir. mysql> SELECT CONCAT_WS ( ‘,’ , ‘First name’, ‘Second name’, ‘Last name’ ); -> ‘First name, Second name, Last name’ mysql> SELECT CONCAT_WS ( ‘,’ , ‘First name’, NULL, ‘Last name’ ); -> ‘First name, Last name’ ELT ( N, str1, str2, strn,...) N=1 ise str1’i, N=2 ise str2’i, N=n ise strn‘i seçer. mysql> SELECT ELT ( 1, ‘ej’, ‘der’, ‘alp’); -> ‘ej’ mysql> SELECT ELT ( 4, ‘ej’, ‘der’, ‘alp’); -> ‘alp’ FIELD ( str, str1, str2,str3,... ) Eğer str’deki yazı diğerlerinin içinde varsa kaç numaralı str’ de olduğunu verir. Eğer str diğerlerinin içinde yoksa ‘0’ verir. mysql> SELECT FIELD ( ‘ej’, ‘hej’, ‘ej’, ‘foo’); -> 2 mysql> SELECT FIELD ( ‘ej’, ‘hej’, ‘lej’, ‘foo’); -> 0 FIND_IN_SET ( str, strlist) Verilen str’nin strlist içinde kaçıncı sırada olduğunu bulur. mysql> SELECT FIND_IN_TEXT ( ‘b’, ‘a, b, c, d’); -> 2 FORMAT ( X, D ) ‘#,###,###.##’ diye bir X sayısının olduğunu varsayalım. D sayısı bu sayının ondalıklı kısmını yuvarlar veya ‘0’ koyarak ondalıklı kısımdaki D tane sayı olmasını sağlar. Eğer D sıfır ise ondalıklı kısım kalkar. Mysql> SELECT FORMAT ( 12332.123456, 4 ); -> 12,332.1235 mysql> SELECT FORMAT ( 12332.1, 4); -> 12,332.1000 mysql> SELECT FORMAT ( 12332.2, 0); -> 12,332 44
  • 49. INSERT(str,pos,len,newstr) Verilen metin içerisine istenilen posizyondan itibaren ‘ ’ işareti içinde verilen değeri yazar. mysql> SELECT INSERT('Quadratic', 3, 4, 'What'); -> 'QuWhattic' mysql> SELECT INSERT('Quadratic', -1, 4, 'What'); -> 'Quadratic' mysql> SELECT INSERT('Quadratic', 3, 100, 'What'); -> 'QuWhat' LEFT(str,len) Parantez içerisinde verilen metnin, verilen karakter sayısı kadarını soldan itibaren alır. mysql> SELECT LEFT('foobarbar', 5); -> 'fooba' LENGTH(str) ‘’ (tırnak) içinde verilen string ifadenin sayısını verir. mysql> SELECT LENGTH('text'); -> 4 LOWER(str) Büyük harflerle yazılan string ifadeyi küçük harflere çevirir. mysql> SELECT LOWER('QUADRATICALLY'); -> 'quadratically' LTRIM(str) Yazılan string ifadenin solunda bulunan boşluğu siler. mysql> SELECT LTRIM(' barbar'); -> 'barbar' RTRIM(str) Yazılan string ifadenin sağında bulunan boşluğu siler. mysql> SELECT LTRIM(‘barbar '); -> 'barbar' MID(str,pos,len) Verilen string, soldan belirtilen pozisyonundan itibaren belirtilen kadar karakterini alır. REPEAT(str,count) Tırnak içinde verilen karakteri istendiği kadar yazdırır. mysql> SELECT REPEAT('MySQL', 3); -> 'MySQLMySQLMySQL' REVERSE(str) Verilen string ifadeyi tersinden yazdırır. mysql> SELECT REVERSE('abc'); -> 'cba' 45
  • 50. RIGHT(str,len) Verilen string içinden sağdan verilen değer kadar olan karakteri alır. mysql> SELECT RIGHT('foobarbar', 4); -> 'rbar' SPACE(N) Verilen sayısal değer kadar boşluk verir. mysql> SELECT SPACE(6); -> ' ' UPPER(str) Verilen string ifadeyi tamamen büyük karakterlere çevirir. mysql> SELECT UPPER('Hej'); -> 'HEJ' 1.9.6. Aritmetik Operatörler Toplama mysql> SELECT 3+5; -> 8 Çıkarma mysql> SELECT 3-5; -> -2 Negatif sayı (devamındaki sayıyı negatif yapar) mysql> SELECT - 2; -> -2 Çarpma mysql> SELECT 3*5; -> 15 mysql> SELECT 18014398509481984*18014398509481984.0; -> 324518553658426726783156020576256.0 Bölme mysql> SELECT 3/5; -> 0.60 Sıfıra bölme hatası olduğunda sonuçta NULL değeri döner. mysql> SELECT 102/(1-1); -> NULL DIV Tam bölme; bölme işlemi sonunda virgül kısmı atılır, tam kısmı yazar. mysql> SELECT 5 DIV 2; -> 2 46
  • 51. N%M Kalan bulma; N bölü M. işleminden kalanı verir. 1.9.7. Matematiksel Fonksiyonlar ABS(X) Verilen sayısal değerin mutlak değerini verir. mysql> SELECT ABS(2); -> 2 mysql> SELECT ABS(-32); -> 32 ACOS(X) Verilen değerin arc cosine değerini verir. mysql> SELECT ACOS(1); -> 0 mysql> SELECT ACOS(1.0001); -> NULL mysql> SELECT ACOS(0); -> 1.5707963267949 ASIN(X) Verilen değerin arc sinus değerini verir. mysql> SELECT ASIN(0.2); -> 0.20135792079033 mysql> SELECT ASIN('foo'); +-------------+ | ASIN('foo') | +-------------+ | 0| +-------------+ 1 row in set, 1 warning (0.00 sec) mysql> SHOW WARNINGS; +---------+------+-----------------------------------------+ | Level | Code | Message | +---------+------+-----------------------------------------+ | Warning | 1292 | Truncated incorrect DOUBLE value: 'foo' | +---------+------+-----------------------------------------+ ATAN(X) Verilen değerin arc tangent değerini verir. mysql> SELECT ATAN(2); -> 1.1071487177941 mysql> SELECT ATAN(-2); -> -1.1071487177941 47
  • 52. COS(X) Radians değeri verilen değerin cosinusini verir. mysql> SELECT COS(PI()); -> -1 COT(X) Verilen değerin cotangant değerini verir. mysql> SELECT COT(12); -> -1.5726734063977 mysql> SELECT COT(0); -> NULL DEGREES(X) Verilen değişkenini değerini radyandan derceye döüştürür. mysql> SELECT DEGREES(PI()); -> 180 mysql> SELECT DEGREES(PI() / 2); -> 90 LN(X) LOG(X), LOG(B,X) X değişken değerinin doğal logaritmasını verir. mysql> SELECT LN(2); -> 0.69314718055995 mysql> SELECT LN(-2); -> NULL mysql> SELECT LOG(2); -> 0.69314718055995 mysql> SELECT LOG(-2); -> NULL MOD(N,M), N % M, N MOD M N değerinin M. değerine bölümünden kalanını verir. mysql> SELECT MOD(234, 10); -> 4 mysql> SELECT 253 % 7; -> 1 mysql> SELECT MOD(29,9); -> 2 mysql> SELECT 29 MOD 9; -> 2 PI ( X) PI sayısının değerini verir. mysql> SELECT PI(); -> 3.141593 mysql> SELECT PI()+0.000000000000000000; -> 3.141592653589793116 48
  • 53. RADIANS(X) X değişkenin değeri dereceden radyana dönüştürür. mysql> SELECT RADIANS(90); -> 1.5707963267949 TAN(X) Radyan olarak verilen değerin tanjantını verir. mysql> SELECT TAN(PI()); -> -1.2246063538224e-16 mysql> SELECT TAN(PI()+1); -> 1.5574077246549 SQRT(X) X değerinin karekökünü verir (Negatif sayıların karekökü olmaz.). mysql> SELECT SQRT(4); -> 2 mysql> SELECT SQRT(20); -> 4.4721359549996 mysql> SELECT SQRT(-16); -> NULL SIGN(X) Değişkenlerin işaretlerini verir ( -1  sayı negatifse 0  sıfır olduğunda veya 1 sayı pozitif olduğunda). mysql> SELECT SIGN(-32); -> -1 mysql> SELECT SIGN(0); -> 0 mysql> SELECT SIGN(234); -> 1 SIN(X) Radyan olarak verilen değerin sinüsünü verir. mysql> SELECT SIN(PI()); -> 1.2246063538224e-16 mysql> SELECT ROUND(SIN(PI())); -> 0 49
  • 54. UYGULAMA FAALİYETİ UYGULAMA FAALİYETİ MAGAZA MUSTERI URUN SIPARIS urun_no Musteri_no Musteri_no markasi adi Siparis_tarihi urun_adi soyadi Urun_kodu Urun_fiyat kart_no fiyat zaman miktar tutar Şekil 1.2 İşlem Basamakları Öneriler  Yukarıdaki şekle göre MAGAZA adlı bir veri tabanı oluşturunuz.  musteri, urun ve siparis adlı tabloları oluşturunuz.  Uygulamalar için kayıtlarda benzer  Her tabloya beşer kayıt giriniz. değerler girebilirsiniz (aynı isimli, fiyatları aynı olan ürünler gibi).  Girilen kayıtlardan urun fiyatı 25YTL olan ürünleri listeleyiniz.  Müşteri adı Mesut ve sipariş tarihi 30/04/2007 olan kayıtları görüntüleyiniz.  Girmiş olduğunuz müşteri kayıtlarından ikisini siliniz.  Ürünlerden bazılarının fiyatlarını değiştiriniz.  Ürün fiyatı en pahalı olan ürün hangisi?  Tabloları siliniz.  Magaza veri tabanını siliniz. 50