SQL Yazı Dizim. Bu Yazıda SQL’i en baştan alarak örnekler ile anlatılmaya çalışılmıştır. Bölüm 1 bana aittir, Bölüm 2 ise Gökhan Yılmaz ile birlikte yazdık.

BÖLÜM1

Bu ay ve bundan sonraki birkaç ay boyunca hazırlayacağımız dosya konumuza SQL’dir. Konunun uzunluğu nedeniyle 5 parçaya böldüğümüz SQL’i toplam 5 sayıda anlatmayı planlıyoruz. Yaptığımız plana aşağıdadır. Plan konusunda sizden gelen istek-önerilere göre değişiklik yapmamız mümkündür.

Dosya konumuzun mesleki anlamda yararını görmeniz dileğiyle.

1.Bölüm-1.Sayı

  • SQL Nedir? Database Nedir? Quary nedir?
  • SELECT – INSERT INTO –UPDATE-DELETE kavramları ve örneklerle açıklanması

2.Bölüm

  • JDBC nedir, ODBC nedir? Farkları?
  • Örnek bir JDBC bağlantısı ve açıklanması
  • Örnek bir JAVA-SQL bağlantı uygulaması
  • Örnek bir PHP-SQL bağlantı uygulaması

3.Bölüm

  • SQL Advanced (İleri SQL)

4.Bölüm

  • SQL Function (SQL Fonksiyonları)

5.Bölüm

  • SQL Quiz (SQL Testi)

         

Bu yazı dizisinde http://www.w3school.com adresinde ki SQL makalelerinden yararlanılmıştır.

SQL Yazı Dizisi 1

Bu yazı ile SQL’e Giriş yapıp, SQL ile ilgili tanımlara bakacağız sonrasında ise başlıca SQL komutları inceleyeceğiz.

SQL Nedir? 

SQL; Verileri kaydetmek için kullandığımız bir veritabanından; bilgi almaya veya veritabanını güncellemeyi bazı komutlar sayesinde yapan sistemdir. Birçok veritabanında veriler tablolar halinde kaydedilir. SQL ile şartlar ve koşullara göre bu verilerin tamamını veya bir kısmını alabiliriz veya değiştirebiliriz. SQL bir dünya standardı olup birçok DB(Database-Veritabanı) ile uyumlu çalışabilmektedir. SQL ile sadece bilgi almak değil aynı zamanda DB ile ilgili (tablo oluşturma vb) işlemlerde yapılabilmektedir.

Veritabanı Nedir?

İşlenmiş veya işlenmemiş verilerin ortak özelliklerine göre tablo halinde tutulduğu bilgi merkezidir. Aşağıdaki tabloda bir veritabanı örneği görebilirsiniz.

Örnek bir DB Tablosu (Tablo ismi: Kisiler)

id ismi Soyadi Adresi Sehri
1 Ahmet Müngen Fırat Üniversitesi Elazığ
2 Kübra Önkür Diyarbakır Diyarbakır
3 Gökhan Yılmaz Cumhuriyet Mahallesi Trabzon
4 Mehmet Aslantas Sürsürü mahallesi Elazığ

Not: Dosya Konumuzun 1.bölümünde ki tüm örnekler bu tablo üzerinden uygulanacaktır.

Query Nedir?

SQL komutları aracılığı ile yazdığımız komutlara Query nedir. Bu komutların DB’ye uygulanması durumunda komutta ifade ettiğimiz işlem yapılır. SQL komutları gibi Query’lerde Standarttır. Nerdeyse Tüm DB’lerde ve Yazılım dillerinde aynıdır değişmez ve aynı işlevi görür.

1.Bölüm’de göreceğimiz dört ana komut vardır.

  • SELECT – Veritabanından bilgi almak-çekmek-kopyalamak için kullanılır
  • UPDATE – Veritabanını güncellemek için kullanılır
  • DELETE – Veritabanından bir veya birden fazla satırı silmek için kullanılır
  • INSERT INTO – Veritabanına yeni bir satır eklemek için kullanılır

Üsteki Komutlar konu devam ettikçe ayrıntılı örneklerle açıklanacak.

 SELECT

Bu komut ile tablomuzdaki bazı değerleri almamıza yarar.  Aldığımız değerler bir tablo parçacığı olacağı için yine tablo halinde alınır. Yani SELECT ile tablomuzdaki isimler sütunundaki tüm değerli al diyeceğiz, bu işlemin sonucu yine bir tablo olarak döndürülecektir.

SELECT * FROM tablo_ismi

Bu Query’in anlamı: ismi geçen tabloda bütün satır ve bütün sütunları al anlamına gelir. “*” her şey demektir.

SELECT Sutun_ismi FROM tablo_ismi

Bu Örnekte ise, tablo_ismi isimli tablodan sutun_ismi  adlı sütundaki tüm değerli al demek oluyor.

ÖRNEK;

SELECT Soyadi FROM Kisiler

Soyadi
Müngen
Önkür
Yılmaz
Aslantaş

SELECT Distinct

Select komutu verilerin tamamını seçiyordu Select Distinct ise select’e çok benzer ama ondan ayrı olarak tek yaptığı şey, alından sütundaki değerlerde  aynı olan verilerden sadece biri kalıyor diğerleri siliyor. Yani tabloda 2 aynı şehirden insan varsa ve select ile şehirleri istediğimizde aynı şehrin ismini sadece 1 kere getirir.

Örnekler

SELECT DISTINCT Sehri FROM Kisiler

Sehri
Elazığ
Diyarbakır
Trabzon

 WHERE

Query’lerde en çok kullanılan komuttur. Tablo’dan bilgi çekerken şart anlamı ekler.

Örnekler

SELECT Sehir FROM Kisiler Where Soyadi=’Önkür’

Bu örnekte Kişiler Tablosundan Soyadi sütunundaki değeri  “Önkür” olan tüm satırları al demekteyiz.

Sehri
Diyarbakır

Örnekler

SELECT * FROM Kisiler WHERE Sehri=’Elazığ’

Bu örnekte Şehri Elazığ olan Kişiler Tablosundaki tüm verileri al dedik.

id ismi Soyadi Adresi Sehri
1 Ahmet Müngen Fırat Üniversitesi Elazığ
4 Mehmet Aslantas Sürsürü mahallesi Elazığ

NOT: Where’den sonra yaptığınız şart cümlelerinde üsteki örnekteki görüldüğü üzere Elazığ veya Önkür gibi değişkenleri ‘ ‘ arasına almanız gerekmektedir.

WHERE komutunda Kullanılabilecek diğer işlemler

İşlem

Açıklama

= Eşittir
<> Eşitdeğildir
> Büyüktür
< Küçüktür
>= Büyük veya Eşittir
<= Küçük veya Eşittir
BETWEEN İlgili değerlerin arasındadır
LIKE Kalıba benzeyen
IN Eğer tam değeri biliyorsanız ve en az 1 sütün döndürmek istiyorsanız kullanılır

Not: Bazı SQL versiyonlarında <> komutu şöylede yazılabilir !=

İleride Bu Komutlar Örnekler ile anlatılacaktır.

AND OR

“And” ile şart cümlesine “or” ile ise “veya” anlamı verilir.

SELECT * FROM Kişiler WHERE ismi=’Ahmet’ AND Soyadi=’Müngen’

Bu Query’de ismi “Ahmet” ve Soyadi “Müngen” olan bir sütun bulduk

id ismi Soyadi Adresi Sehri
1 Ahmet Müngen Fırat Üniversitesi Elazığ

Örnekler

SELECT * FROM Kişiler WHERE ismi=’Ahmet’ OR Soyadi=’Yilmaz’

Bu Query’de ismi “Ahmet” veya Soyadi “Yılmaz” olan bir sütun bulduk

id ismi Soyadi Adresi Sehri
1 Ahmet Müngen Fırat Üniversitesi Elazığ
3 Gökhan Yılmaz Cumhuriyet Mahallesi Trabzon

NOT: and ve or birlikte de kullanılabilir

Üsteki bölümde SQL’den bilgi almak için kullandığımız yöntemler varken bu bölümden itibaren SQL’e bilgi eklemek-güncelleme-silme işlemleri ile ilgili bilgiler bulacaksınız.

INSERT INTO

Tabloya yeni girdi(satır) eklemek için kullanılır. Birkaç değişik şekilde kullanılabilir.

1)Yeni Satır Oluşturma

INSERT INTO table_name VALUES (value1, value2, value3,…)

Üsteki Örnekte Tabloda yeni bir satır oluşturup satırın değerlerini soldan sağa value1-value2 diye verdik.

2)Yeni Satır oluşturup belli sütunları doldurma

INSERT INTO table_name (column1, column2, column3,…) VALUES (value1, value2, value3,…)

Bu Örnekte ise oluşturduğumuz yeni satırda, column1 olan sütün isminin değerini value1, column2 olan sütün ismini değerini value2 … olarak vererek oluşturduk

ÖRNEK

INSERT INTO Kisiler (ismi, Soyadi, Adresi,Sehri) VALUES (‘Fatih’, ‘Orhan’, Üniversite Mahallesi’,’Elazig’)

Örnekte Kisiler tablosuna ‘ismi’ sütununa ‘Fatih’ , ‘Soyadi’ sütununda ‘Orhan’ , Adresi sütununa ‘Üniversite mahallesi’,  ‘şehri sütununa’  ise ‘Elazığ’ yazdığımız yeni bir satır oluşturduk.

Yeni Tablomuzun Görünümü şu haldedir;

id ismi Soyadi Adresi Sehri
1 Ahmet Müngen Fırat Üniversitesi Elazığ
2 Kübra Önkür Diyarbakır Diyarbakır
3 Gökhan Yılmaz Cumhuriyet Mahallesi Trabzon
4 Mehmet Aslantas Sürsürü mahallesi Elazığ
5 Fatih Orhan Üniversite Mahallesi Elazığ

ID Hakkında Önemli Not: MySQL ve diğer bazı SQL’ler satırların karışmaması için bir sütundaki değerleri “Primary Key” olarak atarlar ve bu key diğer satırlardaki keylerden farklı olmak zorunda olur. Genelde bu görevi Satır ID’si olarak tanımlanabilecek ID yapar. ID’ye bilgi girilmez, ID “Auto Increment” olarak ayarlanır, yani yeni satır giriş yapıldığında otomatik 1 artar böylece diğer satırlardaki id’lerden farklı ve yegâne(eşi benzeri olmayan) bir ID atanmış olur. Auto Increment özelliğinin nasıl atandığını daha sonra anlatacağız.

Not2; Birinci tipten insert into yaparken boş satır olması ve satırın NULL alabilir özelliği bulunmazsa insert into işleminde hata olacaktır.

Not3; ikinci tip insert into yaparken satır NULL alabiliyorsa, satır’a herhangi bir şey atanmadan da insert into yapılabilir.

UPDATE

Tabloya yeni satır açmak yerine satırı güncellememiz gerekebilir. Satırın bilgilerini alıp yeni bilgiler ekleyip yeni bir satır yapıp eski satırıda silmek de bir yöntem olsada, o yönteme göre update çok daha hızlı bir yöntemdir.

UPDATE table_name SET column1=value, column2=value2,… WHERE some_column=some_value

Üsteki komut: Some_column sütününü değeri some_value  olduğu satırlarda Column1 sütününün değerini value yap demek

ÖRNEK:

UPDATE Kisiler SET Address=’Bostancı Mahallesi’, City=’İstanbul’ WHERE ismi=’Ahmet’ AND Soyadi=’Müngen’

Örneğimiz tabloya uygulandığında çıkan sonuç şöyle olacaktır

id ismi Soyadi Adresi Sehri
1 Ahmet Müngen Bostancı Mahallesi    İstanbul
2 Kübra Önkür Diyarbakır Diyarbakır
3 Gökhan Yılmaz Cumhuriyet Mahallesi Trabzon
4 Mehmet Aslantas Sürsürü mahallesi Elazığ

DELETE

SQL’de herhangi bir satırı silme için kullandığımız yöntemdir

DELETE FROM table_name WHERE some_column=some_value

Üsteki Query’da table_name isimli tabloda some_column sütünundaki değer some_value olduğu satırları sil diye emir verdik.

ÖRNEK

DELETE FROM Kisiler WHERE LastName=’Müngen

id ismi Soyadi Adresi Sehri
2 Kübra Önkür Diyarbakır Diyarbakır
3 Gökhan Yılmaz Cumhuriyet Mahallesi Trabzon
4 Mehmet Aslantas Sürsürü mahallesi Elazığ

NOT: Tablo’yu silmeden tüm satırlardaki bilgiyi silmek isterseniz şu 2 komutu kullanabilirsiniz

DELETE FROM table_nameorDELETE * FROM table_name

BÖLÜM2

JDBC Nedir ?

JDBC (Java DataBase Connectivity – Java Veritabanı Bağlanbırlığı ) Java ilişkili veritabanları arasında köprü kurmaya yarayan Java SE ile gelen bir api’dir. JDBC ile ilişkisel veritabanlarına bağlanılabilir(MySQL-PostSQL-MsSQL) , SQL sorgular çalıştırılabilir  ve bu sorguların sonuçları Java uygulamaları içinde kullanılabilir. Bir veritabanında çalıştırılan kod, değişiklik yapılmadan diğer SQL veritabanlarıyla da çalışabilir. Yeter ki kullanılan SQL komutları standart SQL komutları olsun ve belli bir veritabanına ait özel bazı komutlar içermesin.

Statement: Genel olarak tüm bilgisayar komutları için kullanılırken biz genelde Sql komutları için kullanacağız, yani sistem’e şu tablodaki şu bilgiyi değiş diye gönderdiğimiz emir bir statementtir.

JDBC Sürücüsü(Driver)

JDBC ile bir veritabanına bağlanabilmesi için öncelikle o veritabanı sınıfına ait sürücü (driver) projeye entegre edilmelidir. Böylece projede verilen statement’lerin nasıl yapılacağını bu driver’dan alıp işleme koyacaktır.

Bir Java Projemize MySQL driver’ini kullanmak için projemize şöyle yazarız: Class.forName(“com.mysql.jdbc.Driver”);  şeklinde verilir.

Dört Tip JDBC Driveri vardır.

  • Tip 1: Sistemde mevcut olan ODBC Driver’ini kullanarak işlem yapar
  • Tip2: Client side’daki library’den komutları çalıştırır. Ağ üzerinden database ile iletşim kurur.
  • Tip3: Saf java driver olarak geçer server tarafındaki ara katmanla konuştuktan sonra database ile konuşur
  • Tip4: Saf java driver’idir yerel database protokülünü kullanır.

Bu tipler arasında en iyisi tip4’dür çünkü database ile arada hiçbir köprü olmaksızın iletişim kurabilir

 

 

                     Tip 4 JDBC-Driver Yapı Grafiği

JDBC-ODBC Köprüsü

         ODBC (Open DataBase Connectivity – Açık Veritabanı Bağlanırlığı ) herhangi bir veritabanına bağlanmak için kullanılan , Java dışında dillerde de desteklenen standart bir sistemdir.

Java’da ODBC doğrudan kullanılmaz , çünkü ODBC fonksiyonel programlamaya göre yapılmıştır ve Java’nın standart nesne yapısına ve geleneğine uymaz.Ancak ODBC  üzerinden JDBC bağlantısı yapan sürücüler  bulunmaktadır. Bu tür sürücüler yüklenerek , tanımlı bir veri kaynağı üzerinden JDBC bağlantısı yapılabilir.Java ile birlikte basit bir JDBC-ODBC Driver adı verilen basit bir sürücü gelir.Yüklenişi;

Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); şeklinde gerçekleştirilir.

JDBC Özellikleri

JDBC’nin üc adet Fonksiyonu(ana metodu vardır)

  • Statement : Bu fonksiyon her çağırıldığında SQL’e gidip işlem yapan fonksiyondur. O an çalışır ve biter
  • PreparedStatement: Bu fonksiyon verilen statement(emir-görevler-komut)’i hafızaya alır ve tüm komutları yine kullanıcının seçtiği biryerde aynı anda yapar.
  • CallableStatement : veritabanında kaydedilmiş verileri veya fonksiyonları kullanır.

Her veritabanının kendisine özgü bir bağlantı adresi(connection URL) biçimi vardır.

Connection URL Örnek

protokol://hostname:port/database

ve  JDBC –ODBC kullanıldığında adres şöyledir:

jdbc:odbc:mydatasource


PHP-MySQL Bağlantısı

Aşağıda bulunan tablosunda php kodu içerisinde bulunan bir kod öbeği ile sql bağlantısı yapılmıştır. Her statement’ten sonra ki “//” işaretlerinden sonra o statement ile ilgili açıklama yapılmaktadır

$host = “localhost”; //hotsunuz genelde localhost’dur$dbuser=”username”;     // Database Username$dbpass=”password”;    // Database şifresi

$dbname=”mydata”;  //Database ismi

$baglanti =mysql_connect($host”, $dbuser, $dbpass)  //**

@mysql_select_db($dbname)  or die(“Veritanında bir hata oluştu!”); //bağlantıya database ekliyoruz
//EKSTRA

if (!$baglanti) {

die(‘Could not connect to MySQL: ‘ . mysql_error());

}

echo ‘Connection OK’; mysql_close($link);

mysql_close($baglanti); //mysql bağlantısını kapatır.

** ilgili parametreler ile $baglanti adı altında bir değişeke atamak sureti ile bağlantı kuruyor.

Ekstra Kısmı echo dahil: mysql bağlantı’nın durumunu gösterir.

Sorgu Yapma

Aşağıdaki Tablodaki örnekte üste oluşturduğumuz connection ile nasıl sorgu yapılacağı gösterilmiştir

$result = mysql_query(‘SELECT * From tabloismi’);  //*$row = mysql_fetch_array($result) //**$row[‘sutunismi’] //***

 

* query’imizi yazıyoruz. Tüm dillerde query’ler aynıdır

** Result’da toplanan tablo şeklinde verinin ilk satırını alıyoruz
*** Aldığımız ilk satır içindeki ilgili sutündaki değeri çekiyoruz

Püf Noktası 1;

while($row = mysql_fetch_array($result)){$row[‘sutunismi’]….}

Şeklinde olması durumunda, tablo bitene kadar(son satıra kadar) işleme devam edecektir. Ve tüm satırlara böylece ulaşabileceğiz.

Püf Noktası 2;

Not: Birçoğumuzun kullandığı ve geçen sayıdaki makalede ifade edilen PhpMyAdmin’in default şifre’si  boştur, Yani $dbpass=””; şu şekilde ayarlanması gerekir.

NOT: Php’deki birçok sık kullanılan MySQL fonksiyonlarını şu adresten bulabilirsiniz

http://www.w3schools.com/php/php_ref_mysql.asp

JSP-MySQL Bağlantısı

Aşağıdaki örnek kod’du bir JSP sayfasının içindeki <%…%> kısmına yazdığınızda JSP ile MySQL arasında bir bağlantı oluşturacaktır

Connection conn = null; //*Statement st = null; //*ResultSet rs = null; //*

Class.forName(“com.mysql.jdbc.Driver”).newInstance(); // Driver’i çağırdık

String dbUrl = “jdbc:mysql://localhost/deneme”; //Databasenin adresini gösterdik

conn = DriverManager.getConnection(dbUrl, “root”, “password”);  //**

st = conn.createStatement();

rs = st.executeQuery(“Select * FROM tabloismi”); //bir önceki sayıda öğrendiğimiz query’dir

 

* Birçok arkadaşımız niye tanımlamaları onları kullandığımız yerde yapmadığımızı sorar. Bu bir şart değildir, ama açık ve okunabilir kod sisteminde ve çıkabilecek bir exception’da bu şekilde yazmak işimizi kolaylaştıracaktır.

** ilgili parametreler ile bağlantı oluşturduk.

ResultSet bizim için query’mizde belirttiğimiz şartlarda tabloyu tablo halinde alıp kaydettiğimiz değişkendir.

(üsteki bağlantı kodunun devamıdır)

while(rs.next()) {out.println(rs.getString(“sutunismi”)); // String(varchar) olan sütundaki değeri aldıkout.println(rs.getInt(“sutunismi2”)); // integer olan sütundaki değeri aldık

}

//Aşağıdaki satırlar, Bir sorun oluşması durumunda bağlantı kapatma işlemleri kodları

if (rs != null) rs.close();

if (st != null) st.close();

if (conn != null) conn.close();

 

While ile tabloda son sütuna gelene kadar okuttuk.

Rs.getString(“sutunismi”);

Püf Noktası 1;

Derleyicinizden JDBC kütüphanesini projenize import etmeyi unutmayın.

 Püf” Noktası 2;

“import java.sql.*;” komutu ile import etmeyi unutmayın.

JSP’de bu komut şöyle yazılır

<%@ page language=”java” import=”java.sql.*” contentType=”text/html; charset=iso-8859-9″ %>

Püf Noktası 3;
rs.getInt gibi rs.getDouble de vardır, her değişken için ayrı bir method vardır. Methodlar sütunların içindeki değerleri değil, sütun oluşturulurken o sütuna verilen type özelliğine göre yapılmalıdır
İpucu

Dosya konumuzun içinde anlatılmayacak olan ama gayet kullanışlı ve işe yarayan bir SQL kodu ResultSetMetaData’dır. Ayrıntısını Araştırabilirsiniz.

Kaynakça:

       Not: Bu Yazıda bulunan Bölüm1 Fırat Üniversitesi Yazılım Kulübü Script isimli Derginin 1.Sayısında yayımlanmıştır. http://script.yazilimkulubu.com adresinden ulaşabilirsiniz.

Reklamlar