MySQL’de Üç Tabloyu Tek Sorguda Birleştirmek

Bazen aynı anda üç tablodaki verileri kullanmamız gerekebilir. Örneğin aşağıdaki şekilde üç tablomuz olsun:

veriler

Bu tablolardan “kullanici” kullanıcı bilgilerini saklıyor, “gruplar” ise kullanıcıların üye olabileceği grupları. “kullanici_grup” tablosu ise bu ikisi arasında bir köprü oluşturuyor. Yani hangi kullanıcının hangi grubu seçtiğini gösteriyor. Şimdi bu üç tabloyu kullanarak kullanici – grup şeklinde ekrana yazdıralım.

Kullanacağımız kod:

SELECT k.kullanici, g.grup
FROM kullanicilar k, gruplar g, kullanici_grup kg
WHERE kg.kullanici_id = k.id AND kg.grup_id = g.id; 

SELECT’ten hemen sonra almak istediğimiz verileri belirttik. FROM’dan sonra kullanacağımız tabloları belirttik. Her tablo için bir isim belirttik. Örneğin yukarıdaki işlemde tüm k’lar “kullanici” tablosunu belirtiyor. Bunu MySQL’in anlaması için şeklinde belirttik.

WHERE’den sonra iki tablo arasında köprü olan kullanici_grup tablosu ile eşleşen kullanici_id ve grup_id leri belirttik. Böylelikle MySQL sunucusu üç tablodan tek bir sorgu sonucu çıkartacaktır.

MySQL’de Kullanıcıya Yetki Vermek (Grant)

MySQL Yönetici ekranında bir kullanıcı ve bir veritabanı oluşturup bu kullanıcı için veritabanında tam yetki verelim.

Öncelikle veritabanını oluşturuyoruz:

CREATE DATABASE veritabani;

Ve bu veritabanında yetkilendireceğimiz bir kullanıcı oluşturuyoruz:

CREATE USER 'kullanici'@'localhost' IDENTIFIED BY 'sifre';

Yukarıda localhost sunucu adresidir ve kullanıcının bağlanabileceği sunucuyu belirtir. Eğer tüm sunucular için yetki verilecekse ‘kullanici’@’%’ olarak değiştirmelisiniz.

Şimdi bu kullanıcıya yarattığımız ‘veritabani’ isimli veritabanı üzerinde tam yetki verelim. Unutmayın yetki verebilmek için MySQL Yönetici şifresi ile giriş yapmış olmanız gerekiyor.

GRANT ALL ON veritabani.* TO 'kullanici'@'localhost';

Yukarıdaki kodu çalıştırdığınızda ‘veritabani’ üzerinde kullanıcı tam yetkilendirilmiş olacaktır.

Diğer tüm yetkiler ve kullanımlar için (İngilizce);
http://dev.mysql.com/doc/refman/5.1/en/grant.html

MySQL Komutları

Açık kaynak veritabanı sistemi MySQL ile anlaşabilmek için çeşitli komutlar kullanmaktayız. Bunlar bir veritabanı yaratmaya, silmeye, tablo oluşturmaya, seçmeye, düzenlemeye ve silmeye yaramaktadır. Şimdi bunlardan en çok kullanılanları ve en önemlileri burada sizlerle paylaşalım.

Öncelikle bir veritabanı (database) yaratmak için kullandığımız CREATE komutu. Bu komut, eğer yetkiliyseniz belirtilen isimde veritabanı yaratmanızı sağlar. Veritabanı, tabloları kapsayan en büyük depolama birimidir.

CREATE DATABASE veritabani;

Bir veritabanı, içindeki tabloları ve tüm bilgilerini silmek içinse DROP DATABASE’yi kullanmaktayız. Yarattığımız “veritabani” isimli veritabanını silmek istersek:

DROP DATABASE veritabani;

Komutu ile bu işlemi gerçekleştiririz. Veritabanının küçük depolama birimleri olan tabloları da CREATE ve DROP ile oluşturur, fakat bu kez DATABASE yerine TABLE deyimi kullanırız.

CREATE TABLE tabloadi (
'id' INTEGER(5) UNSIGNED NOT NULL AUTO_INCREMENT,
`kategori` INTEGER(4) UNSIGNED NOT NULL,
`isim` VARCHAR(45) NOT NULL,
`detaylar` TEXT NOT NULL,
PRIMARY KEY(`id`)
)
TYPE = MYISAM;

Burada parantez içerisinde tablomuzu oluşturan sütunlar ile ilgili bilgileri gireriz. Tek tırnak içindekiler sütun adlarıdır. Sonraki kullanılanlar ise o sütunun özellikleri. INTEGER(Boyut) sayısal bir değer, VARCHAR(boyut) ya da TEXT ise alfasayısal bir değeri ifade eder. DOUBLE ise ondalıklar ve negatifleri de kullanabildiğimiz sayısal ifadelerdir. NOT NULL, sütunun asla tanımsız olamayacağını, AUTO_INCREMENT her yeni kayıtla değerin artacağını (bu işlem otomatik yapılır), PRIMARY KEY hangi anahtarın öndeğer olduğunu (öncelikli) belirtir. En sonda kullanılan MyISAM (ya da InnoDB) ise tablo türünü belirtmemize yarar. Tabloyu silmek içinse DROP kullanılır:

DROP TABLE tabloadi;

Ve şimdi nasıl kayıt ekleyip, düzenlediğimizden ve sildiğimizden bahsedelim. Kayıt eklemek için INSERT INTO deyimini kullanırız.

INSERT INTO tabloadi (sutun1, sutun2) VALUES('deger1', 'deger2');

Burada ilk parantezde sütun adları, VALUES() içerisinde ise o sütuna karşılık gelecekleri yazdık. Eğer tüm sütunları içeren bir komut kullanıyorsanız sütunların sırasına göre yazabilirsiniz.

INSERT INTO tabloadi VALUES('deger1', 'deger2');

Bir kayıttaki değeri UPDATE komutu ile değiştiririz:

UPDATE tabloadi SET sutun1='deger1', sutun2='deger2' WHERE kosul1='kosul2';

Buradaki koşul belirtilirken klasik IF – ELSE deyimlerinde olduğu gibi eşleştirmelere gidilir. Mesela id anahtarı 4 olan veride güncelleme yapacaksak koşulumuz id=’4′ olacaktır. Birden fazla koşul belirtiyorsak ve için AND, veya için OR kelimelerini aralarına getiririz, örneğin id=’4′ AND kategori=’2′ gibi.

Bir kaydı silmek için koşul belirterek aşağıdaki komutu kullanırız:

DELETE FROM tabloadi WHERE sutun1='kosul';

Eğer tüm kayıtları sileceksek WHERE ve sonrasını yazmayarak bu işlemi yaparız. Böylece o tablodaki tüm kayıtlar silinecektir.

Kayıtları seçmek, listelemek içinse SELECT komutu kullanırız. Bu kodun kullanımı aşağıdaki gibidir:

SELECT sutun1, sutun2 FROM tabloadi WHERE sutun1='kosul' ORDER BY sira LIMIT 0, 10;

Belirtilen komuttaki SELECT sutun1, sutun2 hangi sütunların seçime dahil edileceğini belirler. WHERE ile hangi koşula bağlı kayıtları listeleyeceğimizi anlatırız. ORDER BY sira, kayıtların neye göre sıralanacağını. Buraya bir sütun adı gelir. Eğer sayısal ise küçükten büyüğe, ORDER BY sutun1 DESC dersek büyükten küçüğe. Alfasayısal ise A’dan Z’ye, DESC varsa sonunda Z’den A’ya sıralar. LIMIT 0, 10 olarak belirttiğimiz ise kaç kayıt listeleneceği ve nerden başlanacağı. Burada ilk kayıttan başlanıp 10 kayıt listelenir. LIMIT 10, 20 dersek. 10. kayıttan başlar ve 20 tane sıralar.

Sevgilerimizle…
Venus Programlama