ilkvahiy.net ilkvahiy.net'i Tavsiye Edin ilkvahiy.net Türkçe ilkvahiy.net in English
Kayıt Ol Portal Forum Video Gruplar Bloglar Albümler Etiketler İletişim Yardım Üye Listesi iTrader Takvim Arcade Arama Bugünkü Mesajlar Bütün Forumları Okunmuş Kabul Et
 
 
İslami Sorular ve Cevapları | Namaz | Evlilik | Üniversitelerimiz
Sitemiz Hakkında Sıkça Sorulan Sorular ve Cevapları

Geri git   ilkvahiy.net > Bloglar > admin
Şifremi Unuttum Kayıt Ol



ilkvahiy.net'e Neden Kayıt Olmalıyım ? - ilkvahiy.net Radyo - Bayan Bölümüne Giriş - Erkek Bölümüne Giriş - Namaz Vakitleri - Dost TV
Bu Kaydı Derecelendir

SQL Yapısal Sorgulama Dili

Gönderildi: admin tarafından 31-07-2008 Saat 04:01
Bu makale PHP ve MySQL'e yeni başlayan ve orta düzeyde diyebileğimiz kullanıcılara SQL komutlarını anlatmak için yazılmıştır.Kendini iyi bir programcı olarak görenlerin bu makaleyi okumasını tavsiye etmem çünkü bunları zaten biliyorsunuzdur.




SQL - Structured Query Language (Yapısal Sorgulama Dili) -I-

SQL Bir veritabanı sorgulama ve Yönetim Dilidir. Hemen hemen tüm ilişkisel veritabanı sistemleri SQL'i anlama yeteneğine sahiptir. İngilizceye olan yakınlığı bu dili veritabanı endüstrisinde hatrı sayılır bir yere getirmiştir. Her firma SQL'i kendine uygun bir şekle sokarak bazı eklentiler yaparak kendi veritabanı sistemlerinde kullanmaktadırlar. Mesela Interbase için ISQL Oracle için PL/SQL vs..Ancak hangi ilişkisel veritabanını kullanırsanız kullanın Standart SQL bu sistemler tarafından sorunsuz çalışacaktır.Çünkü SQL bir ANSI ve ISO standartıdır. SQL bilinenin aksine bir Programlama dili değildir. SQL veritabanı sorgulama ve yönetim dilidir. SQL komutları temelde iki alt grupta ele alınır.

  • DDL - Data definition Language (Veri tanımlama dili)
  • DML - Data manipulation Language (Veri İşleme dili)

Bu yazı dizisi PHP ve MySQL'e yeni başlayan ve orta düzeyde diyebileğimiz kullanıcılar içindir.

DML - Data manipulation Language (Veri işleme Dili)

- SELECT
- INSERT
- UPDATE
- DELETE

SELECT KOMUTU
Select komutu kullandığımız tablodan bizim belirlediğimiz kriterlere göre kayıtları seçer. Hangi alanlar görüntülenmek isteniyorsa o alanların ismi araya virgül koyularak yazılır.

SELECT name,surname FROM employee;
Bu sorgu deyimi employee tablosundaki name ve surname alanlarındaki tüm verileri görüntüler.

SELECT * FROM employee;
Eğer tablodaki tüm alanların görüntülenmesini istiyorsak * karakterini kullanırız.

Çoğu zaman tablodaki tüm kayıtları değilde bizim belirlediğimiz kriterlere göre görüntülenmesini isteriz. Mesela ismi'S' ile başlayan, adı Hatice olan, maaşı 1.000.000.000 dan az olan gibi. Bu durumda WHERE deyimini de gerekli operatörle birlikte kullanarak sorgumuza eklememiz gerekecektir.

PHP- Kodu:
SELECT name,surname,bolum FROM employee WHERE name='Sedat';
SELECT FROM employee WHERE maas 1000000000 
Eğer sorgusu yapılacak anahtar değer bir string ise o zaman ' ' yada " " içine almamız gerekecektir. Sayısal ifadeler için gerekli değildir.

WHERE ile kullanabilecek operatörler
< Küçük
> Büyük
>= Büyük veya eşit
<= Küçük veya eşit
!< Küçük değil
!> Büyük değil
= Eşit
<> veya != veya # Eşit değil

Birden fazla kritere göre sorgu yapmak istediğimizde AND,OR,NOT operatörleri Sorgu içinde kullanılmalıdır.

PHP- Kodu:
SELECT FROM employee WHERE cinsiyet='K' AND maas 600000000 AND bolum='Bilgi İşlem'
Yukarıdaki sorgu bilgi işlem bölümünde çalışan maaşı 600.000.000 dan fazla bayan personel yada personellerin tüm versisini görüntüler.

PHP- Kodu:
SELECT from employee WHERE bolum='Satın Alma' OR bolum='Bilgi İşlem'
Yukarıdaki sorgu bölümü satın alma yada bilgi işlem olan personel yada personellerin tüm versini görüntüler.

Sorgularımızda bazen verilerin artan yada azalan bir sıralamada listelenmesini isteyebilirsiniz. O zaman ASC ve DESC ifadelerini kullanmamız gerekecektir.

PHP- Kodu:
SELECT FROM employee ORDER BY tarih DESC
Yukarıdaki sorgu kayıtları tarih alanı baz alınarak azalan bir sırada listelenecektir.

PHP- Kodu:
SELECT FROM employee ORDER BY maas ASC
Yukarıdaki sorgu kayıtları maaş alanı baz alınarak artan bir sırada listeleyecektir.
PHP- Kodu:
SELECT FROM employee WHERE maas >= 900000000 AND bolum ='Bilgi İşlem' ORDER BY maas DESC
Yukarıdaki sorgu ifadesi bilgi işlem de çalışan maaşı 900.000.000 a eşit veya fazla olan personeli maaş bilgisi baz alınarak azalan sırada listeler.

Buraya kadar yazdıklarımı eğer usta bir programcı okuduysa şöyle bir eleştiri de bulunabilir. Performans açısından veritabanında bolum alanına Bilgi işlem,satın alma,halkla ilişkiler gibi bellekte fazla yer kaplayacak stringlerin bulunması iyi olmayabilir. Bu durumda MySQL de Enum Tipi tanımlanarak her bölüme bir numara verilebilir.

Tekrarlı kayıtları bir seferde listelemek :

Bazen kullanıdığımız sorgu aynı kaydı birden fazla listeleyebilir.
Bu birebir aynı olan kayıtları bir kez listelemek istiyorsak DISTINCT deyimini kullanabiliriz.

PHP- Kodu:
SELECT bolum FROM employee WHERE maas 50000000
Sorgusu sonucunda mesela bilgi işlem bolumunda çalışan ve maaşı 500 milyondan fazla olan kişiler buluancağı için sorgu sonucunda bilgi işlem bölümü bir den fazla listelenecektir.Bunu önlemek için Sorgu aşağıdaki gibi düzenlenebilir.
PHP- Kodu:
SELECT DISTICT bolum  FROM employee WHERE maas>500000000


Eğer bir kriter belirli bir aralığın içinde yer almasını isterseniz BETWEEN operatörü kullanbilirsiniz.

PHP- Kodu:
SELECT FROM employee WHERE maas BETWEEN 600000000 AND 2000000000
Yukarıdaki sorgu maaşı 600 milyon ile 2 milyar arasındaki personellerin tüm bilgisini görüntülecektir.
PHP- Kodu:
SELECT FROM employee WHERE is_bas_tar BETWEEN {1980-06-01} AND {2002-06-01}; 
Yukaridaki sorgu ise işe başlama tarihini baz alarak iki tarih arasındaki değerleri sorgulayacaktır. Ancak burada Küme parentezleri dikkatinizi çekmiş olabilir. Eğer sorgu yapacağımız alan bir tarih (Date) tipinde ise küme parentezlerini kullanıyoruz.

AVG(),SUM(),MIN(),MAX(),COUNT()
PHP- Kodu:
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ünütüler. Ancak AS enazmaas eklentisi ile tabloda var olmayan harici bir alan oluşturuyoruz.Kullanmazsak sorgu yine çalışırdı ben yer gelmişken bu konuyada yer vermek istedim sadece.

PHP- Kodu:
SELECT MAX(maasFROM employee WHERE bolum='Bilgi İşlem'
Bu sorgunun ne yaptığını sanırım tahmin ediyorsunuzdur

PHP- Kodu:
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. Eğer bir alandaki tüm kayıtların toplamını bulmamız gerekirse SUM() fonksiyonu işimize yarayacaktır.

PHP- Kodu:
SELECT AVG(yasFROM 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.

PHP- Kodu:
SELECT COUNT(*) fROM employee
Yukarıdaki sorgu tablodaki kayıt sayısını görüntüler;

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

PHP- Kodu:
SELECT COUNT(*) FROM employee WHERE maas<50000000 AND medeni_hal='evli' AND bolum='Basın Yayın' 
Bazen sorgu kriterleri bir veri kümesi ile tanımlanır ve bu veri kümesi içinde aradığımızın değerin var olup olmamasına göre görüntülenmesini isteyebiliriz.

Örneğin yaşı 20,21,22,23 olmayan personelleri listelemek için IN operatörünü kullanabiliriz.
PHP- Kodu:
SELECT FROM employee WHERE yas NOT IN (20,21,22,23); 

Gruplandırılmış veriler üzerinde işlem
Şirektimizde ki her departmanda çalışan bayan personel sayısını bulmak ve bolu isimlerine göre gruplandırmak istersek : örneğin Bilgi İşlem 10 halkla ilişkiler 3 vs..
O zaman GROUP BY foksiyonunu kullanmamız gerekecektir.
PHP- Kodu:
SELECT bolum,count(*) FROM employee WHERE cinsiyet='K' GROUP BY bolum
Bu sorgudan sonra her bölümde kaç adet bayan personelin çalıştığı listelenecektir.

PHP- Kodu:
SELECT count(*),cinsiyet,AVG(maasFROM employee GROUP by cinsiyet
Yukarıdaki sorgu şirketimizde kaç bayan ve kaç erkek personel olduğunu ve bunların ortalama maaşlarını görüntüleyecektir.Çıktı aşağıdaki gibidir.
count( * ) cinsiyet AVG( maas )
6 K 888333333.3333
8 E 1218750000.0000
Eğer sorgumuzu ;

PHP- Kodu:
SELECT count(  *  )  AS kisicinsiyetAVGmaas )  AS ortalama FROM employee GROUP  BY cinsiyet
Gibi değiştirdiğimizde sonuç tablomuz
Kisi cinsiyet Ortalama
6 K 888333333.3333
8 E 1218750000.0000

Şeklinde değişecekti.

Bazen verileri hem gruplandırmak hemde bu gruplandılmış veriler üzerinde bazı kriterlere göre seçim yapmak zorunda kalabiliriz.

Mesela en yüksek maaşın 1.000.000.000 ın üzerinde olan bölümlerde çalışan erkek personelin sayısını isteyebiliriz.
PHP- Kodu:
SELECT count(  *  ) , bolum
FROM employee
WHERE cinsiyet 
=  'E'
GROUP  BY bolum
HAVING MAX
maas )  > 1000000000 
HAVING gruplandırılmış veriler üzerinde işlem yapar ve mutlaka min() max(),count(),SUM(),AVG() vs.. ile birlikte kullanılması gerekir. Dolayısıyla SELECT + GROUP BY ifadelerinin kullanılmadığı sorgularda HAVING kullanmak mantıksızdır. Kullanıdığınız da zaten bir hata mesajı alırsınız.

Şimdilik Bu kadar. Gelecek makalemde Birden fazla tablonun ilişkilendirilerek sorgulanması ve DDL ile mevcut tablonun yapısını değiştirmek için kullanacağımız fonksiyonları açıklamaya çalışacağım.
Gönderildi Web Tasarım, Mysql
Yorumlar 0 Blog Kaydını E-Posta ile Gönder
Toplam Yorum 0

Yorumlar

 
Toplam Trackback 0

Trackbacks

Sitemiz vBulletin Version 3.8.0 Beta 3 Kullanmaktadır.
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0
Copyright © 2007 - 2008 ilkvahiy.net


Sitemizde Yazılan Yazılardan ilkvahiy.net Ekibi Sorumlu Değildir. Herkes Kendi Yazdıklarından Sorumludur.
Bu Site Bir Flört Sitesi Değildir !!! Erkek-Bayan İlişkilerinde Hududu Aşanlar Direk Olarak Siteden Atılır.
Sitemizde Crack,Warez,Serial,Keygen vs. gibi tüm yasadışı içerikleri paylaşmak yasaktır.
Reklam, Flood, Spam, Argo, Küfür Siteden Atılma Sebepleridir.

Gizlilik ve Güvenlik | Hakkımızda | Logolarımız | Bizimle Çalışmak İster misiniz ? | Link Değişim
ilkvahiy.net'e Reklam Ver | Şikayetlerinizi Bildirin | Sitemizden Atılma Sebepleri