Her büyük veya dinamik web sitesi bir şekilde bir veritabanı kullanır ve Structured Query Language (SQL) ile birleştirildiğinde, verileri manipüle etme olanakları gerçekten sonsuzdur.
Bugün size bir programcı olarak bilmeniz gereken bazı temel SQL komutlarını göstereceğim.
Bir veritabanı tablosundan döndürülen veriler için birçok isim vardır. Verilere genellikle Rows ‘Satırlar’, Record ‘Kayıtlar’ veya Tuples denir. Bu makale boyunca bu terimleri birbirinin yerine kullanacağım.
Preface ‘Önsöz’
Bugünkü örneklerin tamamı dört kurgusal tabloya dayanacaktır. Müşteri tablosu adını ve müşterilerin yaş içerir:
Yükseklikleri tablo adını ve herhangi bir kişi yüksekliğini içerir:
Personel tablosu adını ve personeli yaşını içerir – Müşteri tablosu olarak tamamen aynı:
Kişiler adlı son tablo, tıpkı müşteri ve personel tablolarında olduğu gibi, kişilerin adını ve yaşını içerir:
1. Select ‘Seç’
Select ifadesi en basit olduğunu ve hemen hemen tüm diğer komutların temelini olarak bunu anlamak önemlidir. Komutun okunmasını ve anlaşılmasını kolaylaştırdığından, ayrılmış SQL sözcüklerinizi büyük harfle yazmak en iyi uygulama olarak kabul edilir.
Adından da anlaşılacağı gibi, kullanılır seçmek seçmek bir veritabanından veri. İşte en basit kullanım:
SELECT * FROM table;
Bunun iki kısmı var. İlk kısım ( SELECT * ) hangi sütunları seçmek istediğinizi belirtir. Yıldız işareti, tablodaki tüm sütunları seçmek istediğinizi belirtir. İkinci kısım ( FROM tablosu ), veritabanı motorunuza bu verileri nereden almak istediğinizi söyler. “Tablo”yu veritabanı tablonuzun adıyla değiştirin.
Bu seçim “yıldız seç” olarak bilinir. Yıldız işaretini kullanmak, bir tabloda hangi verilerin olduğunu anlamanın iyi bir yoludur, ancak herhangi bir üretim kodu için kullanmanızı önermiyorum. Seçilmiş bir yıldız kullanırken, istediğiniz verileri size sunmak veritabanı motoruna bağlıdır. Verilerin döndürülme sırası üzerinde herhangi bir kontrolünüz yoktur, bu nedenle biri tabloya yeni bir sütun eklerse, programlama dilinizdeki değişkenlerinizin artık doğru verileri temsil etmediğini görebilirsiniz. Neyse ki, bir çözüm var.
Hangi sütunları almak istediğinizi aşağıdaki gibi açıkça belirtebilirsiniz:
SELECT age, name FROM people;
Bu sorgu, “kişiler” tablosundan “yaş” ve “ad” sütunlarını alır. Çok fazla veriniz varsa bu kadar açık olmak biraz can sıkıcı olabilir, ancak bunu yapmak gelecekteki sorunları azaltacak ve SQL’inizin gelecekteki programcılar tarafından anlaşılmasını kolaylaştıracaktır.
Ek bir veri parçası seçmek istiyorsanız, ancak bu herhangi bir tablonuzda saklanmıyorsa, bunu şu şekilde yapabilirsiniz:
SELECT age, '1234' FROM people;
Bir sütun adıyla eşleşmek yerine, tek tırnak içindeki herhangi bir dize döndürülür.
2. Where ‘Nerede’
Select komutu, verileri almak için mükemmeldir, ancak sonuçları biraz daha filtrelemek isterseniz ne olur? Sadece mavi gözlü insanları almaya ne dersiniz? Ocak ayında doğan ve tamirci olarak çalışan insanlar ne olacak? İşte burada where komutu devreye girer. Bu, seçime koşulları uygulamanıza izin verir ve bunu ifadenin sonuna eklemeniz yeterlidir:
SELECT age, name FROM people WHERE age > 10;
Bu sorgu artık 10 yaşından büyük kişilerle sınırlıdır. AND operatörünü kullanarak birden çok koşulu birleştirebilirsiniz :
SELECT age, name FROM people WHERE age > 10 AND age < 20;
İngilizce dilinde yaptığı gibi komut aynen çalışır: bu açıklamaya başka bir koşul geçerlidir. Bu örnekte, döndürülen veriler, yaşı 10 ile 20 arasında olan herhangi bir kayıt olacaktır. Eşleşen sonuç olmadığından hiçbir veri döndürülmez.
Bununla birlikte kullanılabilecek başka bir komut OR’dir . İşte bir örnek:
SELECT age, name FROM people WHERE age > 10 OR name = 'Joe';
Bu sorgu, yaşın 10’dan büyük olduğu veya adın “Joe” olduğu kayıtları döndürür. Nasıl sadece bir eşittir işareti olduğuna dikkat edin? Çoğu programlama dili, denkliği kontrol etmek için çift eşittir (==) kullanır. Bu, veritabanı motorlarının büyük çoğunluğu için gerekli değildir (ancak ortam başına çok fazla olabilir, bu nedenle önce iki kez kontrol edin).
3. Order ‘Sipariş’
Order komut döndürülen sonuçların sıralamak için kullanılır. Kullanımı kolay başka bir şey. Basitçe ifadenizin sonuna ekleyin:
SELECT name, age FROM people ORDER BY age DESC;
Artan için ASC veya azalan için DESC olabilen sütunu ve sırayı belirtmeniz gerekir . Bunun gibi birden çok sütuna göre sipariş verebilirsiniz:
SELECT name, age FROM people ORDER BY name ASC, age DESC
ORDER BY, diğer komutlarla birleştirildiğinde belki de en kullanışlı olanıdır. Tüm sorgular verileri mantıklı veya sıralı bir şekilde döndürmez – bu komut bunu değiştirmenize izin verir.
4. Join ‘Birleştirmek’
Birleştirme komutu için kullanılan birleştirme , bir ya da daha fazla tablo saklanan ilgili verileri. Sen katılmak birinci tabloya ikinci bir tablo ve veri nasıl bağlandığını belirtir. İşte temel bir örnek:
SELECT age, name, height FROM people LEFT JOIN heights USING (name);
Burada birkaç şey oluyor. Bir tabloya left türünde birleşim kullanarak katılmak istediğinizi belirten “LEFT JOIN” sözdizimi ile başlamanız gerekir. Ardından, katılmak istediğiniz tabloyu belirtin (yükseklikler). KULLANMA (ad) sütun “isim” her iki tabloda bulunabilir ve bu tablolar birlikte katılması için bir anahtar olarak kullanılması gerektiğini dizimi belirtir.
Sütunlarınızın her tabloda farklı adları varsa endişelenmeyin. “KULLANIM” yerine “AÇIK” kullanabilirsiniz:
SELECT age, name, height FROM people LEFT JOIN heights ON (namea = nameb);
On deyimi, hangi sütunların anahtarlanacağını açıkça belirtir. Pek çok birleştirme türü vardır ve her biri için ayrıntılara girmek uzun zaman alır, bu nedenle kullanımlarının kısa bir özetini burada bulabilirsiniz:
- (INNER) JOIN — Her iki tabloda da eşleşen satırları döndürür.
- LEFT (OUTER) JOIN — Soldaki tablodaki tüm satırları, sağdaki tablodaki eşleşmelerle birlikte döndürür. Eşleşme yoksa, soldaki tablo kayıtları yine de döndürülür.
- RIGHT (OUTER) JOIN — Bu, sol birleştirmenin tersidir: sağdaki tablodaki tüm satırlar, soldaki tablodaki eşleşmelerle birlikte döndürülür.
- FULL (OUTER) JOIN — Her iki tabloda da eşleşen tüm kayıtları döndürür.
“INNER” veya “OUTER” sözdizimi isteğe bağlıdır. Bazı şeyleri anlamayı kolaylaştırabilir, ancak çoğu zaman bunu belirtmeniz gerekmez.
5. Alias ‘Takma ad’
Artık temel bilgileri biliyorsunuz, alias komutuna bakalım . Bu, bir tabloyu geçici olarak yeniden adlandırmak için kullanılır. Her şeyden çok bir takma addır, çünkü bu yeni ad yalnızca çalıştırdığınız bireysel işlem içinde bulunur. Bunu nasıl kullanacağınız aşağıda açıklanmıştır:
SELECT A.age FROM people A;
İstediğin herhangi bir geçerli ismi kullanabilirsin ama ben alfabenin harflerini kullanmayı seviyorum. Her sütun adından önce takma ad önekidir. Bu takma ad, beyan edildikten hemen sonra tabloya atanır. Bu, bunu yapmakla tamamen aynıdır:
SELECT people.age FROM people;
Uzun bir tablo adı yazmak zorunda kalmak yerine, basit ve hatırlaması kolay bir harf yazabilirsiniz ama ne anlamı var? Peki, birden fazla tablodan seçim yapıyorsanız, hangi sütunların hangi tabloya ait olduğu konusunda kafanız karışabilir. Her iki tablonuzda da aynı ada sahip sütunlar varsa, veritabanı sorgunuz tablo adına veya diğer adına açıkça başvurmadan çalışmayabilir. İşte iki tablolu bir örnek:
SELECT staff.age, staff.name, customers.age, customers.name FROM staff, customers;
Ve işte takma adlarla aynı sorgu:
SELECT A.age, A.name, B.age, B.name FROM staff A, customers B;
Personel masasına “A” takma adı verilir ve müşteri masasına “B” takma adı verilir. Tabloları takma, kodunuzun anlaşılmasını kolaylaştırmaya gerçekten yardımcı olur ve yapmanız gereken yazma miktarını azaltır.
Ayrıca “AS” komutunu kullanarak bir sütunu takma adla yeniden adlandırabilirsiniz:
SELECT age AS person_age FROM people;
Bu sorgu çalıştırıldığında, sütun artık “yaş” yerine “person_age” olarak adlandırılacaktır.
6. Union ‘Birlik’
Union büyük bir emirdir. Birbirine satır eklemenizi sağlar. Eşleşen sütunları ekleyen birleşimlerin aksine, birleşim, aynı sayıda ve sütun adına sahip olmaları koşuluyla ilgisiz satırlar ekleyebilir. Bunu nasıl kullanacağınız aşağıda açıklanmıştır:
SELECT age, name FROM customers
UNION
SELECT age, name FROM staff;
Union, iki sorgunun sonuçlarını birleştirmenin bir yolu olarak düşünebilirsiniz. Bir Union, yalnızca iki sorgu arasında benzersiz bir satır olduğunda sonuçları döndürür. Yinelenenlerden bağımsız olarak tüm verileri döndürmek için “UNION ALL” sözdizimini kullanabilirsiniz:
SELECT age, name FROM customers
UNION ALL
SELECT age, name FROM staff;
Satırların sırasının nasıl değiştiğine dikkat edin? Union en verimli şekilde çalışır, bu nedenle döndürülen veriler sırayla değişebilir.
Birleşim için olası bir kullanım örneği, bir ara toplamdır: toplam toplamın bir sorgusunu, belirli bir senaryo için bireysel toplamların bir sorgusunda birleştirebilirsiniz.
7. Insert ‘Ekle’
Artık bir veritabanından veri almakla ilgili her şeyi biliyorsunuz, peki ya onu eklemeye ne dersiniz? İnsert komutunun devreye girdiği yer burasıdır. İşte bir örnek:
INSERT INTO people(name, age) VALUES('Joe', 102);
Tablo adını (kişiler) ve kullanmak istediğiniz sütunları (isim ve yaş) belirtmelisiniz. “VALUES” sözdizimi daha sonra eklenecek değerleri sağlamak için kullanılır. Bunlar daha önce belirtilen sütunlarla aynı sırada olmalıdır.
Insert için where yan tümcesi belirtemezsiniz ve mevcut olan tüm gerekli tablo kısıtlamalarını uyguladığınızdan emin olmanız gerekir.
8. Update ‘Güncelleme’
Bazı verileri ekledikten sonra, belirli satırları değiştirmeniz doğaldır. İşte Update ‘güncelleme’ komutu sözdizimi:
UPDATE people SET name = 'Joe', age = 101;
Değiştirmek istediğiniz tabloyu belirtmeniz ve ardından sütunları ve yeni değerlerini belirtmek için “SET” sözdizimini kullanmanız gerekir. Bu örnek iyidir, ancak her kaydı güncelleyecektir.
Daha spesifik olmak için, tıpkı bir seçim yaparken olduğu gibi “WHERE” yan tümcelerini kullanabilirsiniz:
UPDATE people SET name = 'Joe', age = 101 WHERE name = 'James';
Hatta “VE” ve “VEYA” kullanarak birden çok koşul belirtebilirsiniz:
UPDATE people SET name = 'Joe', age = 101 WHERE (name = 'James' AND age = 100) OR name = 'Ryan';
Koşulları sınırlamak için parantezlerin nasıl kullanıldığına dikkat edin.
9. Upsert ‘Üslup’
Upsert kulağa tuhaf gelen bir kelime ama inanılmaz derecede faydalı bir komut. Diyelim ki tablonuzda bir kısıtlama var ve yalnızca benzersiz adlara sahip kayıtlar istediğinizi belirttiniz. Örneğin, aynı ada sahip iki satırı saklamak istemiyorsunuz. Birden fazla ‘Joe’ değeri eklemeye çalışırsanız, veritabanı motorunuz bir hata verir ve bunu yapmayı reddeder (oldukça haklı olarak). UPSERT, zaten mevcutsa bir kaydı güncellemenize izin verir. Bu inanılmaz derecede faydalı! Bu komut olmadan, önce bir kaydın olup olmadığını kontrol etmek, yoksa eklemek, aksi takdirde doğru birincil anahtarı almak ve ardından güncellemek için çok fazla mantık yazmanız gerekir.
Ne yazık ki, yükseltmeler farklı veritabanı motorlarında farklı şekilde uygulanmaktadır. PostgreSQL bu yeteneği daha yeni kazandı, MySQL ise bir süredir sahip. İşte referans için MySQL sözdizimi:
INSERT INTO people(name, age)
VALUES('Joe', 101)
ON DUPLICATE KEY UPDATE age = 101;
Bunun aslında bir güncelleme ve “ekleme başarısız olursa güncelleme” olarak özetlenebilecek bir ekleme ifadesi olduğuna dikkat edin.
10. Delete ‘Sil’
Delete, kayıtları tamamen kaldırmak için kullanılır. Kötüye kullanılırsa oldukça zarar verici olabilir! Temel sözdiziminin kullanımı çok kolaydır:
DELETE FROM people;
Diğer komutların çoğu gibi, bu da her şeyi silecektir ! Onu biraz daha makul sayıda satırla sınırlandırmak için bir yer kullanmanız gerekir – ideal olarak:
DELETE FROM people WHERE name = 'Joe';
Bir sistem geliştiriyorsanız, genellikle bir “yazılımla silme” uygulamak akıllıca olur. Aslında asla silme komutunu çalıştırmazsınız, bunun yerine silinmiş bir sütun oluşturursunuz ve ardından seçimlerinizde bu sütunu kontrol edersiniz – sözde silinmiş kayıtları hızlı ve kolay bir şekilde alabilirseniz, birçok olası utançtan kaçınabilirsiniz. Ancak bu, uygun yedeklemelerin yerini tutmaz.
11. Create Table ‘Tablo Oluştur’
Tablo oluşturmak için Create Table komutu kullanılır. Bir başka çok basit:
CREATE TABLE people (
name TEXT,
age, INTEGER,
PRIMARY KEY(name)
);
Sütun adlarının ve kısıtlamaların parantez içinde nasıl olduğuna ve sütunlara uygun bir veri türü verildiğine dikkat edin. Herhangi bir iyi veritabanı tasarımında gerektiği gibi bir birincil anahtar belirtilir.
12. Alter Table ‘Tabloyu Değiştir’
Alter tablo komutu tablonun yapısını değiştirmek için kullanılır. Bu biraz sınırlıdır, çünkü veritabanınız, mevcut veriler bir çakışmaya neden olursa bir tabloyu değiştirmenize izin vermez – örneğin bir dizeyi bir tamsayıya değiştirmek. Bu durumlarda, önce verileri düzeltin, ardından tabloyu değiştirin. İşte bir örnek:
ALTER TABLE people ADD height integer;
Bu örnek, insanlar tablosuna tamsayı türünde “yükseklik” adlı bir sütun ekler. Neleri değiştirebileceğiniz konusunda gerçekten bir sınır yok.
13. Drop Table
Son komut açılan tablodur. Bunu bir silme olarak düşünün, ancak tek bir kaydı silmek yerine, tabloyla birlikte her bir kaydı kaldırır! Bunu nasıl kullanacağınız aşağıda açıklanmıştır:
DROP TABLE people;
Oldukça sert bir komuttur ve sisteminize programlanması için hiçbir neden yoktur. Vakaların büyük çoğunluğunda yalnızca manuel olarak yapılmalıdır ve çok yıkıcı olabilir.
Hepsi bugün için. Umarım bazı faydalı numaralar öğrenmişsinizdir! Bir web sitesi yapmayı öğrenebilir ve ardından yeni edindiğiniz becerileri kullanarak onu dinamik hale getirebilirsiniz. Sadece bu hataları yapmadığınızdan veya siteyi SQL enjeksiyonuna karşı savunmasız bırakmadığınızdan emin olun.