{count, plural, one {Kurs} other {Kurs}}
SQL sorgusu nedir?
SQL, Structured Query Language ifadesinin kısaltmasıdır. Çoğu kişi bunu “S-Q-L” ya da “si-kıuıl (sequel)” olarak telaffuz eder. SQL, programlamada kullanılır ve bir veritabanında depolanan verileri SQL sorguları ile yönetmek üzere tasarlanmıştır.
En yaygın veritabanı yönetim sistemi (DBMS) türü, ilişkisel veritabanı yönetim sistemidir (RDBMS). Bu yapıda, varlıklar ve değişkenler arasındaki ilişkileri içeren, yani yapılandırılmış verileri saklarız. Bu varlıklar ve değişkenler, sütun ve satırlardan oluşan tablolar kümesi olarak düzenlenir. En popüler RDBMS’lerden bazıları MYSQL, Oracle, IBM DB2 ve Microsoft SQL Server veritabanıdır.
RDBMS’te veriler, tablo adı verilen bir veritabanı nesnesinde saklanır. Bir veritabanı genellikle birden fazla tablo içerir. Her tablo benzersiz bir adla tanımlanır ve satır ve sütunlar halinde yapılandırılmış, ilişkili veri kayıtlarının bir koleksiyonunu içerir.
Bir sütun dikey bir varlıktır; alan olarak adlandırılır ve bir tablodaki belirli bir alanla ilişkili tüm bilgileri içerir. Bir tablodaki her satır bir kayıt olarak bilinir; tablodaki yatay varlıktır.
Bir veritabanının yapısı Excel’e oldukça benzer gelebilir. Ancak genel olarak veritabanları, Excel e-tablolarından daha güçlüdür. Bunu söyleyebileceğiniz üç neden şunlardır:
- Veritabanları birçok diğer programlama diliyle etkileşime girebilir — bu da programcıya verilerden bilgi yönetme ve alma konusunda daha fazla güç verir.
- Veritabanları, Excel e-tablolarından daha fazla veriyi işleyebilir. Excel en fazla 1 milyon satır veriyi kaldırabilirken bir veritabanı milyarlarca satırı işleyebilir.
- Veritabanları internete daha kolay bağlanabilir; bu sayede yüzlerce kullanıcı ve uygulama aynı anda erişebilir.
SQL’e başlamak için sabırsızlanıyor musunuz? DataCamp’in harika kaynakları var; SQL öğrenin sayfası, SQL becerilerinizi geliştirmeniz için takip edebileceğiniz patikaları öne çıkarır!
Şimdi SQL Sorgularına biraz daha derinlemesine dalalım…
Bir SQL sorgusu, çeşitli SQL komutlarının bir araya getirilmesiyle oluşturulan bir ifadedir. Bu SQL komutları birlikte, bir veritabanında saklanan ve bir DBMS aracılığıyla yönetilen verilerinize erişmek, onları yönetmek, değiştirmek, güncellemek, denetlemek ve düzenlemek için belirli bir görevi yerine getirir.
Neden SQL kullanılır?
SQL son derece çok yönlüdür ve veri bilimcilerden mühendislere, pazarlamacılardan insan kaynakları ekiplerine kadar herkes tarafından kullanılır — kısacası, daha veri okuryazarı olmak isteyen herkes tarafından!
Sadece teknoloji sektörlerinde ya da büyük şirketlerle sınırlı değildir. Her ölçekte çok sayıda sektör doğrudan veya dolaylı olarak kullanır. Örneğin, ürettikleri veri miktarı yüksek olduğundan finans ve sağlık sektörlerinde çalışan profesyoneller sıklıkla SQL kullanır.
Veri yeni bir emtiadır ve büyük veriyi ele alma ve onunla çalışma söz konusu olduğunda SQL oldukça güçlü bir araçtır. SQL’den en iyi şekilde nasıl yararlanabileceğinizi merak ediyorsanız, DataCamp’in SQL ile neler yapabilirsiniz başlıklı eğitimine göz atın.
SQL sorguları nasıl yazılır
Sorgu formülasyonunun kendisine geçmeden önce şu soruyu düşünelim: “SQL sorgumu nerede yazar ve çalıştırırım?”
DataCamp’in SQL Öğrenin merkezi, Mac veya Windows’ta SQL ile çalışmaya başlamanıza yardımcı olacak iyi bir başlangıç noktasıdır.
Ama eğer sadece veritabanlarının yerel dili olan SQL’i öğrenmeye başlamak istiyorsanız, DataCamp’in SQL’e Giriş kursu ile başlayabilirsiniz. Bu kurs, PostgreSQL, MySQL, SQL Server ve Oracle gibi pek çok veritabanında ortak olan SQL söz dizimini öğretir. DataCamp’in yerleşik SQL arayüzüyle çalışacak ve bir RDBMS’in ilk kurulum zahmetleriyle uğraşmayacaksınız.
DataCamp’in ayrıca kendi not defterlerinizi oluşturabileceğiniz harika bir not defteri aracı var: DataLab. DataLab, verileri analiz etmenize, ekibinizle işbirliği yapmanıza ve içgörüleri paylaşmanıza olanak tanıyan bulut tabanlı bir işbirlikçi not defteridir. DataLab, veri bilimi öğreniminden veri bilimi yapmaya geçmeniz için tasarlanmıştır. Yerleşik veri kümeleriyle, dakikalar içinde veri analizine başlayabilirsiniz.
Şimdi bu eğitimde çalışacağımız veri kümesine bir göz atalım.
‘films’ ile başlayacağız — 10 filmin verilerini tutan bir SQL tablosu. Bu veriler, az önce bahsettiğimiz DataCamp’in SQL’e Giriş kursunda kullanılan IMDb Film veri kümesinin yalnızca küçük bir alt kümesidir.
|
title |
release_year |
budget |
gross |
imdb_score |
|
|
1 |
The Godfather |
1972 |
6000000 |
134821952 |
9.2 |
|
2 |
The Dark Knight |
2008 |
185000000 |
533316061 |
9 |
|
3 |
The Godfather: Part II |
1974 |
13000000 |
57300000 |
9 |
|
4 |
Schindler's List |
1993 |
22000000 |
96067179 |
8.9 |
|
5 |
Pulp Fiction |
1994 |
8000000 |
107930000 |
8.9 |
|
6 |
The Lord of the Rings: The Return of the King |
2003 |
94000000 |
377019252 |
8.9 |
|
7 |
Fight Club |
1999 |
63000000 |
37023395 |
8.8 |
|
8 |
Inception |
2010 |
160000000 |
292568851 |
8.8 |
|
9 |
Star Wars: Episode V - The Empire Strikes Back |
1980 |
18000000 |
290158751 |
8.8 |
|
10 |
The Shawshank Redemption |
1994 |
25000000 |
28341469 |
9.3 |
‘films’ tablosunda on kayıt vardır — film adları 10 satıra dağıtılmıştır. Alanlar, filmle ilgili bilgileri tutan tablodaki beş sütundur.
- ‘title’ filmin adıdır
- ‘release_year’ filmin vizyona girdiği yıldır
- ‘budget’ filmin Amerikan doları cinsinden yapım maliyetidir
- ‘gross’ filmin Amerikan doları cinsinden ne kadar hasılat elde ettiğidir.
- ‘imdb_score’ IMDb kullanıcılarının gönderdiği oylardan üretilen, film eleştirmenlerinden gelmeyen puanları gösterir.
Yukarıdaki ‘films’ tablosunu keşfetmek için bazı temel SQL komutlarıyla egzersize başlayalım. Çözüm sorgularını hemen çalıştırmanızı beklemiyoruz… bunun yerine bazı temel kavramları öğrenmek için bir temel olarak kullanın. Bu nedenle, sorguları hangi platformda çalıştıracağınıza henüz karar vermediyseniz endişelenmeyin.
Temel SQL sorguları
SQL anahtar sözcüklerinin veya komutlarının büyük/küçük harfe duyarlı olmadığını unutmayın; ‘select’ yazmak ‘SELECT’ yazmakla aynıdır.
Yazdığımız her SQL ifadesinin sonuna noktalı virgül koyacağız. Bu, bazı veritabanı sistemlerinde bir standarttır ve her SQL ifadesini ayırmak, böylece sunucuya aynı çağrıda yürütülebilmelerini sağlamak için yapılır.
Bir soruyla başlayalım. S1: Tabloda hangi filmler saklanıyor?
SELECT - FROM
SELECT ifadesi, veritabanı tablosundan görmek istediğiniz alanları seçmek için kullanılır. S1 için ‘title’ alanını istiyorsunuz.
FROM komutu/anahtar sözcüğü, verileri hangi veritabanı tablosundan çekeceğinizi belirtir. Unutmayın, bir veritabanı birden çok tablodan oluşabilir.
Sözdizimi: SELECT column1, column2, … FROM table_name;
SQL sorgusu: SELECT title FROM films;
Sonuç:
|
title |
|
|
1 |
The Godfather |
|
2 |
The Dark Knight |
|
3 |
The Godfather: Part II |
|
4 |
Schindler's List |
|
5 |
Pulp Fiction |
|
6 |
The Lord of the Rings: The Return of the King |
|
7 |
Fight Club |
|
8 |
Inception |
|
9 |
Star Wars: Episode V - The Empire Strikes Back |
|
10 |
The Shawshank Redemption |
Şunu merak ediyor olabilirsiniz: Ya yukarıdaki tabloyu hiç görmemiş olsaydınız ve SELECT ifadesinde belirteceğiniz sütunların adlarını bilmiyor olsaydınız? Güzel soru! Eğitimde daha sonra sihirli ‘*’ (yıldız işareti) hakkında öğreneceğiz.
WHERE
S2: 2010 yılında vizyona girecek filmler hangileri?
Bu soru için, şu koşulu sağlayan film adlarına sahip olacak şekilde filmleri “filtrelemek” istersiniz: ‘release_year’ 2010’dur.
Belirtilen bir koşulu sağlayan kayıtları yalnızca ‘WHERE’ koşuluyla çekebilirsiniz.
Sözdizimi: SELECT column1, column2, … FROM table_name WHERE condition;
SQL sorgusu: SELECT title, release_year FROM films WHERE release_year = 2010;
Sonuç:
|
title |
release_year |
|
|
1 |
Inception |
2010 |
WHERE Koşulunda Operatörler
WHERE koşulu içinde aşağıdaki operatörler kullanılabilir:
|
Operatör |
Açıklama |
|
= |
Eşittir |
|
> |
Büyüktür |
|
< |
Küçüktür |
|
>= |
Büyük veya eşit |
|
<= |
Küçük veya eşit |
|
<> veya != |
Eşit değil. |
|
BETWEEN |
Belirli bir aralık içinde |
|
LIKE |
Belirtilen deseni eşleyen bir kalıbı arar |
|
IN |
Birden fazla olası değeri belirtir |
SQL’de Aritmetik
SQL’de +, -, *, / gibi matematiksel sembollerle basit aritmetik işlemleri yapabilirsiniz. Ancak bu sembollerle yalnızca sütunlar arasında işlemler yapabilirsiniz. İşlem sırasını yönetmek için parantez de kullanabilirsiniz.
Ama endişelenmeyin; daha karmaşık işlemler için SQL’de aynı satır içinde işlemler yapmanızı sağlayan toplulaştırma işlevleri vardır. Bu konuya eğitimde daha sonra değineceğiz.
S3: ‘films’ tablosundaki her filmin elde ettiği kârı hesaplayın.
İpucu: Gross - Budget işlemini yapın ve sonucu AS kullanarak ‘movie_profit’ adlı bir sütunda kaydedin
SQL sorgusu: SELECT title, (gross - budget) AS movie_profit FROM films
Sonuç:
|
title |
movie_profit |
|
|
1 |
The Godfather |
128821952 |
|
2 |
The Dark Knight |
348316061 |
|
3 |
The Godfather: Part II |
44300000 |
|
4 |
Schindler's List |
74067179 |
|
5 |
Pulp Fiction |
99930000 |
|
6 |
The Lord of the Rings: The Return of the King |
283019252 |
|
7 |
Fight Club |
-25976605 |
|
8 |
Inception |
132568851 |
|
9 |
Star Wars: Episode V - The Empire Strikes Back |
272158751 |
|
10 |
The Shawshank Redemption |
3341469 |
Uyarı: Sıkı sinemaseverler Fight Club için negatif kârdan rahatsız olabilir. Kullanılan formül ((gross - budget) AS movie_profit) çok basittir ve gerçekten de formül ve veriler göz önüne alındığında sonuç doğrudur.
Ancak yukarıdaki örnek, veri toplama sürecine dikkat etmeniz gerektiğini hatırlatmak içindir! Basit veri keşfi bile, veri toplama veya veri depolama sürecindeki bir hatadan (veri türü değişimi vb.) kaynaklanabilecek veri hatalarını ortaya çıkarabilir — bu, kullanılan veri kümesi oluşturulurken yaşanmış olabilir.
Çalıştığınız verilere daima dikkat edin!
AND, OR, NOT
WHERE koşulu, AND, OR ve NOT operatörleriyle diğer koşullu ifadelerle birleştirilebilir. AND ve OR operatörleri, birden fazla koşula göre kayıtları filtrelemek için kullanılırken NOT operatörü bir koşulu olumsuzlamak için kullanılır.
Kullanımlarını örneklerle görelim:
S4: 2010 yılında vizyona giren ve puanı 9’un üzerinde olan filmler hangileri?
Sözdizimi: SELECT column1, column2, … FROM table_name WHERE condition1 AND condition2 AND condition3 AND condition4…..;
SQL sorgusu: SELECT title, release_year, imdb_score FROM films WHERE release_year = 2010 AND imdb_score >= 9;
AND operatörü, AND ile ayrılan tüm koşullar doğruysa bir kaydı gösterir.
‘films’ tablosunda ‘Inception’ filmi var. release_year = 2010 koşulu için doğrudur, ancak imdb_score >= 9 için yanlıştır; dolayısıyla her iki AND koşulunu da karşılamaz. Bu nedenle sorgu boş bir sonuç kümesi döndürür.
S5: 2010 yılında vizyona giren veya puanı 9’un üzerinde olan filmler hangileri?
Sözdizimi: SELECT column1, column2, … FROM table_name WHERE condition1 OR condition2 OR condition3 OR condition4…..;
SQL sorgusu: SELECT title, release_year, imdb_score FROM films WHERE release_year = 2010 OR imdb_score >= 9;
Sonuç:
|
title |
release_year |
imdb_score |
|
|
1 |
The Godfather |
1972 |
9.2 |
|
2 |
The Dark Knight |
2008 |
9 |
|
3 |
The Godfather: Part II |
1974 |
9 |
|
4 |
Inception |
2010 |
8.8 |
|
5 |
The Shawshank Redemption |
1994 |
9.3 |
OR operatörü, OR ile ayrılan koşullardan herhangi biri DOĞRU ise bir kaydı gösterir.
The Godfather, The Dark Knight, The Godfather: Part II, The Shawshank Redemption filmleri imdb_score >= 9 koşulunu sağlarken, Inception release_year = 2010 koşulunu sağlar ve böylece OR koşulu için listeye girerler.
S6: 2010 dışında bir vizyon yılına sahip filmler hangileri?
Sözdizimi: SELECT column1, column2, … FROM table_name WHERE NOT condition1;
SQL sorgusu: SELECT title, release_year FROM films WHERE NOT release_year = 2010;
Sonuç:
|
title |
release_year |
|
|
1 |
The Godfather |
1972 |
|
2 |
The Dark Knight |
2008 |
|
3 |
The Godfather: Part II |
1974 |
|
4 |
Schindler's List |
1993 |
|
5 |
Pulp Fiction |
1994 |
|
6 |
The Lord of the Rings: The Return of the King |
2003 |
|
7 |
Fight Club |
1999 |
|
8 |
Star Wars: Episode V - The Empire Strikes Back |
1980 |
|
9 |
The Shawshank Redemption |
1994 |
Şöyle de yazabilirsiniz: SELECT title, release_year FROM films WHERE release_year != 2010;
Bu da yukarıdakiyle aynı sonucu verir. SQL’de aynı sonuca ulaşmanın birden fazla yolu olabilir. Ancak bazı sorgular diğerlerinden daha performanslı olabilir. Performans; veri miktarı, sorguda kullanılan komutlar, veritabanının yapısı, veri türü vb. birçok faktöre bağlı olabilir. Bu, bu SQL sorgu eğitiminde ele almayacağımız biraz daha karmaşık ve ileri bir konudur.
Yine de ilginizi çekiyorsa, DataCamp’in Veritabanı Tasarımı kursu bu konulara daha derinlemesine girer.
ORDER BY
ORDER BY anahtar sözcüğü, sonucu artan (ASC anahtar sözcüğü) veya azalan düzende (DESC anahtar sözcüğü) sıralamak için kullanılır. Varsayılan olarak artan düzende sıralanır.
S7: Tabloda saklanan filmler hangileri? Sonucu release_year’a göre azalan düzende sıralayın.
Sözdizimi: SELECT column1, column2, … FROM table_name ORDER BY column1, column2, ... ASC|DESC;
SQL sorgusu: SELECT title, release_year FROM films ORDER BY release_year DESC;
Sonuç:
|
title |
release_year |
|
|
1 |
Inception |
2010 |
|
2 |
The Dark Knight |
2008 |
|
3 |
The Lord of the Rings: The Return of the King |
2003 |
|
4 |
Fight Club |
1999 |
|
5 |
Pulp Fiction |
1994 |
|
6 |
The Shawshank Redemption |
1994 |
|
7 |
Schindler's List |
1993 |
|
8 |
Star Wars: Episode V - The Empire Strikes Back |
1980 |
|
9 |
The Godfather: Part II |
1974 |
|
10 |
The Godfather |
1972 |
LIMIT
Bazen veritabanının sorgunuzu çalıştırması uzun sürebilir; özellikle veritabanında depolanan veri miktarı çok büyükse.
Bir sorguyu hızlıca test etmenin veya dönen sonucun türünden örneklemenin kolay bir yolu LIMIT işlevini kullanmaktır. LIMIT, alacağınız sonuçların sayısını sınırlandırmanızı sağlar.
S8: Tabloda saklanan en yeni 5 film hangileri?
İpucu: Sonuç kümesini release_year’a göre azalan sırada sıralayın ve ardından LIMIT kullanın.
Sözdizimi: SELECT column1, column2, … FROM table_name LIMIT x;
SQL sorgusu: SELECT title, release_year FROM films ORDER BY release_year DESC LIMIT 5;
Sonuç:
|
title |
release_year |
|
|
1 |
Inception |
2010 |
|
2 |
The Dark Knight |
2008 |
|
3 |
The Lord of the Rings: The Return of the King |
2003 |
|
4 |
Fight Club |
1999 |
|
5 |
Pulp Fiction |
1994 |
INSERT INTO
INSERT INTO, bir veritabanı tablosuna yeni kayıtlar eklemek için kullanılır. INSERT INTO ifadesini iki şekilde yazabilirsiniz:
- Hem sütun adlarını hem de karşılık gelen değerleri belirtin
Sözdizimi: INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);
- Tablonun TÜM sütunları için değer ekliyorsanız, sorguda sütun adlarını belirtmeniz gerekmez. Bu yöntemi kullanırken dikkatli olun ve değerlerin sırasının tablodaki sütunların sırasıyla aynı olduğundan emin olun.
Sözdizimi: INSERT INTO table_name VALUES (value1, value2, value3, ...);
S9: ‘The Godfather: Part III’ için tabloya şu ayrıntılarla bir kayıt ekleyin: (‘The Godfather: Part III’, 1990, 54000000, 136900000, 7.6)
Sözdizimi: SELECT column1, column2, … FROM table_name ORDER BY column1, column2,... ASC|DESC;
SQL sorgusu: INSERT INTO films (title, release_year, budget, gross, imdb_score)
VALUES (‘The Godfather: Part III’, 1970, 54000000, 136900000, 7.6);
Ortaya çıkan tablo:
|
title |
release_year |
budget |
gross |
imdb_score |
|
|
1 |
The Godfather |
1972 |
6000000 |
134821952 |
9.2 |
|
2 |
The Dark Knight |
2008 |
185000000 |
533316061 |
9 |
|
3 |
The Godfather: Part II |
1974 |
13000000 |
57300000 |
9 |
|
4 |
Schindler's List |
1993 |
22000000 |
96067179 |
8.9 |
|
5 |
Pulp Fiction |
1994 |
8000000 |
107930000 |
8.9 |
|
6 |
The Lord of the Rings: The Return of the King |
2003 |
94000000 |
377019252 |
8.9 |
|
7 |
Fight Club |
1999 |
63000000 |
37023395 |
8.8 |
|
8 |
Inception |
2010 |
160000000 |
292568851 |
8.8 |
|
9 |
Star Wars: Episode V - The Empire Strikes Back |
1980 |
18000000 |
290158751 |
8.8 |
|
10 |
The Shawshank Redemption |
1994 |
25000000 |
28341469 |
9.3 |
|
11 |
The Godfather: Part III |
1970 |
54000000 |
136900000 |
7.6 |
UPDATE
UPDATE ifadesini, bir tablodaki mevcut kayıtları değiştirmek için kullanırız.
S10: ‘The Godfather: Part III’ için release_year değerini 1970 yerine 1990 olarak düzeltin
Sözdizimi: UPDATE table_name SET column1 = value1, column2 = value2, ...WHERE condition;
SQL sorgusu: UPDATE films SET release_year = 1990 WHERE title = ‘The Godfather: Part III’;
Ortaya çıkan tablo:
|
title |
release_year |
budget |
gross |
imdb_score |
|
|
1 |
The Godfather |
1972 |
6000000 |
134821952 |
9.2 |
|
2 |
The Dark Knight |
2008 |
185000000 |
533316061 |
9 |
|
3 |
The Godfather: Part II |
1974 |
13000000 |
57300000 |
9 |
|
4 |
Schindler's List |
1993 |
22000000 |
96067179 |
8.9 |
|
5 |
Pulp Fiction |
1994 |
8000000 |
107930000 |
8.9 |
|
6 |
The Lord of the Rings: The Return of the King |
2003 |
94000000 |
377019252 |
8.9 |
|
7 |
Fight Club |
1999 |
63000000 |
37023395 |
8.8 |
|
8 |
Inception |
2010 |
160000000 |
292568851 |
8.8 |
|
9 |
Star Wars: Episode V - The Empire Strikes Back |
1980 |
18000000 |
290158751 |
8.8 |
|
10 |
The Shawshank Redemption |
1994 |
25000000 |
28341469 |
9.3 |
|
11 |
The Godfather: Part III |
1990 |
54000000 |
136900000 |
7.6 |
DELETE
DELETE ifadesi, bir tablodaki mevcut bir kaydı silmek için kullanılır.
S11: ‘films’ tablosundan ‘The Godfather: Part III’ kaydını silin.
Sözdizimi: DELETE FROM table_name WHERE condition;
SQL sorgusu: DELETE FROM films WHERE title = ‘The Godfather: Part III’;
Ortaya çıkan tablo: Başlangıçtaki orijinal tabloyla aynı, toplam 10 kayıt.
İleri seviye SQL sorguları
Q1’in sonunda sihirli ‘*’ karakterini sonraya bırakmıştık, hatırlıyor musunuz? * bir yıldız işaretidir. Bunu ‘tümü’ olarak okuyabileceğimiz kapsayıcı bir karakterdir.
Q1’e geri dönelim: Tabloda hangi filmler saklanıyor?
SELECT - FROM kullandık ve Sözdizimi: SELECT column1, column2, … FROM table_name;
Şu sorguyu kullandık: SELECT title FROM films;
Peki ‘title’ın ‘films’ tablosunda bir alan olduğunu bilmiyor olsaydınız? Ya da tablodaki herhangi bir alanın adını? Ya da veriyi tanımak için tablodaki tüm alanları isteseydiniz? İşte burada * çok işe yarar.
Sorguyu şöyle yeniden yazabiliriz: SELECT * FROM films;
Bu, tablodaki mevcut tüm alanları getirir.
SQL Joker (Wildcard) Karakterleri
LIKE
LIKE operatörü, bir sütunda belirtilen bir deseni aramak için WHERE koşulunda kullanılır.
S12: ‘The’ ile başlayan tüm film adlarını getirin
Sözdizimi: SELECT column1, column2, … FROM table_name WHERE column1 LIKE patternToMatch;
SQL sorgusu: Select * FROM films WHERE title LIKE ‘The%’;
Ortaya çıkan tablo:
|
title |
release_year |
budget |
gross |
imdb_score |
|
|
1 |
The Godfather |
1972 |
6000000 |
134821952 |
9.2 |
|
2 |
The Dark Knight |
2008 |
185000000 |
533316061 |
9 |
|
3 |
The Godfather: Part II |
1974 |
13000000 |
57300000 |
9 |
|
4 |
The Lord of the Rings: The Return of the King |
2003 |
94000000 |
377019252 |
8.9 |
|
5 |
The Shawshank Redemption |
1994 |
25000000 |
28341469 |
9.3 |
|
Joker Karakter |
Açıklama |
Kullanım: Örnek |
|
% (Yüzde) |
Sıfır veya daha fazla karakteri temsil eder |
The%: The, The Godfather, Theodore |
|
_ (Alt çizgi) |
Tek bir karakteri temsil eder |
T_e: The, Tie |
|
[ ] (Köşeli parantez) |
Parantez içindeki herhangi bir tek karakteri temsil eder |
C[ao]t: Cat, Cot ancak Coat değil |
|
^ (Şapka) |
Parantez içinde olmayan herhangi bir karakteri temsil eder |
Ca[^r]: Cat, Cab, Can ancak Car değil |
|
- (Tire) |
Belirtilen aralıktaki herhangi bir tek karakteri temsil eder |
C[a-o]: Can, Cab ancak Car, Cat değil |
Güzel olan, joker karakterleri kombinasyon halinde kullanabilmemizdir! Böylece LIKE ile birlikte joker karakterleri kullanarak oldukça karmaşık eşleşme ifadeleri oluşturabilirsiniz.
Toplulaştırma İşlevleri
SQL, Excel’deki pivot tabloda yapacağınız türden toplulaştırmalarda mükemmeldir. Toplulaştırma işlevleri, iki sütun arasında değil, bir sütun içinde—yani aynı sütundaki tüm veya bazı satırlarla—hesaplama yapabilir.
SQL’deki toplulaştırma işlevleri şunlardır:
|
İşlev |
Açıklama |
|
COUNT |
Belirli bir sütundaki kayıt sayısını sayar |
|
SUM |
Belirli bir sütundaki tüm değerleri toplar |
|
MIN |
Belirli bir sütundaki en düşük değeri döndürür |
|
MAX |
Belirli bir sütundaki en yüksek değeri döndürür |
|
AVG |
Seçilen bir grup için ortalama değeri döndürür |
S13: Tabloda saklanan en yeni film hangisidir?
SQL sorgusu: SELECT title AS latest_movie, MAX(release_year) AS released_in FROM films;
Sonuç:
|
latest_movie |
released_in |
|
|
1 |
Inception |
2010 |
GROUP BY
SQL toplulaştırma işlevleri tüm bir sütun üzerinde toplulaştırma yapar. Peki ya bir sütunun yalnızca bir bölümünü toplulaştırmak isterseniz? Örneğin, bir yılda vizyona giren film sayısını saymak isteyebilirsiniz.
İşte burada GROUP BY ifadesine ihtiyaç duyarsınız. GROUP BY, verileri gruplara ayırmanıza olanak tanır ve bu gruplar birbirinden bağımsız olarak toplulaştırılabilir.
S13: Bir yılda vizyona giren film sayısını sayın.
SQL sorgusu: SELECT release_year, COUNT(*) AS number_of_movies FROM films GROUP BY release_year;
Sonuç:
|
release_year |
number_of_movies |
|
|
1 |
1972 |
1 |
|
2 |
2008 |
1 |
|
3 |
1974 |
1 |
|
4 |
1993 |
1 |
|
5 |
1994 |
2 |
|
6 |
2003 |
1 |
|
7 |
1999 |
1 |
|
8 |
2010 |
1 |
|
9 |
1980 |
1 |
Birden çok tablodan SQL Sorgu Örnekleri
Şimdiye kadar her seferinde yalnızca bir tabloyla çalıştık. Ancak veritabanlarının ve SQL’in gerçek gücü, birden çok tablodaki verilerle çalışabilme becerisinden gelir.
RDBMS’teki "ilişkisel veritabanı" terimi, veritabanındaki tabloların birbirleriyle ilişkili olmasından gelir. Birden çok tablodan verilerin kolayca birleştirilmesini sağlayan ortak tanımlayıcılar vardır. İşte burada SQL tablo BİRLEŞTİRMELERİNİ (JOIN) kullanırız.
Kendimizi JOIN sözdizimine alıştırmak ve mümkün olan farklı JOIN türleri hakkında biraz bilgi edinmek için basit bir örnek görelim.
‘films’ tablosunda bulunan bazı filmlerin yönetmen adını tutan ‘movieDirectors’ adlı başka bir tablo düşünelim.
|
title |
director |
|
|
1 |
The Godfather |
Francis Ford Coppola |
|
2 |
The Godfather: Part II |
Francis Ford Coppola |
|
3 |
The Godfather: Part III |
Francis Ford Coppola |
|
4 |
Schindler's List |
Steven Spielberg |
|
5 |
The Dark Knight Rises |
Christopher Nolan |
Bu iki tablodaki verileri ‘title’ adlı ortak bir tanımlayıcı kullanarak birleştirebiliriz.
S14: ‘films’ tablosuna bir sütun ekleyin ve bunu ‘movieDirectors’ tablosundan yönetmen adıyla doldurun.
Sözdizimi: SELECT leftTable.column1, rightTable.column1, leftTable.column2…. FROM leftTable INNER JOIN rightTable ON leftTable.commonIdentifier = rightTable.commonIdentifier;
SQL Sorgusu: Select films.title, films.release_year, movieDirectors.director FROM films INNER JOIN movieDirectors ON films.title = movieDirectors.title
Sonuç:
|
title |
release_year |
director |
|
|
1 |
The Godfather |
1972 |
Francis Ford Coppola |
|
2 |
The Godfather: Part II |
1974 |
Francis Ford Coppola |
|
3 |
Schindler's List |
1993 |
Steven Spielberg |
Farklı SQL Join Türleri
|
JOIN |
Açıklama |
Diyagram |
|
Inner Join |
Her iki tabloda da eşleşen değerlere sahip olan kayıtları döndürür |
|
|
Left (Outer) Join |
Sol tablodaki tüm kayıtları ve sağ tablodan eşleşen kayıtları döndürür |
|
|
Right (Outer) Join |
Sağ tablodaki tüm kayıtları ve sol tablodan eşleşen kayıtları döndürür |
|
|
Full (Outer) Join |
Sol veya sağ tabloda eşleşme olduğunda tüm kayıtları döndürür |
|
Yukarıdaki örnek sorguda ‘films’ sol tablo, ‘movieDirectors’ sağ tablodur. Gerçekleştirdiğimiz INNER JOIN ile yalnızca her iki tabloda da bulunan filmleri geri aldık. Sonuç kümesi iki tablonun kesişimiydi.
SQL UNION
SQL JOIN’ler iki veri kümesini yan yana birleştirmenize olanak tanır. Ancak SQL UNION ile bir veri kümesini diğerinin üstüne yığabilirsiniz. UNION operatörü, aşağıdaki “kurallar” sağlandığında iki veya daha fazla SELECT ifadesinin sonuç kümelerini birleştirmek için kullanılır:
- Her SELECT ifadesi aynı sayıda sütuna sahip olmalıdır.
- Sütunların veri türleri de benzer olmalıdır.
- SELECT ifadelerinde kullanılan sütunlar aynı sırada olmalıdır.
Sözdizimi: SELECT column_name(s) FROM table1 UNION ALL SELECT column_name(s) FROM table2;
‘movies_2000s’ tablosunu ele alalım:
|
title |
release_year |
budget |
gross |
imdb_score |
|
|
1 |
Inception |
2010 |
160000000 |
292568851 |
8.8 |
|
2 |
The Trial of the Chicago 7 |
2020 |
35000000 |
7.7 |
Şimdi iki tabloyu birleştirecek olursak…
SQL Sorgusu: SELECT title FROM films UNION SELECT title FROM movies_2000s;
Sonuç:
|
title |
|
|
1 |
The Godfather |
|
2 |
The Dark Knight |
|
3 |
The Godfather: Part II |
|
4 |
Schindler's List |
|
5 |
Pulp Fiction |
|
6 |
The Lord of the Rings: The Return of the King |
|
7 |
Fight Club |
|
8 |
Inception |
|
9 |
Star Wars: Episode V - The Empire Strikes Back |
|
10 |
The Shawshank Redemption |
|
12 |
The Trial of the Chicago 7 |
‘Inception’ın sonuç kümesinde yalnızca bir kez göründüğünü fark etmiş olabilirsiniz. Bunun nedeni, UNION’ın yalnızca benzersiz değerleri seçmesidir; tüm değerleri istiyorsanız UNION ALL kullanabilirsiniz.
İÇ İÇE (NESTED) SQL Sorguları
SQL, verilerle harikalar yaratma kapasitesine sahiptir. İç içe sorgular, SQL’i bilmeye değer kılan bir başka araçtır. İç içe sorgu, bir sorgunun içinde yer alan başka bir sorgudan ibarettir (Inception’daki rüyalar gibi!).
İç içe sorgularla, okunabilirliği ve anlaşılabilirliği koruyarak, çok adımda çok karmaşık işlemler gerçekleştirebilirsiniz.
S15: ‘films’ tablosundaki filmlerin ortalama kârlılığını belirleyin.
İpucu: Kârlılığı daha önce S3 ile hesaplamıştınız. Şimdi bu sorgunun sonucunu alın ve buna AVG işlevini uygulayın.
SQL İç İçe Sorgu:
SELECT AVG(*) AS average_profit FROM
(SELECT title, (gross - budget) AS movie_profit FROM films where gross > budget);
İçteki SQL sorgusuna gross > budget ekleyerek, hesaplamadan ‘Fight Club’ın negatif değerini çıkardık.
Yukarıdaki iç içe sorguda önce iç sorgu çalıştırılır, ardından bu sonuç kümesi, dış sorgunun sorgulayıp veri aldığı geçici bir tablo olarak kullanılır.
İç içe SQL sorgusu konusuna fazla derin inmeyeceğiz. Ancak SQL sorgularında ustalaşmak için DataCamp’in Orta Seviye SQL kursunu takip etmenizi önemle tavsiye ederiz. Bu sırada Avrupa Futbol Veritabanı ile oynarken iç içe sorgular hakkında daha fazla bilgi edineceksiniz. Ayrıca bu SQL sorgu eğitiminde ele alamadığımız CASE ifadeleri ve pencere işlevleri hakkında da bilgi edineceksiniz.
Son düşünceler
SQL sorguları hakkında çok şey öğrendiniz ve SQL ile gerçek dünyadaki problemleri çözmeye başlamak için harika bir konumdasınız. Bu SQL sorgu eğitiminde, SQL sorgusunun ne olduğunu ve SQL sorgularının nasıl yazılacağını öğrendiniz.
Sorgu sözdizimini gördünüz ve yol boyunca bazı soruları yanıtladınız. SELECT - FROM - WHERE ifadelerini kullanarak basit SQL sorgu örnekleriyle başladık ve birleşimler, union ve iç içe sorgular kullanarak biraz daha karmaşık SQL sorgularına ilerledik.
Eğitimde çok şey ele aldık, ancak bu basit ve ileri düzey SQL sorgularının tüm olası örneklerinin KAPSAMLI bir listesi değildir — daha fazlası var. Daha derin ve kapsamlı bir SQL anlayışı için DataCamp’in SQL Temelleri patikasını takip etmenizi önemle tavsiye ederiz.
Unutmayın, herhangi bir beceride ustalaşmanın anahtarı pratiktir; SQL de bir istisna değildir! Pratik, SQL becerilerinizi başlangıç seviyesinden ileri seviyeye taşıyacaktır.
Öyleyse, hemen başlayın ve bol sorgulu günler!




