Veritabanları, modern bilgi teknolojilerinin temel yapı taşlarından biridir. Bilgilerin organize edilmesi, saklanması, erişilmesi ve güncellenmesi için kritik bir rol oynayan veritabanları, çeşitli sektörlerde geniş bir kullanım alanına sahiptir. Bu makalede, MySQL veritabanı kullanarak bir film veritabanı oluşturmayı ve yönetmeyi öğreneceğiz. Filmlerin, yönetmenlerin, eleştirilerin ve daha fazlasının yer aldığı bir veritabanını adım adım oluşturacak ve temel SQL sorgularını kullanarak veri manipülasyonunu gerçekleştireceğiz. Bu sayede, MySQL ve veritabanı yönetimi konusunda sağlam bir temel oluşturarak, gerçek dünya uygulamalarında veri tabanı işlemlerini kolaylıkla gerçekleştirebileceksiniz.
Veritabanı Nedir?
Taban olarak “veri” kelimesiyle oluşturulan ve bu verilerin bir düzen içinde depolandığı yapıya “veritabanı” denir. Bir organizasyonun veya bir uygulamanın bilgi yönetimi için kullanılan temel araçlardan biridir. Veritabanları, bilgiyi düzenli bir şekilde saklamak, erişmek, güncellemek ve yönetmek için kullanılır. Genellikle yapılandırılmış veri türlerini (tablo, sütun, satır) desteklerler ve SQL (Structured Query Language) gibi sorgu dilleri aracılığıyla verilere erişim sağlarlar. Veritabanları, büyük miktarda veriyi etkili bir şekilde yönetebilme yeteneğiyle bilgi teknolojileri dünyasında kritik bir rol oynamaktadır.
Veritabanı Oluşturma
Veritabanı oluşturma, bir bilgi yönetim sisteminin temel adımlarından biridir ve verilerin saklanacağı ortamın başlangıç noktasını belirler. MySQL’de bir veritabanı oluşturmak için CREATE DATABASE
ifadesi kullanılır. Bu ifade, belirtilen isimde bir veritabanı oluşturur. İsteğe bağlı olarak, IF NOT EXISTS
kısmı kullanılarak, belirtilen isimde bir veritabanı zaten varsa tekrar oluşturulmaması sağlanabilir.
ÖNEMLİ NOT: Aşağıdaki tablolar(filmler ve esletiriler), CREATE DATABASE, CREATE TABLE, INSERT INTO, UPDATE, DELETE, SELECT, LIMIT, ORDER BY, GROUP BY, JOIN, WHERE, OR, AND, NOT, IN, BETWEEN, COUNT, SUM, AVG, ABS vb. SQL komutları ile ilgili kavramları basit ve sade bir şekilde anlatmak için hazırlanmıştır. Eğer normalizasyon kurallarına dikkat ederek tabloları oluşturmak isterseniz. uyeler, turler ve film_tur adında tabloları oluşturabilirsiniz.
Örneğin, aşağıdaki kod örneği, “film_arsiv” adında bir veritabanı oluşturur ve bu veritabanını kullanır:
1 2 3 4 | CREATE DATABASE IF NOT EXISTS `film_arsiv`; USE `film_arsiv`; |
Bu kod, öncelikle “film_arsiv” adında bir veritabanı oluşturur. Ancak, eğer zaten böyle bir veritabanı varsa işlemi gerçekleştirmez. Daha sonra USE
ifadesiyle, oluşturulan veya mevcut olan “film_arsiv” veritabanını kullanmamızı sağlar. Bu şekilde, oluşturduğumuz veritabanında işlem yapmaya hazır hale geliriz.
Tabloların Tanımlanması
Filmler Tablosu:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | CREATE TABLE IF NOT EXISTS filmler ( film_id INT(11) NOT NULL AUTO_INCREMENT, film_ad VARCHAR(255) DEFAULT NULL, yonetmen VARCHAR(255) DEFAULT NULL, yil INT(11) DEFAULT NULL, tur VARCHAR(255) DEFAULT NULL, sure INT(11) DEFAULT NULL, poster VARCHAR(255) DEFAULT NULL, imdb_puan FLOAT DEFAULT NULL, film_odul BOOLEAN DEFAULT NULL, PRIMARY KEY (film_id) ); |
Bu SQL ifadesi, “filmler” adında bir tablo oluşturur. CREATE TABLE
ifadesi, yeni bir tablo oluşturmak için kullanılır. IF NOT EXISTS
kısmı, belirtilen isimde bir tablo zaten varsa tekrar oluşturulmamasını sağlar. Oluşturulacak tablo, “filmler” adında bir tablo olacak şekilde tanımlanır.
Tablonun sütunları ise şu şekildedir:
film_id
: Her film için benzersiz bir kimlik numarasıdır. INT veri türüne sahiptir, 11 karakter uzunluğunda ve otomatik artan (AUTO_INCREMENT) olarak belirlenmiştir. Bu, her yeni film eklendiğinde film_id’nin otomatik olarak artacağı anlamına gelir.film_ad
: Film adını saklar. VARCHAR(255) veri türüyle tanımlanmıştır ve maksimum 255 karakterlik bir metin alabilir. DEFAULT NULL ifadesi, bu sütunun varsayılan olarak boş bırakılabileceğini belirtir.yonetmen
: Film yönetmeninin adını saklar. VARCHAR(255) veri türüyle tanımlanmıştır.yil
: Film yayın yılını saklar. INT(11) veri türüyle tanımlanmıştır.tur
: Film türünü saklar. VARCHAR(255) veri türüyle tanımlanmıştır.sure
: Film süresini dakika cinsinden saklar. INT(11) veri türüyle tanımlanmıştır.poster
: Film posterinin URL’sini saklar. VARCHAR(255) veri türüyle tanımlanmıştır.imdb_puan
: Film için IMDb puanını saklar. FLOAT veri türüyle tanımlanmıştır.film_odul
: Film ödüllü mü değil mi bilgisini saklar. BOOLEAN veri türüyle tanımlanmıştır.
Ayrıca, PRIMARY KEY (film_id)
ifadesi, film_id sütununu birincil anahtar olarak belirler. Bu, her filmi tekil olarak tanımlamak için kullanılır.
Bu şekilde, “filmler” tablosu oluşturulmuş ve her bir sütunun amacı ve veri türü açıklanmıştır.
Eleştiriler Tablosu:
1 2 3 4 5 6 7 8 9 10 11 12 | CREATE TABLE IF NOT EXISTS elestiriler ( elestiri_id INT(11) NOT NULL AUTO_INCREMENT, film_id INT(11) DEFAULT NULL, elestiri_metin TEXT DEFAULT NULL, puan DECIMAL(3,1) DEFAULT NULL, elestiri_tarihi DATE DEFAULT NULL, elestirmen VARCHAR(255) DEFAULT NULL, PRIMARY KEY (elestiri_id), FOREIGN KEY (film_id) REFERENCES filmler (film_id) ); |
Bu SQL ifadesi, “elestiriler” adında bir tablo oluşturur. CREATE TABLE
ifadesi, yeni bir tablo oluşturmak için kullanılır. IF NOT EXISTS
kısmı, belirtilen isimde bir tablo zaten varsa tekrar oluşturulmamasını sağlar. Oluşturulacak tablo, “elestiriler” adında bir tablo olacak şekilde tanımlanır.
Tablonun sütunları ise şu şekildedir:
elestiri_id
: Her eleştiri için benzersiz bir kimlik numarasıdır. INT veri türüne sahiptir, 11 karakter uzunluğunda ve otomatik artan (AUTO_INCREMENT) olarak belirlenmiştir.film_id
: Eleştirinin hangi filme ait olduğunu belirten bir yabancı anahtardır. INT(11) veri türüyle tanımlanmıştır ve varsayılan olarak NULL değer alabilir.elestiri_metin
: Eleştiri metnini saklar. TEXT veri türüyle tanımlanmıştır.puan
: Eleştirinin puanını saklar. DECIMAL(3,1) veri türüyle tanımlanmıştır.elestiri_tarihi
: Eleştirinin tarihini saklar. DATE veri türüyle tanımlanmıştır.elestirmen
: Eleştirmenin adını saklar. VARCHAR(255) veri türüyle tanımlanmıştır.
Ayrıca, PRIMARY KEY (elestiri_id)
ifadesi, elestiri_id sütununu birincil anahtar olarak belirler. CONSTRAINT elestiriler_ibfk_1 FOREIGN KEY (film_id) REFERENCES filmler (film_id)
ifadesi, film_id sütununu filmler tablosundaki film_id sütunuyla yabancı anahtar olarak tanımlar. Bu şekilde elestiriler tablosundaki her bir eleştirinin hangi filme ait olduğu ilişkilendirilir.
Bu şekilde, “elestiriler” tablosu oluşturulmuş ve her bir sütunun amacı ve veri türü açıklanmıştır.
Eğer yabancı anahtarı CREATE TABLE sorgusu içerisinde belirtmemiş olsaydık, daha sonra ALTER TABLE kullanarak yabancı anahtarı ekleyebilirdik. Örneğin:
1 2 3 4 | ALTER TABLE elestiriler ADD CONSTRAINT fk_film_id FOREIGN KEY (film_id) REFERENCES filmler (film_id); |
Bu ALTER TABLE ifadesi, “elestiriler” tablosuna “film_id” adında bir yabancı anahtar ekler. Bu yabancı anahtar, “filmler” tablosundaki “film_id” sütununa referans verir. Bu sayede “elestiriler” tablosundaki her bir eleştiri, hangi filme ait olduğunu belirten bir ilişkiyi temsil eder.
SQL SORGULARI İÇİN HAZIR DOSYAYI İNDİREBİLİRSİNİZ
Veri Ekleme (INSERT INTO)
Veri ekleme işlemi, mevcut tablolara yeni verilerin eklenmesini sağlar. INSERT INTO
ifadesi kullanılarak yeni veriler belirtilen tabloya eklenir. Bu işlem sırasında eklenecek veriler, tablonun sütunlarına uygun bir şekilde belirtilir.
Yeni Film Ekleme:
Yeni bir film eklemek için, INSERT INTO
ifadesi kullanılır ve eklemek istediğimiz film bilgileri belirtilir. Örneğin, “filmler” tablosuna yeni bir film ekleyelim:
1 2 3 4 | INSERT INTO filmler (film_ad, yonetmen, yil, tur, sure, poster, imdb_puan, film_odul) VALUES ('Interstellar', 'Christopher Nolan', 2014, 'Bilim Kurgu', 169, 'interstellar-poster.jpg', 8.6, 1); |
Bu sorgu, “filmler” tablosuna “Interstellar” adında yeni bir film ekler. Film adı, yönetmeni, yılı, türü, süresi, poster URL’si, IMDb puanı ve ödül bilgisi belirtilmiştir.
Eleştiri Ekleme:
Yeni bir eleştiri eklemek için de aynı şekilde INSERT INTO
ifadesi kullanılır. Eleştiriler tablosuna yeni bir eleştiri ekleyelim:
1 2 3 4 | INSERT INTO elestiriler (film_id, elestiri_metin, puan, elestiri_tarihi, elestirmen) VALUES (1, 'Muhteşem bir film, kesinlikle izlenmeli!', 9.5, '2024-03-07', 'John Doe'); |
Bu sorgu, “elestiriler” tablosuna film_id’si 1 olan bir filme yeni bir eleştiri ekler. Eleştiri metni, puanı, eleştiri tarihi ve eleştirmen adı belirtilmiştir.
Bu şekilde, INSERT INTO
ifadesi kullanarak yeni film ve eleştirileri kolayca ekleyebiliriz.
Veri Güncelleme (UPDATE)
Veri güncelleme işlemi, mevcut verilerin değiştirilmesini sağlar. Tablodaki bir veya daha fazla kaydın belirli sütunlarına yeni değerler atanır. Bu işlem için UPDATE
ifadesi kullanılır.
Film Bilgilerini Güncelleme:
Mevcut bir film bilgisini güncellemek için UPDATE
ifadesi kullanılır. Örneğin, “Interstellar” filminin süresini güncelleyelim:
1 2 3 4 5 | UPDATE filmler SET sure = 180 WHERE film_ad = 'Interstellar'; |
Bu sorgu, “filmler” tablosundaki “Interstellar” adlı filmin süresini 180 dakika olarak günceller.
Eleştiri Bilgilerini Güncelleme:
Mevcut bir eleştiri bilgisini güncellemek için de aynı şekilde UPDATE
ifadesi kullanılır. Örneğin, “Interstellar” filminin bir eleştirisinin puanını güncelleyelim:
1 2 3 4 5 | UPDATE elestiriler SET puan = 9.8 WHERE film_id = 1 AND elestirmen = 'John Doe'; |
Bu sorgu, “elestiriler” tablosundaki film_id’si 1 olan ve eleştirmeni “John Doe” olan eleştirinin puanını 9.8 olarak günceller.
Bu şekilde, UPDATE
ifadesi kullanarak mevcut film ve eleştiri bilgilerini kolayca güncelleyebiliriz.
Veri Silme (DELETE)
Veri silme işlemi, tablodaki belirli bir veya birden fazla kaydın kalıcı olarak kaldırılmasını sağlar. Bu işlem için DELETE FROM
ifadesi kullanılır.
Film Silme:
Belirli bir filmi silmek için DELETE FROM
ifadesi kullanılır. Örneğin, “Interstellar” filmi veritabanından silmek istediğimizi düşünelim:
1 2 3 4 | DELETE FROM filmler WHERE film_ad = 'Interstellar'; |
Bu sorgu, “filmler” tablosundan “Interstellar” adlı filmi siler. Eğer birden fazla “Interstellar” filmi varsa, tümünü siler.
Eleştiri Silme:
Belirli bir eleştiriyi silmek için de aynı şekilde DELETE FROM
ifadesi kullanılır. Örneğin, “Interstellar” filmine ait bir eleştiriyi silmek istediğimizi düşünelim:
1 2 3 4 | DELETE FROM elestiriler WHERE film_id = 1 AND elestirmen = 'John Doe'; |
Bu sorgu, “elestiriler” tablosundan film_id’si 1 olan ve eleştirmeni “John Doe” olan bir eleştiriyi siler.
Bu şekilde, DELETE FROM
ifadesi kullanarak belirli filmleri veya eleştirileri veritabanından kolayca silebiliriz.
Uygulamalar İçin SQL Dosyaları
Bu rehber kapsamında kullanılan SQL dosyasını buradan indirebilirsiniz. İndirdiğiniz SQL dosyasında, veritabanını oluşturan ve örnek veri ekleyen SQL komutları bulunacaktır.
Veri Sorgulama (SELECT)
Veri sorgulama, veritabanında saklanan bilgilerin belirli koşullara göre filtrelenerek seçilmesini sağlar. Bu işlem için en sık kullanılan SQL ifadesi SELECT
ifadesidir. SELECT
ifadesi, belirtilen tablodan belirli sütunları veya tüm sütunları seçmek için kullanılır.
SELECT ifadesinin temel yapısı şu şekildedir:
1 2 3 4 | SELECT sütun_adı1, sütun_adı2, ... FROM tablo_adı; |
Bu ifade, belirtilen tablodan belirtilen sütunları seçer. Eğer tüm sütunları seçmek istiyorsak, yerine yıldız (*) karakteri kullanılır:
1 2 3 | SELECT * FROM tablo_adı; |
SELECT ifadesi aynı zamanda verileri filtrelemek için WHERE ifadesi ile birlikte kullanılabilir. Örneğin:
1 2 3 4 | SELECT * FROM filmler WHERE yil > 2000; |
Aliases (AS): Sütun ve Tablo İsimlerinin Yeniden Adlandırılması
Aliases (AS), SQL sorgularında sütun veya tablo isimlerini geçici olarak yeniden adlandırmak için kullanılan bir anahtar kelimedir. Bu özellik, sorgu sonuçlarını daha anlaşılır hale getirmek veya sütunlara veya tablolara daha açıklayıcı isimler vermek için kullanılabilir. AS anahtar kelimesi, sütunların veya tabloların mevcut adlarının yerine geçici olarak kullanılmak üzere alternatif adlar (alias) belirtmek için kullanılır.
- Sütun Aliases (AS): Sütun İsimlerinin Yeniden Adlandırılması
- Tablo Aliases (AS): Tablo İsimlerinin Yeniden Adlandırılması
Bu alt başlıklar, AS anahtar kelimesinin sütun ve tablo isimlerini nasıl yeniden adlandırmak için kullanılabileceğini açıklar.
Sütun Aliases (AS): Sütun İsimlerinin Yeniden Adlandırılması:
1 2 3 | SELECT film_ad AS film_adi, yil AS yayin_yili FROM filmler; |
Bu sorgu, “filmler” tablosundaki “film_ad” sütununu “film_adi” olarak ve “yil” sütununu “yayin_yili” olarak yeniden adlandırır.
Tablo Aliases (AS): Tablo İsimlerinin Yeniden Adlandırılması:
1 2 3 4 5 | SELECT f.ad, e.metin FROM filmler AS f, elestiriler AS e WHERE f.id = e.film_id; |
Bu sorgu, “filmler” tablosunu “f” ve “elestiriler” tablosunu “e” olarak yeniden adlandırır. “ad” ve “metin” sütunları sırasıyla “filmler” ve “elestiriler” tablolarındaki “film_ad” ve “elestiri_metin” sütunlarını temsil eder. WHERE koşulu ile iki tablo arasındaki ilişki belirtilmiştir. Bu şekilde, daha anlaşılır ve kompakt bir sorgu elde edilir.
Aliases (AS) kullanarak, SQL sorgularının sonuçlarını daha anlaşılır hale getirebilir ve sorguları daha okunabilir hale getirebiliriz. Bu, özellikle karmaşık sorguları anlamak ve yönetmek için çok yararlı olabilir.
Tablo Sorgulama ve Filtreleme: WHERE
1. Eşitlik Operatörü (=)
WHERE
ifadesi, belirli bir sütunun belirli bir değere eşit olması durumunu kontrol eder. Eşitlik operatörü (=
), bu tür durumları kontrol etmek için kullanılır.
1 2 3 4 | SELECT * FROM filmler WHERE yil = 2013; |
Bu sorgu, “filmler” tablosundan yılı 2013 olan filmleri seçer.
2. Karşılaştırma Operatörleri (<, >, <=, >=, <>)
WHERE
ifadesi, belirli bir sütunun belirli bir değerden küçük, büyük, küçük veya eşit, büyük veya eşit veya belirli bir değere eşit olmaması gibi durumları kontrol etmek için karşılaştırma operatörlerini kullanır.
1 2 3 4 | SELECT * FROM filmler WHERE sure > 120; |
Bu sorgu, “filmler” tablosundan süresi 120 dakikadan fazla olan filmleri seçer.
3. LIKE Operatörü
WHERE
ifadesi, belirli bir desene uygun olan verileri seçmek için LIKE
operatörü ile kullanılır. Bu operatör, metin tabanlı sütunlarda özel desenlere göre arama yapmak için kullanılır.
1 2 3 4 | SELECT * FROM filmler WHERE film_ad LIKE 'Çılgın%'; |
Bu sorgu, “filmler” tablosundan film adı “Çılgın” ile başlayan filmleri seçer.
Bu alt başlıklar, WHERE ifadesinin temel kullanımlarını açıklar ve farklı durumları filtreleme yeteneklerini gösterir.
AND, OR, NOT: Birden Fazla Koşulun Birlikte Kullanımı
WHERE ifadesi, tek bir koşulun sağlanmasını belirlemek için kullanıldığı gibi, birden fazla koşulun birlikte kullanılmasıyla daha karmaşık sorgular oluşturmak için de kullanılabilir. Bu durumda, AND, OR ve NOT mantıksal operatörleri kullanılır.
AND Operatörü: WHERE ifadesi içinde kullanılan AND operatörü, her iki koşulun da sağlanması durumunda sorgu sonucunu döndürür. Örneğin, “filmler” tablosundan 2000’den sonra yayınlanan ve IMDb puanı 8’den büyük olan filmleri seçmek için:
1 2 3 4 | SELECT * FROM filmler WHERE yil > 2000 AND imdb_puan > 8; |
OR Operatörü: WHERE ifadesi içinde kullanılan OR operatörü, en az bir koşulun sağlanması durumunda sorgu sonucunu döndürür. Örneğin, “filmler” tablosundan bilim kurgu veya aksiyon türündeki filmleri seçmek için:
1 2 3 4 | SELECT * FROM filmler WHERE tur = 'Bilim Kurgu' OR tur = 'Aksiyon'; |
NOT Operatörü: WHERE ifadesi içinde kullanılan NOT operatörü, belirtilen koşulun doğru olmadığı durumları seçmek için kullanılır. Örneğin, “filmler” tablosundan IMDb puanı 7’den düşük olan filmleri seçmek için:
1 2 3 4 | SELECT * FROM filmler WHERE NOT imdb_puan > 7; |
Bu operatörlerin kullanımıyla, daha karmaşık sorgular oluşturmak mümkün olur. Bu sayede, birden fazla koşulu bir araya getirerek istenilen verileri daha detaylı bir şekilde seçmek mümkün hale gelir.
ORDER BY: Sorgu Sonuçlarının Sıralanması
ORDER BY ifadesi, SQL sorgularında sorgu sonuçlarının belirli bir sıraya göre düzenlenmesini sağlar. Bu ifade, SELECT sorgusu içinde kullanılarak sorgu sonuçlarının istenilen sıraya göre düzenlenmesini sağlar. ORDER BY ifadesi ile belirtilen sıralama, belirli bir sütunun değerlerine veya birden fazla sütuna göre yapılabileceği gibi artan (ASC) veya azalan (DESC) sıralama şekilleri de belirtilebilir. Örneğin, bir film listesini yayın yılına göre artan şekilde sıralamak veya eleştirileri puanlarına göre azalan şekilde sıralamak gibi işlemler ORDER BY ifadesi kullanılarak gerçekleştirilebilir.
- Tek Sütuna Göre Sıralama
- Birden Fazla Sütuna Göre Sıralama
- Artan (ASC) ve Azalan (DESC) Sıralama
Bu alt başlıklar, ORDER BY ifadesinin farklı kullanımlarını ve seçeneklerini açıklamak için kullanılabilir. Her bir alt başlık, belirli bir sıralama türünü ve nasıl kullanılabileceğini açıklar.
Tek Sütuna Göre Sıralama:
1 2 3 4 | SELECT * FROM filmler ORDER BY yil ASC; |
Bu sorgu, “filmler” tablosundaki filmleri yayın yılına göre artan şekilde sıralar.
Birden Fazla Sütuna Göre Sıralama:
1 2 3 4 | SELECT * FROM elestiriler ORDER BY puan DESC, elestiri_tarihi ASC; |
Bu sorgu, “elestiriler” tablosundaki eleştirileri önce puanlarına göre azalan şekilde, ardından eleştiri tarihlerine göre artan şekilde sıralar.
Artan (ASC) ve Azalan (DESC) Sıralama:
1 2 3 4 | SELECT * FROM filmler ORDER BY sure DESC; |
Bu sorgu, “filmler” tablosundaki filmleri sürelerine göre azalan şekilde sıralar.
LIMIT: Sorgu Sonuçlarının Sınırlandırılması
LIMIT ifadesi, SQL sorgularında dönen sonuçların belirli bir aralıkta veya belirli bir sayıda sınırlandırılmasını sağlar. Bu ifade, SELECT sorgusu içinde kullanılarak sorgu sonuçlarının istenilen sayıda veya belirli bir aralıkta alınmasını sağlar. LIMIT ifadesi ile belirtilen sınır, sonuçların başlangıç ve bitiş indeksleri veya doğrudan alınacak maksimum kayıt sayısı olarak belirtilebilir. Örneğin, sorgu sonuçlarının ilk 10 kaydını almak veya belirli bir aralıktaki kayıtları almak gibi işlemler LIMIT ifadesi kullanılarak gerçekleştirilebilir.
- Belirli Bir Sayıda Kayıt Almak
- Belirli Bir Aralıktaki Kayıtları Almak
Bu alt başlıklar, LIMIT ifadesinin farklı kullanımlarını ve seçeneklerini açıklamak için kullanılabilir. Her bir alt başlık, belirli bir sınır türünü ve nasıl kullanılabileceğini açıklar.
Belirli Bir Sayıda Kayıt Almak:
1 2 3 4 5 | SELECT * FROM filmler ORDER BY yil DESC LIMIT 5; |
Bu sorgu, “filmler” tablosundaki filmleri yayın yılına göre azalan şekilde sıralar ve sorgu sonuçlarının ilk 5 kaydını alır.
Belirli Bir Aralıktaki Kayıtları Almak:
1 2 3 4 | SELECT * FROM elestiriler LIMIT 5, 10; |
Bu sorgu, “elestiriler” tablosundaki eleştirileri 5. kayıttan başlayarak 10 kayıt alır. Bu, 6. kayıttan 15. kayıta kadar olan eleştirileri getirir.
NULL Değerler: Boş Değerlerin Kullanımı ve İşlenmesi
NULL değeri, bir sütunun veya alanın değerinin bilinmediği, atanmadığı veya mevcut olmadığı durumları temsil eder. NULL, SQL’de bir veri değeri olarak kullanılabilir ve bir tablodaki sütunlar için boş bir değer belirtir. NULL değeri, veritabanı tablosunda saklanabilen geçerli bir değerdir ve belirli koşullara göre filtrelenir veya işlenir. NULL değeri, veritabanı tablolarında belirli bir sütunun boş olabileceği durumları işaret etmek için sıklıkla kullanılır.
- NULL Değerlerin Filtrelenmesi
- IS NULL ve IS NOT NULL Operatörleri
- NULL Değerlerin İşlenmesi
Bu alt başlıklar, NULL değerlerin belirli bir sütunda nasıl işleneceğini ve nasıl işlenebileceğini açıklamak için kullanılabilir.
NULL Değerlerin Filtrelenmesi:
1 2 3 4 | SELECT * FROM filmler WHERE poster IS NULL; |
Bu sorgu, “filmler” tablosundaki poster sütunu NULL olan filmleri seçer.
IS NULL ve IS NOT NULL Operatörleri:
1 2 3 4 | SELECT * FROM elestiriler WHERE elestiri_metin IS NOT NULL; |
Bu sorgu, “elestiriler” tablosundaki elestiri_metin sütunu NULL olmayan eleştirileri seçer.
NULL Değerlerin İşlenmesi:
1 2 3 | SELECT AVG(imdb_puan) AS ortalama_puan FROM filmler; |
Bu sorgu, “filmler” tablosundaki imdb_puan sütunundaki NULL olmayan değerlerin ortalamasını hesaplar.
MIN and MAX: En Küçük ve En Büyük Değerlerin Bulunması
MIN ve MAX fonksiyonları, bir sütunun en küçük (minimum) veya en büyük (maksimum) değerini bulmak için kullanılır. Bu fonksiyonlar, SQL sorgularında kullanılarak belirli bir sütundaki en küçük veya en büyük değeri döndürür. Bu fonksiyonlar, özellikle bir sütunun minimum veya maksimum değerini bulmak veya belirli bir aralıktaki en küçük veya en büyük değeri bulmak için yaygın olarak kullanılır.
- MIN Fonksiyonu: En Küçük Değerin Bulunması
- MAX Fonksiyonu: En Büyük Değerin Bulunması
Bu alt başlıklar, MIN ve MAX fonksiyonlarının farklı kullanımlarını ve belirli bir sütundaki en küçük veya en büyük değerleri bulmak için nasıl kullanılabileceğini açıklar.
MIN Fonksiyonu: En Küçük Değerin Bulunması:
1 2 3 | SELECT MIN(yil) AS en_kucuk_yil FROM filmler; |
Bu sorgu, “filmler” tablosundaki yil sütunundaki en küçük değeri (en eski film yılı) bulur.
MAX Fonksiyonu: En Büyük Değerin Bulunması:
1 2 3 | SELECT MAX(imdb_puan) AS en_buyuk_imdb_puan FROM filmler; |
Bu sorgu, “filmler” tablosundaki imdb_puan sütunundaki en büyük değeri (en yüksek IMDb puanı) bulur.
Bu şekilde, MIN ve MAX fonksiyonları kullanılarak belirli bir sütundaki en küçük veya en büyük değerler kolayca bulunabilir.
COUNT, AVG, SUM: Verilerin Sayılması, Ortalama ve Toplam Değerlerin Hesaplanması
COUNT, AVG ve SUM, SQL sorgularında veri analizi için kullanılan yaygın agregat fonksiyonlarıdır. Bu fonksiyonlar, belirli bir sütundaki değerlerin sayısını (COUNT), ortalamasını (AVG) veya toplamını (SUM) hesaplamak için kullanılır. Bu fonksiyonlar, genellikle GROUP BY ifadesiyle birlikte kullanılarak verilerin gruplanması ve analiz edilmesi için kullanılır.
- COUNT Fonksiyonu: Verilerin Sayılması
- AVG Fonksiyonu: Verilerin Ortalaması
- SUM Fonksiyonu: Verilerin Toplam Değeri
Bu alt başlıklar, COUNT, AVG ve SUM fonksiyonlarının farklı kullanımlarını ve belirli bir sütundaki verilerin sayılması, ortalama ve toplam değerlerinin nasıl hesaplanacağını açıklar.
COUNT Fonksiyonu: Verilerin Sayılması:
1 2 3 | SELECT COUNT(*) AS film_sayisi FROM filmler; |
Bu sorgu, “filmler” tablosundaki tüm filmlerin sayısını hesaplar.
AVG Fonksiyonu: Verilerin Ortalaması:
1 2 3 | SELECT AVG(imdb_puan) AS ortalama_puan FROM filmler; |
Bu sorgu, “filmler” tablosundaki filmlerin IMDb puanlarının ortalamasını hesaplar.
SUM Fonksiyonu: Verilerin Toplam Değeri:
Bu sorgu, “filmler” tablosundaki filmlerin sürelerinin toplamını hesaplar.
Bu şekilde, COUNT, AVG ve SUM fonksiyonları kullanılarak veri analizi yapılabilir ve belirli bir sütundaki verilerin özetini alınabilir.
IN Operatörü: Birden Fazla Değere Göre Filtreleme
IN operatörü, SQL sorgularında bir sütunun birden fazla değere göre filtrelenmesini sağlar. Bu operatör, belirli bir sütunda bulunan değerlerin bir liste veya alt sorgu içinde belirtilen değerlere eşleşip eşleşmediğini kontrol eder. IN operatörü, birden fazla değeri tek bir sorguda belirtmek ve bu değerlere göre filtreleme yapmak için kullanılır.
Alt Başlık:
- IN Operatörünün Kullanımı
- IN Operatörü ile Alt Sorgu Kullanımı
Bu alt başlıklar, IN operatörünün farklı kullanım biçimlerini ve nasıl çalıştığını açıklar.
IN Operatörünün Kullanımı:
- IN operatörü, WHERE ifadesinde kullanılarak bir sütunun birden fazla değere göre filtrelenmesini sağlar.
- IN operatörü, bir liste içinde belirtilen değerlerle eşleşen kayıtları döndürür.
- IN operatörü, virgülle ayrılmış bir liste içinde belirtilen değerlerle eşleşen kayıtları döndürür.
IN Operatörü ile Alt Sorgu Kullanımı:
- IN operatörü, bir alt sorgu kullanılarak da çalıştırılabilir. Bu durumda, alt sorgu içinde belirtilen değerlerle eşleşen kayıtlar döndürülür.
Örnekler:
- IN Operatörünün Kullanımı:
1 2 3 4 | SELECT * FROM filmler WHERE yonetmen IN ('Christopher Nolan', 'Steven Spielberg'); |
Bu sorgu, “filmler” tablosundaki “yonetmen” sütununda “Christopher Nolan” veya “Steven Spielberg” olan tüm filmleri seçer.
- IN Operatörü ile Alt Sorgu Kullanımı:
1 2 3 4 | SELECT * FROM filmler WHERE yonetmen IN (SELECT DISTINCT yonetmen FROM filmler WHERE yil > 2000); |
Bu sorgu, “filmler” tablosundaki “yonetmen” sütununda, 2000 yılından sonra bir film çeken tüm yönetmenlerin filmlerini seçer.
BETWEEN: Bir Aralıktaki Değerleri Filtreleme
BETWEEN operatörü, SQL sorgularında belirli bir aralıktaki değerleri filtrelemek için kullanılır. BETWEEN operatörü, bir sütundaki değerlerin belirli bir aralık içinde olup olmadığını kontrol etmek için kullanılır. Bu, özellikle sayısal veya tarih verilerini filtrelemek için yararlıdır.
Alt Başlık:
- BETWEEN Operatörünün Kullanımı
Bu alt başlık, BETWEEN operatörünün nasıl kullanıldığını ve değerleri belirli bir aralık içine filtrelemede nasıl işlev gördüğünü açıklar.
BETWEEN: Belirli Bir Aralıktaki Değerleri Seçme
BETWEEN operatörü, SQL sorgularında belirli bir aralıktaki değerleri seçmek için kullanılır. Bu operatör, bir değerin başlangıç ve bitiş değerleri arasında olup olmadığını kontrol eder. Aralık, sayısal, tarih veya zaman değerleri olabilir.
Konu Anlatımı:
BETWEEN operatörü, genellikle WHERE koşulu içinde kullanılır. Sözdizimi aşağıdaki gibidir:
1 2 3 4 | SELECT * FROM tablo_adı WHERE sütun_adı BETWEEN değer1 AND değer2; |
Bu sorgu, “sütun_adı” sütunundaki değerlerin “değer1” ve “değer2” arasında olduğu tüm satırları seçer.
Örnekler:
- Sayısal Değerlerin Seçimi:
1 2 3 4 | SELECT * FROM filmler WHERE yil BETWEEN 1990 AND 2000; |
Bu sorgu, “filmler” tablosundaki “yil” sütunundaki değerlerin 1990 ile 2000 arasında olduğu tüm filmleri seçer.
- Tarih Değerlerinin Seçimi:
1 2 3 4 5 | SELECT * FROM elestiriler WHERE elestiri_tarihi BETWEEN '2024-04-01' AND '2024-04-30'; |
Bu sorgu, “elestiriler” tablosundaki “elestiri_tarihi” sütunundaki değerlerin 2024 yılının Nisan ayı boyunca olan tüm eleştirileri seçer.
LIKE: Desen Eşleştirme ile Veri Filtreleme
LIKE, SQL sorgularında desen eşleştirmesi yaparak verileri filtrelemek için kullanılan bir operatördür. LIKE operatörü, bir sütunun değeri ile belirli bir deseni karşılaştırarak eşleşen veya eşleşmeyen verileri seçmek için kullanılır. Bu, özellikle metin tabanlı sütunlardaki belirli bir kelimeyi veya deseni içeren verileri seçmek için yararlıdır.
LIKE operatörünün nasıl kullanıldığını ve desen eşleştirmesi ile verilerin nasıl filtrelenmesinin sağlandığını açıklar.
LIKE Operatörü: Desen Eşleştirme ile Veri Filtreleme:
1 2 3 4 | SELECT * FROM filmler WHERE film_ad LIKE '%Harry Potter%'; |
Bu sorgu, “filmler” tablosundaki “film_ad” sütununda “Harry Potter” ifadesini içeren tüm filmleri seçer. “%” karakteri, herhangi bir karakter dizisinin yerine geçer ve desenin başında ve sonunda kullanıldığında sıfır veya daha fazla karakter dizisini temsil eder.
LIKE Operatörü ile Desen Eşleştirme:
1 2 3 4 | SELECT * FROM filmler WHERE yonetmen LIKE 'Christopher Nolan%'; |
u sorgu, “filmler” tablosundaki “yonetmen” sütununda “Christopher Nolan” ile başlayan tüm filmleri seçer. “%” karakteri yine herhangi bir karakter dizisinin yerine geçer ancak sadece desenin sonunda kullanıldığında geçerlidir. Bu nedenle, “Christopher Nolan” ile başlayan ancak sonrasında herhangi bir karakter dizisi gelebilecek olan tüm değerleri seçer.
LIKE operatörü, SQL sorgularında metin tabanlı sütunlardaki belirli desenlere sahip verileri seçmek için çok kullanışlı bir araçtır. Desenlerin kullanımıyla, veritabanındaki istenilen verilere hızlı ve etkili bir şekilde erişilebilir.
Wildcards (Genel Karakterler): Desen Eşleştirmesi için Özel Karakterler
Wildcards, SQL sorgularında desen eşleştirmesi yapmak için kullanılan özel karakterlerdir. Desen eşleştirmesi, belirli bir desene uyan veya uymayan verileri seçmek için kullanılır. Genel karakterler, LIKE operatörü ile birlikte kullanılarak veri filtreleme işlemlerinde çok işe yarar.
- Genel Karakterlerin Kullanımı
- Genel Karakterlerin Türleri
Bu alt başlıklar, genel karakterlerin farklı türlerini ve nasıl kullanıldığını açıklar.
Genel Karakterlerin Kullanımı:
- % (Yüzde İşareti): Herhangi bir karakter dizisini temsil eder. Sıfır, bir veya birden fazla karakter dizisi olabilir.
- _ (Alt Çizgi): Tek bir karakteri temsil eder. Herhangi bir karakter yerine geçer.
Genel Karakterlerin Türleri:
- % (Yüzde İşareti): Desenin başında, sonunda veya her iki tarafında kullanılabilir.
- _ (Alt Çizgi): Desen içinde herhangi bir pozisyonda kullanılabilir.
Örnekler:
- % (Yüzde İşareti) Kullanımı:
1 2 3 4 | SELECT * FROM filmler WHERE film_ad LIKE '%Harry Potter%'; |
Bu sorgu, “filmler” tablosundaki “film_ad” sütununda “Harry Potter” ifadesini içeren tüm filmleri seçer.
_ (Alt Çizgi) Kullanımı:
1 2 3 4 | SELECT * FROM filmler WHERE film_ad LIKE '_arry Potter%'; |
Bu sorgu, “filmler” tablosundaki “film_ad” sütununda ikinci karakteri “a” olan ve “arry Potter” ile başlayan tüm filmleri seçer.
Wildcards, SQL sorgularında desen eşleştirmesi yapmak için güçlü bir araçtır ve veri filtreleme işlemlerini daha esnek hale getirir.
JOIN: İlişkili Tablolar Arasında Veri Birleştirme
JOIN, SQL sorgularında ilişkili tablolar arasında verilerin birleştirilmesi için kullanılan bir operatördür. İlişkili tablolar, genellikle yabancı anahtarlar aracılığıyla bağlanmış tablolardır. JOIN operatörü, bu ilişkili tablolar arasındaki ilişkileri kullanarak verileri birleştirir ve tek bir sonuç kümesi olarak döndürür.
JOIN operatörü, genellikle FROM ifadesi içinde kullanılır ve birleştirme işlemini belirli bir koşula göre gerçekleştirir. SQL’de yaygın olarak kullanılan JOIN türleri şunlardır: INNER JOIN, LEFT JOIN, RIGHT JOIN ve FULL JOIN.
- INNER JOIN: İki tablo arasındaki ortak alanlara göre birleştirme yapar.
- LEFT JOIN: Sol tablo ile sağ tablo arasındaki ortak alanlara göre birleştirme yapar ve sol tablodaki tüm kayıtları getirir.
- RIGHT JOIN: Sol tablo ile sağ tablo arasındaki ortak alanlara göre birleştirme yapar ve sağ tablodaki tüm kayıtları getirir.
- FULL JOIN: İki tablo arasındaki tüm kayıtları birleştirir.
Örnekler:
- INNER JOIN Örneği:
1 2 3 4 5 | SELECT * FROM filmler INNER JOIN elestiriler ON filmler.film_id = elestiriler.film_id; |
Bu sorgu, “filmler” ve “elestiriler” tablolarını birleştirir ve sadece ortak film ID’lerine sahip satırları getirir. Yani, sadece iki tabloda da ortak olan filmleri seçer.
- LEFT JOIN Örneği:
1 2 3 4 5 | SELECT * FROM filmler LEFT JOIN elestiriler ON filmler.film_id = elestiriler.film_id; |
Bu sorgu, “filmler” tablosundaki tüm filmleri getirir ve bu filmlere eşleşen eleştiri varsa onları da getirir. Eğer eleştiri yoksa bile film bilgilerini getirir.
- RIGHT JOIN Örneği:
1 2 3 4 5 | SELECT * FROM filmler RIGHT JOIN elestiriler ON filmler.film_id = elestiriler.film_id; |
Bu sorgu, “elestiriler” tablosundaki tüm eleştirileri getirir ve bu eleştirilere eşleşen film bilgilerini getirir. Eğer film bilgisi yoksa bile eleştirileri getirir.
- FULL JOIN Örneği:
1 2 3 4 5 | SELECT * FROM filmler FULL JOIN elestiriler ON filmler.film_id = elestiriler.film_id; |
Bu sorgu, “filmler” ve “elestiriler” tablolarındaki tüm bilgileri getirir. Eğer herhangi bir tabloda eşleşen bilgi yoksa bile, diğer tablodaki bilgileri getirir.
BETWEEN, COUNT, WHERE ve ORDER BY Kullanımı:
1 2 3 4 5 6 7 8 | SELECT f.film_ad, COUNT(e.elestiri_id) AS elestiri_sayisi FROM filmler AS f LEFT JOIN elestiriler AS e ON f.film_id = e.film_id WHERE f.yil BETWEEN 2000 AND 2010 GROUP BY f.film_ad ORDER BY elestiri_sayisi DESC; |
Bu sorgu, 2000 ile 2010 yılları arasında yayınlanan filmleri seçer. Her filmin eleştiri sayısını sayar, en çok eleştiri alan filmden en az eleştiri alan filme doğru sıralar.
- IN, AS ve LIMIT Kullanımı:
1 2 3 4 5 6 7 | SELECT f.film_ad, e.puan FROM filmler AS f INNER JOIN elestiriler AS e ON f.film_id = e.film_id WHERE f.yonetmen IN ('Christopher Nolan', 'Quentin Tarantino') LIMIT 5; |
Bu sorgu, Christopher Nolan veya Quentin Tarantino tarafından yönetilen filmleri seçer. İlgili eleştirileri getirir ve sadece ilk 5 sonucu gösterir.
- AS, WHERE ve ORDER BY Kullanımı:
1 2 3 4 5 6 7 | SELECT f.film_ad AS film, e.elestiri_metin AS yorum FROM filmler AS f INNER JOIN elestiriler AS e ON f.film_id = e.film_id WHERE e.elestiri_tarihi BETWEEN '2023-01-01' AND '2023-12-31' ORDER BY e.elestiri_tarihi DESC; |
Bu sorgu, 2023 yılında yapılan eleştirileri seçer. Filmlerin adlarını “film” olarak, eleştiri metinlerini “yorum” olarak adlandırır ve eleştiri tarihine göre en son eleştiriden en eskiye doğru sıralar.
- COUNT, WHERE ve GROUP BY Kullanımı:
1 2 3 4 5 6 7 | SELECT f.tur, COUNT(f.film_id) AS film_sayisi FROM filmler AS f INNER JOIN elestiriler AS e ON f.film_id = e.film_id WHERE e.puan >= 8 GROUP BY f.tur; |
Bu sorgu, en az 8 puana sahip eleştirilere sahip filmlerin türlerini seçer. Her türün kaç film içerdiğini sayar.
- IN, ORDER BY ve LIMIT Kullanımı:
1 2 3 4 5 6 7 8 | SELECT f.film_ad, e.puan FROM filmler AS f INNER JOIN elestiriler AS e ON f.film_id = e.film_id WHERE f.yil IN (1994, 1999, 2008) ORDER BY e.puan DESC LIMIT 10; |
Bu sorgu, 1994, 1999 veya 2008 yılında yayınlanan filmleri seçer. Eleştirilere göre en yüksek puandan en düşük puana doğru sıralar ve sadece ilk 10 sonucu gösterir.
GROUP BY: Verileri Gruplama
GROUP BY ifadesi, SQL sorgularında verileri belirli bir kritere göre gruplamak için kullanılır. Bu kritere göre, aynı değere sahip olan satırlar bir grup oluşturur. Ardından, her grup için bir veya daha fazla toplama işlemi (örneğin, COUNT, SUM, AVG) yapılabilir.
GROUP BY ifadesi, genellikle SELECT ifadesi içinde kullanılır ve genellikle bir toplama işlemiyle birlikte kullanılır. Gruplama işlemi, sorgudaki belirli bir sütuna göre yapılır ve bu sütunda aynı değere sahip olan satırlar bir grup olarak ele alınır.
Örnek:
Örneğin, bir film veritabanında her türün kaç film içerdiğini görmek istediğinizi varsayalım. GROUP BY ifadesi kullanarak bu bilgiyi alabilirsiniz.
1 2 3 4 5 | SELECT tur, COUNT(*) AS film_sayisi FROM filmler GROUP BY tur; |
Bu sorgu, “filmler” tablosundaki filmleri türlerine göre gruplar. Her bir tür için kaç film olduğunu sayar ve sonuçları türe göre gruplar. Bu sayede, her bir türün kaç film içerdiğini görebilirsiniz.
HAVING: Grupların Koşullu Filtrelenmesi
HAVING ifadesi, SQL sorgularında GROUP BY ifadesi ile birlikte kullanılarak gruplar üzerinde koşullu filtreleme yapmak için kullanılır. Genellikle GROUP BY ifadesinden sonra gelir ve GROUP BY ifadesinden sonra gerçekleşen toplama işlemleri üzerinde filtreleme yapmak için kullanılır.
Açıklama:
HAVING ifadesi, genellikle GROUP BY ifadesi ile birlikte kullanılır ve gruplar üzerinde koşullu filtreleme yapmak için kullanılır. WHERE ifadesi tekil satırları filtrelerken, HAVING ifadesi grupları filtreler.
Örnekler:
- Toplamı Filtreleme:
1 2 3 4 5 6 | SELECT tur, COUNT(*) AS film_sayisi FROM filmler GROUP BY tur HAVING COUNT(*) > 3; |
Bu sorgu, her türün film sayısını sayar ve sadece 3’ten fazla film içeren türleri seçer.
- Ortalama Filtreleme:
1 2 3 4 5 6 | SELECT tur, AVG(imdb_puan) AS ortalama_puan FROM filmler GROUP BY tur HAVING AVG(imdb_puan) > 8.0; |
Bu sorgu, her türün IMDb puanının ortalamasını hesaplar ve sadece 8.0’den yüksek ortalamaya sahip türleri seçer.
- Toplamı ve Ortalamayı Filtreleme:
1 2 3 4 5 6 | SELECT tur, COUNT(*) AS film_sayisi, AVG(imdb_puan) AS ortalama_puan FROM filmler GROUP BY tur HAVING COUNT(*) > 2 AND AVG(imdb_puan) > 7.0; |
Bu sorgu, her türün film sayısını ve IMDb puanının ortalamasını hesaplar ve sadece 2’den fazla film içeren ve 7.0’den yüksek bir IMDb puan ortalamasına sahip türleri seçer.
- Toplamı ve Ortalamayı Filtreleme (Alt Sorgu Kullanarak):
1 2 3 4 5 6 7 8 9 10 | SELECT tur, COUNT(*) AS film_sayisi, AVG(imdb_puan) AS ortalama_puan FROM filmler GROUP BY tur HAVING COUNT(*) > ( SELECT COUNT(*) FROM filmler WHERE yil > 2000 ) AND AVG(imdb_puan) > ( SELECT AVG(imdb_puan) FROM filmler WHERE yil > 2000 ); |
Bu sorgu, 2000’den sonraki yıllarda yayınlanan filmlerin toplam sayısının ve IMDb puanının ortalamasının üzerinde olan türleri seçer.
MYSQL Sorgu Örnekleri
Örnek 1: Tüm filmleri listeleme
1 2 3 | SELECT * FROM filmler; |
Örnek 2: filmler tablosundan 1990 ve 2000 yılları arasındaki filmleri listeleme
1 2 3 | SELECT * FROM filmler WHERE yil BETWEEN 1990 AND 2000; |
Örnek 3: En yüksek IMDb puanına sahip filmi listeleme
1 2 3 | SELECT * FROM filmler ORDER BY imdb_puan DESC LIMIT 1; |
Örnek : Tüm yönetmenleri listeleme
1 2 3 4 | SELECT DISTINCT yonetmen FROM filmler; |
Örnek : Kaç farklı yönetmen olduğunu listeleyin
1 2 3 4 | SELECT COUNT(DISTINCT yonetmen) AS farkli_yonetmen_sayisi FROM filmler; |
Örnek : “Dram” türüne ait filmleri listeleme
1 2 3 | SELECT * FROM filmler WHERE tur LIKE '%dram%'; |
Örnek : 100 dakikanın altındaki filmleri listeleme
1 2 3 | SELECT * FROM filmler WHERE sure < 100; |
Örnek : 100 dakikanın altındaki filmlerin sayısını, en kısa ve en uzun süreyi, ve ortalama süreyi bulan sorgulama
1 2 3 4 5 6 7 8 9 | SELECT COUNT(*) AS film_sayisi, MIN(sure) AS en_kisa_sure, MAX(sure) AS en_uzun_sure, AVG(sure) AS ortalama_sure FROM filmler WHERE sure < 100; |
Örnek : Belirli bir türde olan filmlerden 2000 yılından önce çıkanları ve 90 dakikadan kısa sürenleri listeleme
1 2 3 4 5 | SELECT * FROM filmler WHERE tur LIKE '%Dram%' AND yil < 2000 AND sure < 100; |
Örnek : Belirli bir türdeki filmlerden en yüksek IMDb puanına sahip olanı veya 2000 yılından önce çıkanları listeleme
1 2 3 4 5 6 | SELECT * FROM filmler WHERE (tur LIKE '%Aksiyon%' AND imdb_puan = (SELECT MAX(imdb_puan) FROM filmler WHERE tur LIKE '%Aksiyon%')) OR yil < 2000; |
Örnek : Belirli bir yıldan önce çıkan filmlerin eleştirmenlerini listeleme
1 2 3 4 5 | SELECT DISTINCT elestirmen FROM elestiriler WHERE film_id IN (SELECT film_id FROM filmler WHERE yil < 2000); |
Örnek : Boş eleştiri metni olan filmleri listeleme
1 2 3 4 5 | SELECT * FROM filmler WHERE film_id IN (SELECT film_id FROM elestiriler WHERE elestiri_metin IS NULL); |
Örnek : Eleştiri yapılmamış filmleri listeleme
1 2 3 4 5 | SELECT * FROM filmler WHERE film_id NOT IN (SELECT film_id FROM elestiriler); |
Örnek : Boş postere sahip filmleri listeleme
1 2 3 4 5 | SELECT * FROM filmler WHERE poster IS NULL; |
Örnek : En son eklenen 10 eleştiriyi listeleme
1 2 3 | SELECT * FROM elestiriler ORDER BY elestiri_tarihi DESC LIMIT 10; |
Örnek : En yüksek IMDb puanına sahip olan 5 filmi listeleme
1 2 3 | SELECT * FROM filmler ORDER BY imdb_puan DESC LIMIT 5; |
Örnek : Türü “Aksiyon” olan ve en yüksek IMDb puanına sahip 3 filmi listeleme
1 2 3 | SELECT * FROM filmler WHERE tur LIKE '%Aksiyon%' ORDER BY imdb_puan DESC LIMIT 3; |
Örnek : 2010 yılından önceki tüm filmleri en son eklenen 5 eleştirisiyle birlikte listeleme
1 2 3 4 5 6 7 8 | SELECT f.*, e.* FROM filmler f LEFT JOIN elestiriler e ON f.film_id = e.film_id WHERE f.yil < 2010 ORDER BY e.elestiri_tarihi DESC LIMIT 5; |
Örnek : 120 dakikaya en yakın 5 filmi listeleme
1 2 3 4 5 6 | SELECT * FROM filmler ORDER BY ABS(sure - 120) LIMIT 5; |
Örnek : Her yıl içinde en uzun süreye ait olan filmleri listeleme
1 2 3 4 5 6 7 8 9 | SELECT f.* FROM filmler f INNER JOIN ( SELECT yil, MAX(sure) AS max_sure FROM filmler GROUP BY yil ) AS max_sure_tablosu ON f.yil = max_sure_tablosu.yil AND f.sure = max_sure_tablosu.max_sure; |
Örnek: Tüm türleri listeleme(bazı türler virgülle ayrılmıştır sorguyu buna dikkat ederek yapın)
1 2 3 4 5 6 7 8 | SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(tur, ',', numbers.n), ',', -1) AS tur FROM filmler INNER JOIN ( SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 -- Türlerin maksimum sayısı kadar tekrar eden sıralı sayılar ) AS numbers ON CHAR_LENGTH(tur) - CHAR_LENGTH(REPLACE(tur, ',', '')) >= numbers.n - 1; |
Eğer türler virgülle ayrılmış olmasaydı sorgu şu şekilde olacaktır
1 2 3 4 | SELECT DISTINCT tur FROM filmler; |
Regular Exp ile virgülleri parçalayarak sorgulama yapılacaksa şu şekilde de yapılabilir
1 2 3 4 | SELECT DISTINCT REGEXP_SUBSTR(tur, '[^,]+') AS tur FROM filmler; |
REGEXP_SUBSTR()
fonksiyonu, bir dizeden belirli bir deseni (regular expression) eşleştiren ve bu eşleşmeyi döndüren bir SQL fonksiyonudur. Bu fonksiyon, bir dizenin belirli bir deseni içeren alt dizisini bulmak için kullanılır.
Sonuç
Bu makalede, MySQL veritabanı yönetimi temel kavramlarını ele aldık ve MySQL ile ilişkili bir dizi önemli konuyu açıkladık. Başlangıç seviyesinden başlayarak, veritabanı oluşturma, tablo tanımlama ve veri manipülasyonu gibi temel işlemlerden başlayarak, daha ileri düzey konulara kadar birçok konuyu ele aldık.
Makalede ele alınan ana konular şunlardır:
- Veri Tabanı Oluşturma ve Tabloların Tanımlanması: MySQL’de veritabanı oluşturma işlemi ve tabloların nasıl tanımlanacağı konusunda bilgi verildi. Tablolar arasındaki ilişkiler ve yabancı anahtarlar da bu bölümde açıklandı.
- Veri Ekleme, Güncelleme ve Silme İşlemleri: INSERT INTO, UPDATE ve DELETE ifadeleri kullanılarak veritabanına veri ekleme, güncelleme ve silme işlemleri nasıl gerçekleştirileceği anlatıldı.
- Veri Sorgulama: SELECT ifadesi ile birlikte WHERE, ORDER BY, LIMIT, GROUP BY ve HAVING ifadeleri kullanılarak veri sorgulama işlemleri yapıldı. Veritabanından veri seçme, sıralama, sınırlama ve gruplama gibi işlemler açıklandı.
- JOIN Operatörü: İlişkili tablolar arasında veri birleştirme işlemleri için JOIN operatörünün nasıl kullanılacağı öğretildi. INNER JOIN, LEFT JOIN, RIGHT JOIN ve FULL JOIN gibi farklı türlerde JOIN operatörleri anlatıldı.
- Diğer Kavramlar: BETWEEN, IN, AS, COUNT, AVG, SUM, LIKE, NULL Values ve Aliases gibi diğer önemli kavramlar da açıklandı ve örnekler verildi.
Bu makale, MySQL ile veri tabanı yönetimi konusunda temel bilgileri edinmek isteyenler için bir kılavuz niteliğindedir. MySQL’in güçlü ve esnek yapısını kullanarak veri tabanı yönetimi becerilerini geliştirmek isteyenler için iyi bir başlangıç noktası olabilir.
Yorum Yap