SQL Join

 

MySQL işlemlerinde şimdiye kadar her seferinde sadece bir tablodan veri alımı yaptık.Çoğunlukla PHP-MySQL projelerinde bu işlemler bizim için yeterli olacaktır.Ancak daha kapsamlı projeler için aynı anda birden fazla tablodan işlem alışverişi yapmamız gerekebilir.MySQL JOIN olayı da bunun için vardır.

MySQL Join – escort bodrum

MySQL JOIN işlemi ile iki veya daha fazla tablodan parça alarak yeni bir Joined(katılım) tablosu oluşturulur.Bunun anlamı şu ana kadar öğrendiğimiz tüm MySQL işlemlerini ,yeni oluşan joined tablosuna uygulayabiliriz.

MySQL Join Tablosu Kurulumu

İki veya daha fazla tabloyu birleştirme işlemini örneklerle açıklamak ,anlaşılırlığını arttıracak diye düşünüyorum.Şimdi ; “Aile” ve “Yiyecek” adında iki tabloyu ele alalım ve MySQL joine uyarlayalım.

Aile Tablosu:

Birey Yas
Baba 41
Anne 45
Kız 17
Erkek

Yiyecek Tablosu:

Yemek Birey
Biftek Baba
Salata Anne
Ispanak Çorbası
Kebab Baba

Görüldüğü gibi yukardaki her iki tabloda da “Birey” sütunu ortak olarak bulunuyor.Aile Tablosunda aile bireylerinin tamamını ve yaşlarını görüyoruz.”Yemek” tablosunda ise hangi birey hangi yemeği beğeniyor ise yemek isminden sonra sıralanmıştır.

Basit Bir Örnek

Bir aile bireyinin beğendiği yemekleri SELECT ifadesi ile seçtiğimizi düşünelim.

Kodumuzu yazalım:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

< ?php

// MySQL bağlantısı yapıldı

// Sorgumuz yapılandırıldı

$query = “SELECT Aile.Birey, Yiyecek.Yemek “.

“FROM Aile, Yiyecek “.

“WHERE Aile.Birey = Yiyecek.Birey”;

$result = mysql_query($query) or die(mysql_error());

// sorgunun sonucunu yayınlayalım

while($row = mysql_fetch_array($result)){

echo $row&#91;’Birey’&#93;. ” – “. $row&#91;’Yemek’&#93;;

echo “<br />”;

}

?>

“WHERE Aile.Birey = Yiyecek.Birey” ifadesine uygun satırları ekrana yazdırılıyor.

Ekran Çıktımız Şöyledir:

Baba – Biftek
Anne – Salata
Baba- Kebab

Tabloları Karşılaştıralım:

Birey

Yas

Baba 41
Anne 45
Kiz 17
Erkek

Yemek

Birey

Biftek Baba
Salata Anne
Ispanak Çorbası
Kebab Baba

MySQL LEFT JOIN

LEFT JOIN ifadesi nedir ve normal JOIN işleminden farkları nelerdir?

Öncelikle, syntax oldukça farklıdır ve birazcık daha complex(kapsamlıdır) dir.

Farklı görünme anlamına bakarsak, LEFT JOIN daha fazla detayı inceliyor diyebiliriz.

Aile ve Yiyecek Tablosu:

Birey

Yas

Baba 41
Anne 45
Kiz 17
Erkek

Yemek

Birey

Biftek Baba
Salata Anne
Ispanak Çorbası
kebab Baba

Basitleştirilmiş MySQL Sorgusu:

SELECT Yiyecek.Yemek, Aile.Birey

FROM Aile, Yiyecek

WHERE Yiyecek.Birey= Aile.Birey

Sonuç:

Baba – Biftek
Anne – Salata
Baba – Kebab

Kodumuzu Yazalım

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

< ?php

// MySQL Bağlantı

// join sorgusunu yapılandıralım
$query = “SELECT Aile.Birey, Yiyecek.Yemek “.

“FROM Aile LEFT JOIN Yiyecek”.

“ON Aile.Birey = Yiyecek.Birey”;

$result = mysql_query($query) or die(mysql_error());

// her satırın içeriğini tablo içinde yayınlayalım

while($row = mysql_fetch_array($result)){

echo $row&#91;’Birey’&#93;. ” – “. $row&#91;’Yemek’&#93;;

echo “<br />”;

}

?>

Ekran Çıktısı:

Baba – Biftek
Baba – Kebab
Anne – Salata

İşte gördüğünüz gibi MYSQL LEFT JOIN dedikleri böyle! Sol sutun referanslı sorgu çözümleri de diyebiliriz. Her aile bireyini listeleyerek diğer tabloda adlarının karşılığına gelen yiyecek elemanlarını eşleştirir.Biraz karışık bir konu olsada ileri seviye veritabanı sorgulamalarında ne kadar geçerliliği olduğunun farkına varmışsınızdır umarım..

SQL Delete

 

Veritabanındaki Bilgiyi Silmek

DELETE FROM ifadesi veritabanı tablosundaki kayıtları siler.

Syntax

DELETE FROM tablo_adi WHERE sutun_adi = aranan_deger

Verileri PHP ile sorgulayıp işlemek için mysql_query() fonksiyonu ile sorgu yapılır.Bu fonksiyon MySQL başlantısına sorguyu gönderir.

Örnek

İlk dersimizde “Arkadas” isimli veritabanı tablosunu oluşturmuştuk:

adi soyadi yas
Atilla Atasoy 24
İzzet Norton 28

Şimdiki örneğimiz “Arkadas” tablosundaki soyadi=”Atasoy” kriterine uygun tüm verileri silecek;Görelim:

<?php

$con = mysql_connect(“localhost”,”serpito”,”abc123″);

if (!$con)

{

die(‘Bağlanamadı: ‘ . mysql_error());

}

mysql_select_db(“my_db”, $con);

mysql_query(“DELETE FROM Arkadas WHERE soyadi=’Atasoy’”);

mysql_close($con);

?>

Silme işleminden sonra, tablomuzun son hali şu şekildedir:

adi soyadi yas
İzzet Norton 28

SQL Update

UPDATE ifadesi , database(veritabanı) tablolarını yeniden düzenleme işlemini gerçekleştirir.

Bir Veritabanındaki Veriyi Güncelleme

UPDATE ifadesi veritabanındaki bilgileri düzenler.

Syntax

UPDATE tablo_adi

SET sutun_adi = yeni_bilgi

WHERE sutun_adi = aranan_bilgi

Verileri PHP ile sorgulayıp işlemek için mysql_query() fonksiyonu ile sorgu yapılır.Bu fonksiyon MySQL başlantısına sorguyu gönderir.

Örnek

İlk dersimizde “Arkadas” isimli veritabanı tablosunu oluşturmuştuk:

adi soyadi yas
Atilla Atasoy 24
İzzet Norton 28

Aşağıdaki örnekte bu tablodaki bazı bilgileri güncelleyelim:

<?php

$con = mysql_connect(“localhost”,”serpito”,”abc123″);

if (!$con)

{

die(‘Bağlanamadı: ‘ . mysql_error());

}

mysql_select_db(“my_db”, $con);

mysql_query(“UPDATE Arkadas SET Age = ’25’

WHERE FirstName = ‘Atilla AND soyadi = ‘Atasoy’”);

mysql_close($con);

?>

Güncelleme işleminden sonra “Arkadas” veri tablosunun son hali şu şekildedir:

adi soyadi yas
Atilla Atasoy 25
İzzet Norton 28

SQL Order By

 

ORDER BY sözcüğü ile kayıtlı verileri belirten duruma göre dizilir.

ORDER BY Sözcüğü

Syntax

SELECT sutun_adi(s)

FROM tablo_adi

ORDER BY sutun_adi

Örneği

Örneğimizde “Arkadas” tablosunda bulunan kayıtlı tüm verileri seçer ve “yas” kriterine göre dizer:

<?php

$con = mysql_connect(“localhost”,”serpito”,”abc123″);

if (!$con)

{

die(‘Bağlanamadı: ‘ . mysql_error());

}

mysql_select_db(“my_db”, $con);

$result = mysql_query(“SELECT * FROM person ORDER BY age”);

while($row = mysql_fetch_array($result))

{

echo $row[‘adi’];

echo ” ” . $row[‘soyadi’];

echo ” ” . $row[‘yas’];

echo “<br />”;

}

mysql_close($con);

?>

Kodun çıktısı şu şekildedir:

İzzet Norton 28

Atilla Atasoy 24

Artarak Yada Azalarak Dizelemek

ORDER BY ifadesi ile birlikte; dizilim-belirteci olan ASC ascending(artarak) sözcüğünü kullanırsak , verileri söz dizim kurallarına göre sıralar.(1 den-9 a , “a” dan “z” e)

ORDER BY ifadesi ile birlikte; dizilim belirteci olan DESC (descending-azalarak) sözcüğünü kullanırsak, verileri söz dizim kuralların göre azaralarak sıralar(9da -1 e , “z” den “a” ya):

SELECT sutun_adi(s)

FROM tablo_adi

ORDER BY sutun_adi DESC

Birden Fazla Sütunu Sıralamak

Birden fazla sutunu sıralamak da mümkündür.Sıralama komutu verirken ,ikinci sutun , yanlızca birinci sutun birinci ve kimlik verilerine sahipse kullanılır:

SELECT sutun_adi(s)

FROM tablo_adi

ORDER BY sutun_adi1, sutun_adi2

SQL Where

Where , Belirtilen kritere göre sorgu yapan ve bulunan sonucu seçen (SELECT) ifadedir.

WHERE İfadesi

Belirtilen kritere göre sorgu yapan ve bulunan sonucu seçer.

Syntax

SELECT column FROM tablo

WHERE column operator deger

Aşağıdaki operatörler WHERE ifadesi için gerekli kriterleri belirtmek için kullanılabilir:

Operatör Tanımı
= Eşittir
!= Eşit Değildir
> Büyüktür
< Küçüktür
>= Büyük eşittir
<= Küçük eşittir
BETWEEN arasındadır
LIKE Gibi(kalıp)

PHP ile sorguyu çalıştırmamız için mysql_query() fonksiyonunu çalıştırmamız gerekir.MySQL bağlantısına sorgu ve istek gönderilir.

Örnek

Aşağıdaki örneğimizde “Arkadas” tablosunda adi=’Atilla’ olan satırı bulacak ve yayınlayacaktır;

Görelim:

<?php

$con = mysql_connect(“localhost”,”serpito”,”abc123″);

if (!$con)

{

die(‘Bağlanamadı: ‘ . mysql_error());

}

mysql_select_db(“my_db”, $con);

$result = mysql_query(“SELECT * FROM Arkadas

WHERE adi=’Atilla’”);

while($row = mysql_fetch_array($result))

{

echo $row[adi] . ” ” . $row[‘soyadi’];

echo “<br />”;

}

?>

Kodun Çıktısı şu şekildedir:

Atilla Atasoy

SQL Select

 

SELECT ifadesi veritabanından bilgileri seçer ve kullanıma hazır hale getirir.

Veritabanı Tablosundan Veri Seçmek.

SELECT ifadesi veritabanından bilgileri seçer.

Syntax

1

SELECT sutun_adi(s) FROM tablo_adi

PHP ile sorguyu çalıştırmamız için mysql_query() fonksiyonunu çalıştırmamız gerekir.MySQL bağlantısına sorgu ve istek gönderilir.

Örnek Örneğimizde “Arkadas” tablosundaki tüm verileri seçer.(NOT: * sembolü tablodaki tüm verileri işaret eder.)

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23

< ?php

$con = mysql_connect(“localhost”,”serpito”,”abc123″);

if (!$con){

die(‘Bağlanamadı: ‘ . mysql_error());

}

mysql_select_db(“my_db”, $con);

$result = mysql_query(“SELECT * FROM Arkadas”);

while($row = mysql_fetch_array($result)){

echo $row&#91;adi&#93; . ” ” . $row&#91;’soyadi’&#93;;echo “<br />”;

}

mysql_close($con);

?>

Örneğimizde sorgudan sonra ele alınan veriler $result değişkeni tarafındn tutulur. mysql_fetch_array() fonksiyonu ile kayıtları $result değişkenine dizi halinde verir. mysql_fetch_array() her sorgusunda birer satır okuyarak değişkene gönderir.Böylece while döngüsü sona erdiğinde tablodaki tüm verilerde yayınlanır.Kodun çıktısı aşağıdaki gibi olur:

Atilla Atasoy
İzzet Norton

Sonucu HTML tablosunda Göstermek

Yukarıdaki sonuçları aynı şekilde kullanarak bir HTML tablosunda kullanalım:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

< ?php

$con = mysql_connect(“localhost”,”serpito”,”abc123″);

if (!$con){

die(‘Bağlanamadı: ‘ . mysql_error());

}

mysql_select_db(“my_db”, $con);

$result = mysql_query(“SELECT * FROM Arkadas”);

echo “<strong><table border=’1′>< tr><th>Adı</th><th>Soyadı</th>”;

while($row = mysql_fetch_array($result)){

echo “<tr>”;

echo “<td>” . $row[‘adi’] . “</td>”;

echo “<td>” . $row[‘soyadi’] . “</td>”;

echo “</tr>”;

}

echo “</table>”;

mysql_close($con);

?>

Örneğimizin çıktısı şöyledir:

Adı Soyadı
İzzet Norton
Atilla Akoğlu

sql Insert Komutu

Mysql’de veri tabanını veriler yüklerken INSERT komutunu kullanıyoruz.
Veri tabanımızda kitap adında bir tablo olsun ve tabloda; id,k_adi,yazar,yorum,onay,yayin_evi,baski_no sütunları yer alsın.

Tablomuza veri aktarımı (kaydı) yapmak için aşağıdaki kodları kullanacağız.

1
2
3

INSERT INTO kitap (k_adi,yazar,yorum,onay,yayin_evi,baski_no)

VALUES (Aşk,Elif Şafak,Güzel bir kitap,0,Doğan Kitap,1);

Yukarıdaki komut da id bölümünü almadık veri tabanını verileri eklerken otomatik olarak sayı değerinin artmasını istedik ve ekstar özelliğini auto_increment yaptık. Bu sayede her yeni işlemde otomatik olarak artıyor id bölümü.

SQL Create

 

Bir veritabanı bir veya birden çok tablo içerir.

Veritabanı Oluştur

CREATE DATABASE ifadesi MySQL de veritabanı oluşturur.

Syntax

CREATE DATABASE veritabani_adi

Yukardaki ifade oluşan veritabanından bilgi sorgulaması için mysql_query() fonksiyonu kullanılır.

Bu fonksiyon MySQL bağlantısına istek ve sorgu gönderir.

Örnek

Aşağıdaki örnekte “my_db” adında bir veritabanı oluşturduk:

<?php

$con = mysql_connect(“localhost”,”serpito”,”abc123″);

if (!$con)

{

die(‘Bağlanamadı: ‘ . mysql_error());

}

if (mysql_query(“CREATE DATABASE my_db”,$con))

{

echo “veritabanı oluşturuldu”;

}

else

{

echo “veritabanı oluşturulmadı: ” . mysql_error();

}

mysql_close($con);

?>

Tablo Oluştur

CREATE TABLE ifadesi MySQL veri tablosu oluşturur.

Syntax

CREATE TABLE tablo_adi

(

satir_adi1 veri_tipi,

satir_adi 2 veri_tipi,

satir_adi 3 veri_tipi,

…….

)

CREATE TABLE ifadesi mysql_query() fonksiyonu fonksiyonunun muhattabı olarak yer alır ve sorgularda oluşturulan tablolar incelenir.

Örnek

Aşağıdaki örneğimizde, “adi” , “soyadi” ve “yas” olarak 3 sutunluk bir “arkadas” tablosu oluşturalım:

<?php

$con = mysql_connect(“localhost”,”serpito”,”abc123″);

if (!$con)

{

die(‘Baglamadi: ‘ . mysql_error());

}

// Veritabanı oluştur

if (mysql_query(“CREATE DATABASE my_db”,$con))

{

echo “Veritabanı yaratıldıs”;

}

else

{

echo “veritabanı oluşturulamadı: ” . mysql_error();

}

// my_db veritabanında tablo oluştur

mysql_select_db(“my_db”, $con);

$sql = “CREATE TABLE arkadas

(

adi varchar(15),

soyadi varchar(15),

yas int

)”;

mysql_query($sql,$con);

mysql_close($con);

?>

Önemli: Tablo eklemek için öncelikle bağlanılacak veritabanı seçilmeli.mysql_select_db() fonksiyonu ile veritabanı seçilir..

Not:varchar değeri için veritabanı alanı oluşturduğumuzda alanın maximum karakter uzunluğunu belirtmemiz gerekmektedir. Örnek; varchar(16).

MySQLVeri Türleri

Numerik Veri Türleri
Tanımı
int(size)
smallint(size)
tinyint(size)
mediumint(size)
bigint(size) Yanlızca integer(tamsayı) değeri tutar.Max. karakter genişliği parametre olarak alınır.
decimal(size,d)
double(size,d)
float(size,d) Sayıları kesirleri ile birlikte tutar. Max. karakter genişliği parametre olarak alınır.Ondalık sayı uzunluğu “d” parametresi ile tutulur.

Text Veri Türleri Tanımı
char(size) Sabit bir string uzunluğu tutar(harf, rakam,ve özel karakter).Parantez içinde sabit uzunluk tutulur.
varchar(size) Değişken bir string uzunluğu parametre olarak tutulur(harf, rakam,ve özel karakter).Parantez içinde sabit uzunluk tutulur.
tinytext Değişken bir stringi max.255 karakter uzunluğu ile tutar.
text
blob Değişken bir string I max. 65535 karakter uzunluğu ile tutar.
mediumtext
mediumblob Değişken bir stringi max. 16777215 karakter uzunluğu ile tutar.
longtext
longblob Değişken bir stringi max. 4294967295 karakter uzunluğu ile tutar.

Tarih Veri Türleri Tanımı
date(yyyy-mm-dd)
datetime(yyyy-mm-dd hh:mm:ss)
timestamp(yyyymmddhhmmss)
time(hh:mm:ss) Tarih ve zaman değerlerini tutar.

Karışık Veri Türleri Tanımı
enum(value1,value2,ect) ENUM ENUMERATED listesinin kisaltılmış halidir. () içinde 65535 değer tutabilir.Parantez içine geçersiz bir değer girildiğinde default boş değer atanır.
set SET, ENUM a benzer. Farkli olarak 64 değerlidir

Primary Keys ve Auto Increment Alanları

Her tabloda primar key(Birincil Anahtar) alanı bulunmalıdır.

Primary key tablodaki herhangi bir satıra tek bir kimlik verir.Her primary key tabloda da tek olmalıdır. Ayrıca primary key alanı kesinlikle boş “null” olamaz.Çünkü database sunucusu kayıtları almak için primary keyden değer isteyecektir.

Primary key alanı herzaman indexlenir.Bu istisnasız bir kuraldır!

Aşağıdaki örneğimizde , personID alanını primaryu key olarak tanımlıyoruz.Görelim;

Örnek

$sql = “CREATE TABLE person

(

personID int NOT NULL AUTO_INCREMENT,

PRIMARY KEY(personID),

FirstName varchar(15),

LastName varchar(15),

Age int

)”;

mysql_query($sql,$con);

SQL Connect

 

MySQL Veritabanına Bağlanma

Uygulamanız sırasında veritabanına erişmek ve bilgi almak için öncelikle veritabanına bağlanmanız gerekir.

PHP dilinde ,bu olay mysql_connect() fonksiyonu ile gerçekleşir.

Syntax

mysql_connect(sunucuadı,kullanıcıadı,şifre);

Parametre Tanım
Sunucuadı Opsiyonel. Bağlanılacak sunucuyu gösterir.Değer verilmezse default ayarı “localhost:3306” dır.
kullanıcıadı Opsiyonel. Bağlantı için bir kullanıcı adı tutar.
şifre Opsiyonel. Bağlantı için gereken şifreyi belirtir. Default değeri “” dir.

Not: Öncelikle türkçe karakterleri anlaşılırlığı sağlasın diye yazdığımı belirtmeliyim.PHP ve MySQL kodları diger tüm programlama dilleri gibi türkçe karakter içermemelidir.

Örnek

Aşağıdaki örneğimizde bağlantıyı bir değişkende ($con) tutuyoruz.. “die” bölümü bağlantı iptal edilirse kodun çalışmasını tutar:

<?php

$con = mysql_connect(“localhost”,”serpito”,”abc123″);

if (!$con)

{

die(‘veritabanına bağlanamadı: ‘ . mysql_error());

}

//işletilecek kod

?>

Bağlantıyı Kapatmak

PHP kodu işlemi tamamladığı anda başlantı kapanır. Bağlantıyı kapamak için mysql_close() fonksiyonu kullanılır.

<?php

$con = mysql_connect(“localhost”,”serpito”,”abc123″);

if (!$con)

{

die(‘Veritabanına bağlanamadı: ‘ . mysql_error());

}

// işletilecek kod

mysql_close($con);

?>

SQL Giriş

PHP , esnek bir web yazılım dilidir . Günümüzün gelişmiş birçok yazılım dilleri gibi birden fazla veritabanı (database) ile uyumlu halde çalışabilmektedir . Türkiye şartlarında düşünürsek , yazılım sektöründe PHP ile akla gelen ilk veritabanı MySQL olduğu için , ayrıca ORACLE , SQL ve diğerlerine nazaran PHP ile daha kullanışlı görünen veritabanı olduğu için , MYSQL derslerini yayınlamayı uygun buldum. MySQL genellikle PHP ile birlikte kullanılan ücretsiz bir veritabanı sunucusudur.

MySQL Nedir?

MySQL bir veritabanıdır.Veritabanı , bilgileri saklayan yapıları tanımlar.

Bir veritabanında , HTML tabloları gibi satır, sütun içeren tablolar bulunur.

Veritabanı , kategorilere göre veri saklamak için en uygun sistemdir. Bir şirketin örnek bir veritabanında “Müşteri” , “Ürün” , “Çalışanlar” ve “Sipariş” tabloları bulunur.

Veritabanı TablolarıOrtalama bir veritabanı genellikle bir veya birden fazla tablo içerir.Her tablo (“müşteri” veya “Sipariş” gibi) isimlendirilir. Her tablo veri kayıtlarını saklar.Aşağıda “insanlar” adında örnek bir tablo yaptık, inceleyelim :

Soyisim isim adres Şehir
Veli Uyanık Çankaya 10/2 Ankara
Cengiz Hayıf Cebeci 10/23 Ankara
Galip Bölük Strrazburg 20 Ankara

Sorgular

Sorgu, bir soru veya istek anlamındadır.

MySQL kayıtlarında , veritabanına yaptığımız sorgularda özel bilgileri, bir kayıtlı tablo kümesine sorgu yapabiliriz.

Aşağıdaki sorguya bakalım:

SELECT Soyisim FROM insanlar

Bu sorgu insanlar tablosunudaki Soyisim satırını bulur ve kayıtlı verileri döndürür:

Soyisim
Veli
Cengiz
Galip

MySQL Veritabanı İndirin

MySQL veritabanı sunucunuz PHP ile birlikte yüklememişse , ki PHP Kurulum yazımda kullanabileceğiniz PHP Web sunucuları hakkında detaylı bilgiler bulunur , aşağıdaki linkte , MySQL resmi web sitesinden veritabanınızı indirin: http://www.mysql.com/downloads/index.html