Sql Sorguları Yazalım - ihan3t

ihan3t

Kadim Üye
7 Şub 2012
5,018
22

Merhabalar bu konumda size sql ile sorgular yazmayı göstereceğim. Boş bir vaktim oldu ve buraya konu açarak değerlendirmek istedim, maksat bilmeyenlere faydalı olsun.

Şimdi öncelikle tablo oluşturmadan başlayalım. Aslında tablo oluşturmak için GUI (graphical user interface) yani görsel arayüzü olan bir sql client ı kullanabilirsiniz. Ama temel oluşturması açısından tabloyu da sql kodları ile oluşturalım.

Kod:
CREATE TABLE thtihan3t_kullanicilar(
  id int(11) NOT NULL AUTO_INCREMENT,
  isim varchar(20),
  email varchar(30),
  
  PRIMARY KEY (id)
);

CREATE TABLE tablo_ismi()
column_ismi column_tipi()

Primary key, her kayıt için unique olan bir identifier dır. Auto increment ise bu alanın otomatik olarak arttırılacağını belirtir.

Şimdi bu tablomuza bir kayıt ekleyelim :

Kod:
INSERT INTO thtihan3t_kullanicilar
(isim,email)
VALUES
('ihan3t', '[email protected]');
)

Burada dikkat edilmesi gereken husus, VALUES dedikten sonra, öncesinde verdiğimiz sırada parametreleri yazmamız gerektiğidir.

Şimdi bu kayıtlarımızı sorgulayalım :

Kod:
SELECT * FROM thtihan3t_kullanicilar;

Bize var olan tek satırlık kayıdımızı getirdi.

Bu çok basit bir örnek oldu ama normalde bu kadar basit bir veritabanı yapımız olmaz.. Birden fazla tablo ve bunların relationları olur.

Şimdi bir tablo daha ekleyelim ve var olan tablomuzla arasında relation kuralım. Ve verilerimizi eşleştirerek getirelim.

Yeni bir tablo ekleyelim :

Kod:
CREATE TABLE konular(
  konu_id int(11) NOT NULL AUTO_INCREMENT,
  konu_baslik varchar(100),
  icerik text,
  kullanici_id int(11),
  
  PRIMARY KEY (konu_id),
  FOREIGN KEY (kullanici_id) REFERENCES thtihan3t_kullanicilar(id)
)

Burada farklı olarak "FOREIGN KEY" yapısını kullandık. Peki bu bize neyi anlatıyor ?

Şimdi öncelikle FK nın tam anlamına bakalım : Foreign Key Constraint

Bu ne anlama gelir ? Foreign key belirttiğimiz bir tabloya, ilişki kurduğumuz tablodaki kayıt olmadan kayıt ekleyemeyiz.

Yani "konular" tablosuna, "kullanicilar" tablosunda id si olmayan bir kullanıcı id değeri ile kayıt ekleyemeyiz.

İsterseniz deneyelim :

Kod:
INSERT INTO konular
(kullanici_id, konu_baslik)
VALUES
(5, 'sql kodu yazalim - ihan3t');

Bu kodu çalıştırdığımızda bize foreign key ile ilgili bir hata verecek.. Kullanıcılar tablosunda bu id ye ait kayıt olmadığı için konular tablosuna da ekleyemiyoruz..

Ayrıca eğer tablomuzu oluşturursak foreign keye şu komutu da eklediğimizde " ON DELETE CASCADE " referans gösterdiğimiz kullanıcılar tablosunda ki kayıt silindiğinde konular tablosunda ki ilişkili kayıtlar da otomatik olarak silinir.

Şimdi hata vermeyen bir kayıt ekleyelim :

Kod:
INSERT INTO konular
(kullanici_id, konu_baslik)
VALUES
(1, 'sql kodu yazalim - ihan3t');


Şimdi de ilişki kurduğumuz bu tablolardan verilerimizi JOIN sorgusuyla çekelim:

Kod:
SELECT * FROM thtihan3t_kullanicilar
INNER JOIN konular
ON kullanici_id = id;

Burada yaptığımız şey iki tabloyu JOIN ile birleştirerek verilerini getirmek. Tablo sayısı arttığında karışıklık olmaması için tablolara farklı kısaltma isimler verebilirsiniz örnek olarak :

Kod:
SELECT * FROM thtihan3t_kullanicilar as kul
INNER JOIN konular AS kon
ON kon.kullanici_id = kul.id;

Bu kodun çıktısı şöyle bir sonuç döndürecek :

Kod:
1	ihan3t	[email protected]	1	sql kodu yazalim - ihan3t	NULL	 1

Null olarak gelen alan icerik alanı. Orayı boş bırakmıştık insert sorgusunda.

Şimdi bütün bu yaptıklarımızın akılda kalıcı olması amacıyla kodlarınızı online olarak sqlfiddle sitesinde deneyebilirsiniz : SQL Fiddle


Joinleri daha detaylı araştırmak isterseniz "inner join, left join, right join" kavramlarını araştırabilirsiniz.

Belki başka bir konuda daha karmaşık sql kodları yazmayı da anlatırım Part 2 olacak şekilde.
 

n3pix

Uzman üye
8 Eyl 2016
1,079
0
Aydın

Kod:
INSERT INTO konular
(kullanici_id, konu_baslik)
VALUES
(5, 'sql kodu yazalim - ihan3t');

Bu kodu çalıştırdığımızda bize foreign key ile ilgili bir hata verecek.. Kullanıcılar tablosunda bu id ye ait kayıt olmadığı için konular tablosuna da ekleyemiyoruz..

Ayrıca eğer tablomuzu oluşturursak foreign keye şu komutu da eklediğimizde " ON DELETE CASCADE " referans gösterdiğimiz kullanıcılar tablosunda ki kayıt silindiğinde konular tablosunda ki ilişkili kayıtlar da otomatik olarak silinir.
Belki başka bir konuda daha karmaşık sql kodları yazmayı da anlatırım Part 2 olacak şekilde.

Selamun aleykum abi,
Güzel bir konu olmuş ellerine sağlık nedense bunu çalıştırdığımda hata vermiyor :/ MySQL 5.7.14 Sürümle ilgili bir sorun mu acaba bilemedim.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.