SQL (Structured Query Language), veritabanı yönetimi ve işlemleri için kullanılan bir programlama dilidir. SQL, ilişkisel veritabanlarından veri çekmek, eklemek, güncellemek veya silmek için kullanılır. Bu nedenle, SQL'yi bilen biri, ilişkisel veritabanı yönetim sistemleri (RDBMS) üzerinde tam kontrol sahibi olabilir. SQL'in bir diğer önemli yönü ise tüm modern veritabanı sistemleri (MySQL, Oracle, PostgreSQL, SQLite, Microsoft SQL Server vb.) tarafından desteklenmesidir.
SQL dilinde dört ana işlem türü bulunmaktadır:
SELECT - veritabanından veri çeker
INSERT - veritabanına yeni veri ekler
UPDATE - veritabanındaki mevcut veriyi günceller
DELETE - veritabanından veriyi siler
Bunlar SQL'in temel işlemleri olmasına rağmen, daha karmaşık sorgular ve işlemler için birçok ekstra özellik ve fonksiyon sunar. İşte bazıları:
WHERE ve HAVING: belirli koşullara uyan verileri filtrelemek için kullanılır.
JOIN: İki veya daha fazla tabloyu belirli bir kriter etrafında birleştirmek için kullanılır.
GROUP BY: Verileri belirli bir kritere göre gruplamak için kullanılır.
ORDER BY: Verileri belirli bir kritere göre sıralamak için kullanılır.
SQL, veri analitiği, veritabanı yönetimi, veritabanı tasarımı ve daha birçok alanda kullanılır. Bu nedenle, veri ile çalışmak isteyen hemen hemen herkes için önemli bir beceridir. Bu, veri analistlerinden yazılım mühendislerine, veri bilimcilerine ve daha fazlasına kadar bir dizi rol içerir. SQL'yi öğrenmek, bu rollerdeki profesyonellerin veritabanlarından en iyi şekilde yararlanmalarını sağlar.
SQL'in sunduğu bir diğer önemli özellik de veritabanı oluşturma ve düzenlemektir. Bu, şu anahtar kelimelerle gerçekleştirilir:
CREATE: Yeni bir tablo oluşturur veya yeni bir veritabanı oluşturur.
ALTER: Mevcut bir tabloyu değiştirmek veya değişiklik yapmak için kullanılır.
DROP: Mevcut bir tabloyu veya veritabanını siler.
Veritabanı ilişkilerini ve kısıtlamalarını yönetmek için de SQL kullanılır. Örneğin, bir FOREIGN KEY kısıtlaması, bir tablodaki bir sütunun başka bir tabloda birincil anahtar (PRIMARY KEY) olarak tanımlanmış bir sütuna bağlanmasını sağlar. Bu, veri bütünlüğünü korumak ve tablolar arasındaki ilişkileri tanımlamak için önemlidir.
Bunun yanı sıra, SQL ayrıca bir dizi veri manipülasyon fonksiyonu ve operatörü sunar. Bunlar arasında metin işleme fonksiyonları, tarih ve saat işleme fonksiyonları ve matematiksel işlemler bulunur. SQL'ye özgü olan bir özellik de NULL değerlerini yönetmek için kullanılan IS NULL ve IS NOT NULL operatörleridir.
Son olarak, SQL, kullanıcıların belirli bir veritabanında ne yapabileceğini belirlemek için kullanılan bir dizi izin ve rol yönetimi özelliği sunar. GRANT ve REVOKE anahtar kelimeleri, belirli bir kullanıcının bir veritabanında veya tabloda ne yapabileceğini belirlemek için kullanılır.
SQL, veritabanı teknolojisi konusunda temel bir bileşendir ve günümüzdeki çok sayıda uygulamanın ve hizmetin çalışmasını sağlar. Bir veritabanı oluşturma, yönetme ve ondan veri çekme becerisi, bilgi çağında önemli bir beceri olarak kabul edilir.
SQL ile veritabanı yönetimine daha derinlemesine bakalım:
Veritabanı Yönetimi: SQL, veritabanı oluşturma (CREATE DATABASE), silme (DROP DATABASE) ve seçme (USE DATABASE) gibi veritabanı düzeyinde işlemler yapabilme yeteneği sağlar.
Tablo Yönetimi: SQL, tabloları oluşturmak (CREATE TABLE), düzenlemek (ALTER TABLE) ve silmek (DROP TABLE) için kullanılır. CREATE TABLE ifadesi, tablo oluştururken veritabanı şemasını (sütunların adları, veri türleri ve diğer kısıtlamalar) tanımlamanızı sağlar.
İndeks Yönetimi: SQL, veritabanındaki verilere daha hızlı erişim sağlamak için indeksler oluşturabilir (CREATE INDEX). Indeksler, genellikle WHERE ifadesi ile sorgularda kullanılan sütunlarda belirlenir.
Görünümler (Views): SQL, çeşitli tablolardan alınan sonuçları birleştirerek tek bir tablo gibi görünen görünümleri (views) oluşturabilir (CREATE VIEW). Bu, karmaşık sorguları basitleştirebilir ve veri güvenliğini sağlamaya yardımcı olabilir.
Yedekleme ve Geri Yükleme: SQL, veritabanını yedeklemek (BACKUP DATABASE) ve geri yüklemek (RESTORE DATABASE) için komutlar sunar. Bu, veri kaybını önlemek için kritik bir işlevdir.
Stored Procedures ve Functions: SQL, Stored Procedures ve Functions oluşturabilme yeteneği sunar. Bunlar, SQL ifadelerinin ön tanımlı kümeleridir ve tekrar tekrar kullanılmaları gereken karmaşık işlemleri basitleştirebilir.
Triggers: SQL, belirli bir olayın (INSERT, UPDATE, DELETE) gerçekleşmesi sonucunda otomatik olarak çalışacak bir dizi SQL ifadesi tanımlamanıza olanak sağlar.
Bu, SQL'nin birçok özelliği ve kabiliyetiyle veritabanı yönetiminde nasıl kullanılabileceğine dair genel bir bakıştır. Bu özellikler ve yetenekler, SQL'nin hem veri analitiği hem de veritabanı yönetimi alanlarında güçlü ve esnek bir dil olmasını sağlar. Bu, SQL'yi öğrenmek için önemli nedenlerden biridir.
Tabii ki, SQL'in daha spesifik özelliklerine bakalım:
Veri Tipi:
SQL, metin, sayı, tarih/zaman ve daha birçok veri tipini destekler. Bu, veritabanında hangi tür verinin saklanacağını belirlemenizi sağlar. Farklı veri türlerinin yanı sıra, SQL ayrıca NULL değerlerini de destekler, bu sayede bir alanın değerinin bilinmediğini veya mevcut olmadığını belirtebilirsiniz.
Aggregate Functions:
SQL, COUNT, SUM, AVG, MAX ve MIN gibi toplama fonksiyonları sunar. Bu fonksiyonlar, belirli bir grup veri üzerinde genel hesaplamalar yapmanızı sağlar. Örneğin, COUNT(*) ifadesi bir tablodaki satır sayısını döndürür.
Subqueries:
SQL, bir sorgu içinde başka bir sorgu çalıştırma yeteneği sunar, buna subquery (alt sorgu) denir. Alt sorgular genellikle WHERE veya HAVING ifadelerinde kullanılır.
Transactions:
SQL, işlemleri destekler, bu sayede bir grup ifadenin tümünün başarılı bir şekilde çalışmasını veya hiçbirinin çalışmamasını garanti eder. Bu, COMMIT ve ROLLBACK ifadeleri ile kontrol edilir ve genellikle bir işlemin tamamlanmaması durumunda veritabanı bütünlüğünü korumak için kullanılır.
Security:
SQL, veritabanı güvenliğini yönetmek için bir dizi araç ve komut sağlar. Kullanıcı izinlerini belirlemek için GRANT ve REVOKE ifadeleri kullanılır. Ayrıca, kullanıcılara ve rollerine özgü izinler ayarlayabilirsiniz.
Error Handling:
SQL, hataları ele almak için TRY...CATCH blokları gibi kontrol yapılarını destekler. Bu, bir hata durumunda uygulamanın nasıl tepki vereceğini belirlemenizi sağlar.
Bu özellikler, SQL'nin veritabanı işlemlerinde ne kadar güçlü ve esnek olduğunu gösterir. Veritabanı yönetimi ve veri manipülasyonu için bir dizi araç ve yetenek sunar. Bu yüzden SQL, veri analitiği, veritabanı yönetimi, veri bilimi ve daha birçok alanda bir temel beceri olarak görülür.
SQL'in daha gelişmiş özelliklerinden bazılarına bakalım:
Pencere Fonksiyonları:
Pencere fonksiyonları, veri kümesinin belirli "pencereler" veya alt kümeleri üzerinde hesaplamalar yapmanıza olanak sağlar. Bu tür fonksiyonlar, örneğin, çalışanların maaşlarından en yüksek olanı bulma veya her bir çalışanın maaşının bölüm genelindeki ortalama maaşa göre konumunu belirleme gibi işlemlerde kullanılabilir.
Common Table Expressions (CTE):
CTE'ler geçici sonuç setleri oluşturmanıza olanak sağlar. Bu sonuç setleri, bir sorgu içerisinde bir veya birden fazla kez kullanılabilir ve genellikle karmaşık sorguları daha okunabilir ve anlaşılır hale getirmek için kullanılır.
Prepared Statements:
Hazırlanmış ifadeler, SQL sorgularını daha güvenli ve daha hızlı hale getirir. Bu ifadeler, önceden derlenir ve çalıştırıldığında belirli değerlerle doldurulur. Bu, SQL Injection gibi güvenlik tehditlerini önlemeye yardımcı olabilir.
Full-Text Search:
Tam metin arama, metin tabanlı alanlarda karmaşık aramalar yapmanızı sağlar. Bu, bir blog gönderisinde veya bir kitapta belirli bir kelime veya ifadeyi bulmak gibi kullanım durumları için kullanılabilir.
Recursive Queries:
Özyinelemeli sorgular, bir sorgunun kendini tekrar çağırmasına olanak sağlar. Bu genellikle hiyerarşik veya ağaç tabanlı veri yapılarında kullanılır, örneğin bir çalışanın yönetim hiyerarşisini belirlemek için.
Veri Tipi Dönüşümü:
SQL, veri tipi dönüşümlerini destekler. Bu, bir veri tipini başka bir veri tipine dönüştürmenize olanak sağlar, örneğin bir metin alanını bir tarih veya sayıya dönüştürme.
Veri Düzleştirmesi ve Normalizasyonu:
SQL, veri düzleştirmesi (flattening) ve normalizasyonu için araçlar sunar. Bu, veri bütünlüğünü korumak ve veritabanı performansını optimize etmek için kullanılır.
Partisyonlama:
SQL, büyük veritabanı tablolarını daha küçük, daha yönetilebilir parçalara (partition) bölmek için kullanılır. Bu, veri yönetimini ve sorgu performansını iyileştirebilir.
Bu özellikler, SQL'nin veri analitiği ve veritabanı yönetimi alanlarında çok sayıda çeşitli ve karmaşık görevi yerine getirebilecek güçlü ve esnek bir dil olduğunu gösterir. Bu, veritabanı profesyonellerinin, veri analistlerinin, yazılım geliştiricilerin ve diğer teknoloji profesyonellerinin SQL'yi öğrenmeleri için pek çok neden sunar.
SQL, hem kullanımı hem de anlaması kolay olması ve verileri güvenli bir şekilde saklama, işleme ve analiz etme yeteneği nedeniyle sektör genelinde yaygın olarak kullanılır. SQL'in gelişmiş konularına daha da derinlemesine girelim:
İşlem İzolasyonu ve Kilitleme: SQL, çok kullanıcılı veritabanı sistemlerinde veri bütünlüğünü korumak için işlem izolasyonu ve kilitleme mekanizmaları sunar. İşlem izolasyonu, bir işlem sırasında yapılan değişikliklerin diğer işlemler tarafından görülmemesini sağlar. Kilitleme ise, aynı veri üzerinde eşzamanlı değişiklikleri önlemek için kullanılır.
Optimizasyon: SQL, sorgu optimizasyonu için bir dizi araç ve teknik sunar. Sorgu optimizasyonu, bir sorgunun daha hızlı çalışması için kullanılır. SQL sorgularınızı nasıl yazdığınıza ve hangi indeksleri kullandığınıza bağlı olarak, sorgu performansı önemli ölçüde değişebilir.
Veri Entegrasyonu: SQL, farklı veri kaynaklarından veri çekme ve bu verileri birleştirme yeteneğine sahiptir. Bu, veritabanları, dosyalar veya API'ler gibi farklı veri kaynaklarından gelen verileri birleştirmek ve analiz etmek için kullanılır.
Yönetim Araçları: SQL, veritabanı yönetimine yardımcı olmak için bir dizi yönetim aracı ve yardımcı program sağlar. Bu araçlar, veritabanı yedekleme, geri yükleme, denetim, izleme ve performans ayarlaması gibi görevleri gerçekleştirmenize yardımcı olur.
Metadata Yönetimi: SQL, veritabanınızın şeması hakkında bilgi edinmek için METADATA komutlarını destekler. Bu, veritabanınızın tablolarını, sütunlarını, indekslerini ve diğer özelliklerini anlamanıza yardımcı olabilir.
SQL, güçlü ve esnek bir dil olmanın yanı sıra, büyük ölçekli, dağıtılmış ve çok kullanıcılı veritabanı sistemlerinde çalışmak için de uygundur. Bu, hem küçük ölçekli projelerde hem de büyük, karmaşık veritabanı uygulamalarında SQL'yi ideal bir seçenek yapar.
SQL Advanced konular detaylı anlatım
Elbette! İşte SQL'nin ileri düzey konularından bazılarının detaylı açıklamaları:
Pencere Fonksiyonları (Window Functions):
Pencere fonksiyonları, bir sorgu sonucu üzerinde çalışırken, sonuç kümesinin belirli bir penceresine uygulanabilen özel fonksiyonlardır. Bu fonksiyonlar, her bir satır için hesaplamalar yaparken, sorgu sonucunu segmentlere ayırır. Pencere fonksiyonları, ROW_NUMBER, RANK, DENSE_RANK, NTILE, LAG, LEAD, SUM, AVG, MIN, MAX, COUNT gibi işlemleri yapmak için kullanılabilir.
sql
Copy code
SELECT ProductName, UnitPrice,
SUM(UnitPrice) OVER (PARTITION BY CategoryID) AS CategoryTotal,
RANK() OVER (ORDER BY UnitPrice DESC) AS PriceRank
FROM Products;
Karmaşık Sorgular ve İlişkili Alt Sorgular:
Karmaşık sorgular, birden fazla tablo veya sorgu içeren ve daha karmaşık veri çekme veya işlemleri gerçekleştiren sorgulardır. İlişkili alt sorgular, dış sorgudan değer alabilen ve her bir dış sorgu satırı için çalışabilen alt sorgulardır. İlişkili alt sorgular, genellikle JOIN ifadelerinin yerine geçer ve daha karmaşık sorguların oluşturulmasına olanak tanır.
sql
Copy code
SELECT CustomerName
FROM Customers
WHERE CustomerID IN (SELECT CustomerID FROM Orders WHERE Quantity > 10);
sql
Copy code
SELECT e1.EmployeeName
FROM Employees e1
WHERE 5 > (SELECT COUNT(*) FROM Employees e2 WHERE e2.Salary > e1.Salary);
CTE (Common Table Expressions):
CTE'ler, bir sorgu içinde geçici olarak tanımlanan ve bu sorguda kullanılan bir tabloya benzer bir yapıdır. CTE'ler, daha karmaşık sorguları basitleştirmek, okunabilirliği artırmak ve tekrar kullanılabilirliği sağlamak için kullanılır. CTE'ler, WITH ifadesiyle başlar ve ardından sorgu tanımı gelir.
sql
Copy code
WITH SalesCTE AS (
SELECT ProductID, SUM(Quantity) AS TotalSales
FROM Sales
GROUP BY ProductID
)
SELECT ProductID, TotalSales
FROM SalesCTE
WHERE TotalSales > 1000;
Geçici Tablolar (Temporary Tables):
Geçici tablolar, bir SQL oturumu boyunca var olan ve oturum sona erdiğinde otomatik olarak silinen tablolardır. Geçici tablolar, genellikle bir veri kümesi üzerinde karmaşık hesaplamalar yapmak, ara sonuçları tutmak veya geçici veri depolamak için kullanılır. Geçici tablolar, CREATE TABLE ifadesiyle oluşturulur ve veriler kullanıldıktan sonra DROP TABLE ifadesiyle silinir.
sql
Copy code
CREATE TEMPORARY TABLE temp_Orders AS
SELECT * FROM Orders
WHERE OrderDate > '2023-01-01';
JSON Veri İşleme (JSON Functions):
JSON verileri, modern uygulamalarda yaygın olarak kullanılan bir veri formatıdır. SQL'de JSON verileri üzerinde işlemler yapmak için özel JSON fonksiyonları bulunur. JSON_VALUE, JSON_QUERY, JSON_MODIFY gibi fonksiyonlar, JSON verilerini sorgulamak, dönüştürmek ve işlemek için kullanılır.
sql
Copy code
SELECT JSON_VALUE(CustomerInfo, '$.Name') AS CustomerName
FROM Customers;
Dinamik Sorgular (Dynamic Queries):
Dinamik sorgular, çalışma zamanında oluşturulan ve değişkenlik gösteren sorgulardır. Bu sorgular, kullanıcı girişine veya çalışma zamanı koşullarına göre sorgu mantığını dinamik olarak ayarlamak için kullanılır. Dinamik sorgular, CONCAT veya + operatörleriyle metin birleştirme, EXECUTE veya sp_executesql ile sorgu çalıştırma gibi yöntemlerle oluşturulabilir.
sql
Copy code
DECLARE @City NVARCHAR(50);
SET @City = 'New York';
DECLARE @SQL NVARCHAR(MAX);
SET @SQL = 'SELECT * FROM Customers WHERE City = ''' + @City + '''';
EXECUTE sp_executesql @SQL;
Dış Veritabanlarına Bağlanma (Connecting to External Databases):
SQL, farklı veritabanı sistemleriyle etkileşim kurma yeteneğine sahiptir. Bu, farklı veritabanları arasında veri aktarımı, veri senkronizasyonu veya uzak veritabanı kaynaklarına erişim gibi senaryolarda kullanılabilir. Bağlantı dizesi ve bağlantı nesneleri aracılığıyla farklı veritabanlarına bağlanmak ve sorgularınızı gerçekleştirmek mümkündür.
sql
Copy code
SELECT *
FROM ExternalDB.dbo.Customers;
Dinamik Tablo Oluşturma (Dynamic Table Creation):
SQL'de dinamik olarak tablo oluşturmak, sorgu çalışma zamanında tabloları oluşturmak için kullanılır. Bu, geçici veya geçici olmayan tabloları oluşturarak, veri geçici olarak depolama veya geçici tablolar aracılığıyla kompleks hesaplamalar yapma gibi senaryolarda kullanılabilir.
sql
Copy code
DECLARE @TableName NVARCHAR(50);
SET @TableName = 'NewTable';
DECLARE @SQL NVARCHAR(MAX);
SET @SQL = 'CREATE TABLE ' + @TableName + ' (ID INT, Name NVARCHAR(50))';
EXECUTE sp_executesql @SQL;
İç İçe Sorgular (Nested Queries):
İç içe sorgular, bir sorgunun içinde başka bir sorgunun kullanıldığı sorgulardır. Bu, daha karmaşık veri sorgulamaları yapmak, alt sorgunun sonuçlarını kullanarak ana sorguyu filtrelemek veya veri bütünlüğünü sağlamak için kullanılabilir.
sql
Copy code
SELECT *
FROM Orders
WHERE CustomerID IN (SELECT CustomerID FROM Customers WHERE Country = 'USA');
Veri Ekleme, Güncelleme ve Silme (Data Insertion, Update, and Deletion):
SQL, veri tabanında yeni veri eklemek, mevcut veriyi güncellemek veya veriyi silmek için kullanılabilir. INSERT, UPDATE ve DELETE ifadeleriyle bu işlemler gerçekleştirilebilir.
sql
Copy code
INSERT INTO Customers (CustomerName, City, Country)
VALUES ('John Doe', 'New York', 'USA');
sql
Copy code
UPDATE Customers
SET City = 'Los Angeles'
WHERE CustomerID = 1;
sql
Copy code
DELETE FROM Customers
WHERE CustomerID = 1;
Bu ileri düzey konular, SQL'nin farklı senaryolarda nasıl kullanılabileceğini göstermektedir. Her biri belirli ihtiyaçlarınıza ve projelerinize bağlı olarak kullanılabilir. SQL hakkında daha fazla bilgi edinmek için bu konuları daha da araştırabilir ve pratik yapabilirsiniz.
SSS ve Cevapları
Elbette, işte SQL hakkında sıkça sorulan bazı sorular ve cevapları:
SQL nedir?
SQL (Structured Query Language), veritabanı sistemlerinde veri oluşturma, işleme ve yönetme işlemlerini gerçekleştirmek için kullanılan bir dildir. SQL, genellikle ilişkisel veritabanı yönetim sistemlerinde (RDBMS) kullanılır, ancak bazı NoSQL sistemlerinde de kullanılabilir.
SQL ve NoSQL arasındaki fark nedir?
SQL ve NoSQL, iki farklı veritabanı yönetim sistem tipidir. SQL, verileri tablolar halinde organize eden ilişkisel bir sistemdir. NoSQL, genellikle büyük veri ve gerçek zamanlı uygulamalar için daha uygun olan ve genellikle verileri belge, geniş sütun, çift veya grafik şeklinde saklayan bir sistemdir.
SQL ne tür işlemler için kullanılır?
SQL, veri sorgulama, veri manipülasyonu (ekleme, güncelleme, silme), veritabanı oluşturma ve değiştirme, kullanıcı yönetimi, veritabanı güvenliği ve veri bütünlüğü gibi çeşitli işlemler için kullanılır.
SQL neden önemlidir?
SQL, verilerin saklanması, düzenlenmesi ve analiz edilmesi için bir araç olan veritabanı yönetim sistemlerinde en yaygın kullanılan dil olduğu için önemlidir. Veri analisti, veri bilimci, yazılım mühendisi veya veritabanı yöneticisi gibi rol almayı düşünen herkes için SQL bilgisi genellikle bir gerekliliktir.
SQL'yi öğrenmek ne kadar sürer?
SQL'nin temelini öğrenmek genellikle birkaç hafta sürer. Ancak, SQL'nin daha gelişmiş özelliklerini anlamak ve etkin bir şekilde kullanabilmek daha fazla zaman ve pratik gerektirir.
SQL'nin anahtar özellikleri nelerdir?
SQL'nin anahtar özellikleri arasında veri sorgulama, veri manipülasyonu, veritabanı oluşturma ve değiştirme, kullanıcı yönetimi ve izinler, veritabanı güvenliği ve bütünlüğü, işlem izolasyonu ve kilitleme, veri tipi dönüşümü, veri düzleştirmesi ve normalizasyon, indeksleme ve optimizasyon bulunur.
SQL hangi sektörlerde kullanılır?
SQL, birçok sektörde ve rolde kullanılır. Veri analitiği, veri bilimi, yazılım geliştirme, veritabanı yönetimi, sağlık hizmetleri, finans, perakende ve hükümet dahil olmak üzere çeşitli sektörlerde SQL bilgisi genellikle gereklidir.
SQL kodu nasıl çalışır?
SQL kodu, bir SQL istemcisi aracılığıyla bir veritabanı sunucusuna gönderilir. Veritabanı sunucusu, bu kodu yorumlar ve istenen işlemi gerçekleştirir. Sonuçlar daha sonra istemciye geri döndürülür.
SQL nerede çalışır?
SQL, bir veritabanı yönetim sistemi (DBMS) içinde çalışır. Bu, veritabanınızı oluşturan ve sorgularınızı işleyen yazılımdır. DBMS, Microsoft SQL Server, Oracle, MySQL, PostgreSQL ve SQLite gibi çeşitli türlerde ve markalarda mevcuttur.
SQL enjeksiyonu nedir?
SQL enjeksiyonu, bir saldırganın zararlı SQL kodunu bir uygulamanın veritabanı sorgusuna eklemesi ve bu şekilde veritabanını manipüle etmesi veya hassas bilgilere erişmesi anlamına gelen bir güvenlik açığıdır. Bu, veritabanı yöneticilerinin ve yazılım geliştiricilerin dikkat etmesi gereken önemli bir güvenlik konusudur.
Bir SQL sorgusu nasıl optimize edilir?
SQL sorgularını optimize etmenin birkaç yolu vardır. Sorgu yürütme planınızı anlamak, gereksiz sorgu parçalarını kaldırmak, gerektiğinde indeks kullanmak ve JOIN operasyonlarını dikkatli bir şekilde kullanmak, SQL sorgu performansını iyileştirebilir.
'Primary Key' ve 'Foreign Key' nedir?
Primary Key (Birincil Anahtar), bir veritabanı tablosundaki her satırı benzersiz olarak tanımlayan bir alandır. Foreign Key (Yabancı Anahtar), bir tabloda başka bir tabloya referans veren bir alandır. Bu anahtarlar, verilerin tutarlı ve doğru kalmasını sağlar ve SQL'deki ilişkisel veritabanı modelinin temelini oluşturur.
'INNER JOIN', 'LEFT JOIN' ve 'RIGHT JOIN' arasındaki fark nedir?
Bu terimler, SQL'deki tablolar arasındaki ilişkileri tanımlar. 'INNER JOIN', iki tablonun kesişimini alır, yani her iki tabloda da bulunan kayıtları döndürür. 'LEFT JOIN', ilk tablodaki tüm kayıtları ve ikinci tablodaki eşleşen kayıtları döndürür. 'RIGHT JOIN' ise ikinci tablodaki tüm kayıtları ve ilk tablodaki eşleşen kayıtları döndürür.
SQL'de 'NULL' değeri ne anlama gelir?
SQL'de 'NULL', bir alanın değerinin bilinmediğini veya mevcut olmadığını belirtir. 'NULL', "sıfır" veya "boş" anlamına gelmez; bu, bir değerin basitçe mevcut olmadığını belirtir.
SQL ve PL/SQL arasındaki fark nedir?
SQL, veri sorgulama ve manipülasyonu için bir dildir. PL/SQL (Procedural Language/SQL), Oracle tarafından geliştirilen ve SQL'i prosedürel programlama özellikleriyle genişleten bir dil ise, öncelikle Oracle veritabanı sistemlerinde kullanılır.
'Index' (İndeks) nedir ve ne zaman kullanılmalıdır?
Bir indeks, veritabanı tablosundaki verilere daha hızlı erişim sağlayan bir veri yapısıdır. Sorgu performansını önemli ölçüde artırabilir. Ancak, indeksler disk alanı kullanır ve veri eklendiğinde, güncellendiğinde veya silindiğinde bakım gerektirir. Bu yüzden hangi sütunlarda indeks oluşturacağınıza dikkatli bir şekilde karar vermelisiniz.
SQL'de 'View' (Görünüm) nedir?
Bir görünüm, bir veya daha fazla tabloda bulunan verileri temsil eden sanal bir tablodur. Görünümler, karmaşık sorguları basitleştirebilir ve belirli kullanıcılara belirli veri alt kümesine erişim sağlayabilir.
SQL'de 'Trigger' (Tetikleyici) nedir?
Bir tetikleyici, belirli bir olay (bir satırın eklenmesi, güncellenmesi veya silinmesi gibi) gerçekleştiğinde otomatik olarak çalışan bir SQL ifadesidir. Tetikleyiciler, veri bütünlüğünü korumak, iş kurallarını uygulamak veya hataları otomatik olarak düzeltmek için kullanılabilir.
SQL'de 'Stored Procedure' (Depolanmış Prosedür) nedir?
Depolanmış prosedürler, bir veritabanı sunucusunda saklanan ve gerektiğinde çalıştırılan bir dizi SQL ifadesidir. Depolanmış prosedürler, tekrar tekrar kullanılabilen ve karmaşık işlemleri basitleştiren kod parçalarıdır.
'LIKE' operatörü SQL'de nasıl kullanılır?
'LIKE' operatörü, bir sütunun belirli bir deseni takip edip etmediğini kontrol etmek için SQL'de kullanılır. Yüzde (%) ve alt çizgi (_) joker karakterlerini kullanabilirsiniz. % herhangi bir dizi karakteri (boş dahil) temsil ederken, _ tek bir karakteri temsil eder.
'GROUP BY' ve 'ORDER BY' SQL'de ne işe yarar?
'GROUP BY' ifadesi, belirli bir sütuna veya sütunlar grubuna göre sonuçları gruplamak için kullanılır. 'ORDER BY' ifadesi ise sonuçları belirli bir sütuna veya sütunlar grubuna göre sıralamak için kullanılır.
"DROP", "DELETE" ve "TRUNCATE" komutları arasındaki farklar nelerdir?
"DROP", bir tablonun tamamını veritabanından kaldırır. "DELETE" komutu, belirli kayıtları bir tablodan siler ve "WHERE" ifadesi ile birlikte kullanıldığında spesifik kayıtları silmek için kullanılır. "TRUNCATE", bir tablodaki tüm kayıtları siler ancak tablonun yapısını korur.
DROP TABLE orders;
DELETE FROM orders WHERE order_id = 101;
TRUNCATE TABLE orders;
UNION ve UNION ALL arasındaki fark nedir?
"UNION" ve "UNION ALL" arasındaki fark nedir?
Her ikisi de iki veya daha fazla SELECT ifadesinin sonuçlarını birleştirmek için kullanılır. Fakat "UNION", yalnızca benzersiz sonuçları döndürürken, "UNION ALL" tüm sonuçları, yinelenenleri de içererek döndürür.
SQL'de bir alt sorgu (subquery) nedir?
Bir alt sorgu, başka bir SQL ifadesi içinde kullanılan bir sorgudur. Alt sorgular genellikle "WHERE" ya da "HAVING" ifadeleri içinde kullanılır ve genellikle bir değer döndürürler.
"HAVING" ve "WHERE" arasındaki fark nedir?
Hem "HAVING" hem de "WHERE", belirli koşulların karşılanması durumunda veri döndürmek için kullanılır. Ancak, "WHERE", gruplama yapılmadan önce bir veri setini filtrelerken, "HAVING" gruplama yapıldıktan sonra veri setini filtreler.
"DISTINCT" anahtar kelimesi ne işe yarar?
"DISTINCT" anahtar kelimesi, bir sorgunun döndürdüğü sonuç setindeki yinelenen satırları kaldırmak için kullanılır.
SQL'de bir "alias" nedir ve ne için kullanılır?
Bir "alias" (takma ad), SQL sorgularında geçici bir ad olarak kullanılır. Sorguları daha okunabilir hale getirebilirler ve genellikle karmaşık sorgular veya "JOIN" operasyonları yapılırken kullanılırlar.
SQL'de "commit" işlemi ne anlama gelir?
"Commit" işlemi, işlemlerin kalıcı hale gelmesini sağlar. Yani, bir "commit" işlemi yapıldıktan sonra, yapılan tüm değişiklikler kalıcı olur ve geri alınamaz.
Elbette, aşağıda SQL hakkında daha fazla sıkça sorulan soru ve onların cevapları bulunmaktadır:
SQL'de 'Scalar functions' (Skalar fonksiyonlar) ne demektir?
Skalar fonksiyonlar, bir girdi değeri alır ve tek bir çıktı değeri döndürür. Örnekler arasında LENGTH(), UCASE(), LCASE(), ROUND(), NOW() gibi fonksiyonlar bulunmaktadır.
SQL'de 'Aggregate functions' (Toplulaştırma fonksiyonları) ne demektir?
Toplulaştırma fonksiyonları, bir dizi değeri alır ve tek bir değer döndürür. Bu, bir grup kaydın özet bilgisini almak için kullanılır. Örnekler arasında SUM(), AVG(), MAX(), MIN(), COUNT() gibi fonksiyonlar bulunmaktadır.
SQL'de bir 'Constraint' (Kısıtlama) nedir?
Kısıtlamalar, bir tabloda hangi verinin saklanabileceğini belirlemek için kullanılır. Kısıtlamalar, bir tablo oluşturulurken veya daha sonra tabloya eklenir. 'Primary Key', 'Foreign Key', 'NOT NULL', 'UNIQUE' ve 'CHECK' kısıtlamaları SQL'deki yaygın kısıtlama tipleridir.
'Normalization' (Normalizasyon) nedir?
Normalizasyon, bir veritabanını tasarlamanın bir yoludur. Veri tekrarını azaltmayı ve veri bütünlüğünü sağlamayı amaçlar. Normalizasyon süreci genellikle birkaç 'normal form'a (ör. Birinci Normal Form, İkinci Normal Form) tabloyu dönüştürmeyi içerir.
SQL'de 'Denormalization' (Denormalizasyon) nedir ve neden yapılır?
Denormalizasyon, normalizasyonun aksine, performansı artırmak için verinin bilinçli bir şekilde tekrarlanmasıdır. Denormalizasyon, okuma işlemlerini hızlandırabilir ancak yazma işlemlerini yavaşlatabilir çünkü aynı veri birden fazla yerde güncellenmelidir.
SQL'de 'Cursor' (İmleç) nedir?
İmleç, bir SQL veritabanında sonuç setini tek bir satırı işleyerek yürütmek için kullanılan bir veri yapısıdır. İmleçler genellikle büyük sonuç setleriyle çalışırken ve her satırı ayrı ayrı işlemek gerektiğinde kullanılır.
'Primary Key' (Birincil Anahtar) nedir?
Birincil anahtar, bir tablodaki her satırı benzersiz olarak tanımlayan bir veya daha fazla sütundur. Her tablonun yalnızca bir birincil anahtarı olabilir. Birincil anahtarlar, veritabanı içindeki diğer tablolarla ilişkiler kurmak için de kullanılır.
'Foreign Key' (Yabancı Anahtar) nedir?
Yabancı anahtar, bir tabloda, başka bir tablonun birincil anahtarına referans veren bir veya daha fazla sütundur. Yabancı anahtarlar, veri bütünlüğünü korumak ve tablolar arasında ilişkiler kurmak için kullanılır.
'Auto Increment' özelliği ne işe yarar?
'Auto Increment' özelliği, bir tablodaki bir sütuna otomatik olarak artan bir sayı değeri atamak için kullanılır. Genellikle birincil anahtar sütunu için kullanılır.
'Date' ve 'Time' fonksiyonları nelerdir?
'Date' ve 'Time' fonksiyonları, tarih ve saat değerleriyle çalışmayı kolaylaştırır. Örneğin, NOW() fonksiyonu mevcut tarih ve saat değerini döndürür, DATE() fonksiyonu bir tarih değerinden tarih bilgisini alır, DAY(), MONTH(), YEAR() fonksiyonları sırasıyla gün, ay, yıl bilgisi alır.
'NULL' değerleri nasıl işlenir?
'NULL' bir değerin var olmadığını veya bilinmediğini gösterir. 'NULL' değerler 'IS NULL' veya 'IS NOT NULL' ile kontrol edilebilir ve 'COALESCE()' gibi fonksiyonlarla işlenebilir.
SQL'de bir 'Schema' (Şema) nedir?
Bir şema, veritabanındaki tablolar, görünümler ve diğer nesnelerin bir koleksiyonudur. Şemalar, veritabanını düzenlemeye ve farklı kullanıcılar ve uygulamalar için veriyi bölme ve yönetmeye yardımcı olur.
SQL interview soruları ve cevapları
Elbette, aşağıda SQL hakkında olası mülakat soruları ve cevapları bulunmaktadır. Her cevapta ayrıca SQL sorgu örnekleri de mevcuttur.
Veritabanında normalizasyon nedir?
Normalizasyon, veritabanının tasarlanmasının bir yoludur ve veri tekrarını azaltmayı ve veri bütünlüğünü sağlamayı amaçlar. Normalizasyon süreci genellikle birkaç 'normal form'a (ör. Birinci Normal Form, İkinci Normal Form) tabloyu dönüştürmeyi içerir.
Bir 'INNER JOIN' ne zaman kullanılır?
'INNER JOIN' anahtar kelimesi, iki tablo arasında belirli bir koşulu karşılayan satırları seçer. Aşağıdaki örnekte, 'orders' tablosundan ve 'customers' tablosundan 'customer_id' eşleşen satırlar seçilir:
sql
Copy code
SELECT orders.order_id, customers.customer_name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id;
'LEFT JOIN' ve 'RIGHT JOIN' arasındaki fark nedir?
'LEFT JOIN' anahtar kelimesi, sol tablodaki tüm kayıtları ve sağ tablodan eşleşen kayıtları döndürür. Eşleşme olmayan durumda, sonuç NULL değerler içerir.
'RIGHT JOIN' ise sağ tablodaki tüm kayıtları ve sol tablodan eşleşen kayıtları döndürür. Eşleşme olmayan durumda, sonuç NULL değerler içerir.
sql
Copy code
SELECT orders.order_id, customers.customer_name
FROM orders
LEFT JOIN customers ON orders.customer_id = customers.customer_id;
SELECT orders.order_id, customers.customer_name
FROM orders
RIGHT JOIN customers ON orders.customer_id = customers.customer_id;
Veritabanı indekslerinin avantajları ve dezavantajları nelerdir?
İndekslerin avantajları genellikle veri sorgularının hızını artırmaktır. Ancak, dezavantajları da vardır: İndeksler disk alanı tüketir ve her veri değişikliği (ekleme, güncelleme, silme) sırasında indekslerin güncellenmesi gerektiği için yazma işlemlerini yavaşlatabilir.
'GROUP BY' ve 'ORDER BY' arasındaki fark nedir?
'GROUP BY' sorgunun sonucunu belirli bir veya daha fazla sütuna göre gruplar. 'ORDER BY' ise sonuç setini belirli bir veya daha fazla sütuna göre sıralar. İki anahtar kelime genellikle birlikte kullanılır.
sql
Copy code
SELECT customer_id, COUNT(*)
FROM orders
GROUP BY customer_id
ORDER BY COUNT(*) DESC;
'HAVING' anahtar kelimesi ne işe yarar?
'HAVING' anahtar kelimesi, 'GROUP BY' ifadesi ile kullanıldığında, grupların koşullara göre filtrelenmesini sağlar. Genellikle toplulaştırma fonksiyonlarıyla birlikte kullanılır.
sql
Copy code
SELECT customer_id, COUNT(*)
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5;
SQL'de bir 'View' (Görünüm) nedir ve ne zaman kullanılır?
Bir 'View', saklanmış bir sorgu sonucu setidir. Veri tabanında gerçek bir tablo gibi çalışır, ancak verileri saklamaz, sadece belirli bir sorgu sonucunu temsil eder. Kullanıcıların karmaşık sorguları daha basit bir şekilde yönetmelerine, verinin güvenli bir şekilde paylaşılmasına ve verinin daha anlaşılır bir şekilde sunulmasına yardımcı olur.
sql
Copy code
CREATE VIEW HighValueOrders AS
SELECT order_id, customer_id, order_value
FROM orders
WHERE order_value > 1000;
SQL'de 'Stored Procedure' (Saklı Yordam) nedir?
Bir 'Stored Procedure', veritabanında saklanan ve bir dizi SQL ifadesini içeren önceden derlenmiş bir kod bloğudur. Parametre alabilir ve çıktı verebilir. Veritabanı işlemlerini daha verimli hale getirir ve aynı işlemlerin tekrar tekrar yazılmasını önler.
sql
Copy code
CREATE PROCEDURE UpdateOrderValue
@OrderId INT,
@NewValue DECIMAL
AS
UPDATE orders
SET order_value = @NewValue
WHERE order_id = @OrderId;
SQL'de 'Index' (İndeks) nedir ve ne zaman kullanılır?
Bir indeks, veritabanı tablosundaki belirli bir sütundaki değerlerin hızlı bir şekilde bulunmasını sağlar. Indeksler genellikle büyük tablolarda sorgu performansını artırmak için kullanılır.
sql
Copy code
CREATE INDEX idx_orders_customer_id
ON orders (customer_id);
SQL'de bir 'Trigger' (Tetikleyici) nedir?
Bir 'Trigger', belirli bir olay gerçekleştiğinde (INSERT, UPDATE, DELETE) otomatik olarak çalışan saklı bir yordamdır. Veritabanındaki işlemleri otomatikleştirmek için kullanılır.
sql
Copy code
CREATE TRIGGER OrderValueCheck
BEFORE INSERT ON orders
FOR EACH ROW
BEGIN
IF NEW.order_value <= 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Order value must be positive';
END IF;
END;
SQL'de 'Transaction' (İşlem) nedir?
Bir 'Transaction', bir veya daha fazla ilgili işlemi gruplandıran ve bu işlemlerin tümünün başarılı bir şekilde gerçekleştiğinden emin olan bir birimdir. Eğer işlemlerden herhangi biri başarısız olursa, tüm işlem geri alınır (ROLLBACK). Bu, veritabanı bütünlüğünü korumak için önemlidir.
sql
Copy code
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
IF @@ERROR = 0
COMMIT;
ELSE
ROLLBACK;
SQL'de bir 'Primary Key' (Birincil Anahtar) nedir?
Bir 'Primary Key', bir veritabanı tablosundaki her satırı benzersiz ve özgün bir şekilde tanımlayan bir veya daha fazla sütundur. 'NULL' değerlere izin vermez ve her bir satırda biricik olmalıdır.
sql
Copy code
CREATE TABLE Customers (
CustomerID int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
...
);
'Foreign Key' (Yabancı Anahtar) nedir ve ne zaman kullanılır?
Bir 'Foreign Key', başka bir tablonun 'Primary Key'ine referans veren bir veya daha fazla sütundur. Bir 'Foreign Key', tablolar arasında ilişkileri kurar ve veri bütünlüğünü sağlar.
sql
Copy code
CREATE TABLE Orders (
OrderID int NOT NULL,
CustomerID int FOREIGN KEY REFERENCES Customers(CustomerID),
...
);
'NULL' değerleri nasıl yönetiriz?
'NULL' bir değeri temsil etmez; bir değerin bilinmediğini veya mevcut olmadığını temsil eder. 'IS NULL' veya 'IS NOT NULL' operatörleri 'NULL' değerlerle çalışmak için kullanılır.
sql
Copy code
SELECT * FROM Customers
WHERE Address IS NULL;
'UNION' ve 'JOIN' arasındaki fark nedir?
'UNION' ve 'JOIN', iki tabloyu birleştirmek için kullanılan iki farklı yöntemdir. 'UNION', iki tablonun satırını birleştirir ve benzersiz sonuçları döndürür. 'JOIN' ise, iki tablo arasındaki ortak özellikleri (genellikle bir 'Foreign Key') kullanarak tabloları birleştirir.
sql
Copy code
SELECT City FROM Customers
UNION
SELECT City FROM Suppliers;
SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
'ALTER' komutu ne işe yarar?
'ALTER' komutu, mevcut bir veritabanı tablosunun yapısını değiştirmek için kullanılır. Sütunlar eklemek, değiştirmek veya silmek için kullanılabilir.
sql
Copy code
ALTER TABLE Customers
ADD Email varchar(255);
SQL'de 'Subquery' (Alt sorgu) nedir ve ne zaman kullanılır?
'Subquery' veya iç sorgu, bir başka SQL sorgusu içinde yer alan bir sorgudur. 'Subquery', bir sorgunun bir parçası olarak bir tabloya veya bir sütuna dayalı değerler döndürebilir. Genellikle, bir sorguda iki aşamalı bir hesaplama yapılması gerektiğinde kullanılır.
sql
Copy code
SELECT CustomerName
FROM Customers
WHERE CustomerID IN (SELECT CustomerID FROM Orders WHERE OrderValue > 1000);
SQL'de 'Distinct' anahtar kelimesi ne işe yarar?
'Distinct' anahtar kelimesi, bir sorgu sonucunda belirli bir sütunda yinelenen değerlerin çıkarılmasını sağlar. Yani, her bir değerin yalnızca bir kez döndürülmesini garanti eder.
sql
Copy code
SELECT DISTINCT Country FROM Customers;
SQL'de bir 'Alias' (Takma ad) nedir ve ne zaman kullanılır?
Bir 'Alias', bir sütun veya tablo için kullanılan geçici bir adıdır. 'Alias'lar, genellikle sorguları daha okunabilir hale getirmek veya karmaşık sorgularda sütun veya tablo adlarını kısaltmak için kullanılır.
sql
Copy code
SELECT c.CustomerName, o.OrderValue
FROM Customers AS c
INNER JOIN Orders AS o ON c.CustomerID = o.CustomerID;
SQL'de 'Like' operatörü ne işe yarar?
'Like' operatörü, bir sütundaki değerlerin belirli bir desene uyup uymadığını kontrol etmek için kullanılır. Yüzde (%) ve alt çizgi (_) gibi joker karakterlerle birlikte kullanılır: % herhangi bir dizeyi, _ ise herhangi bir tek karakteri temsil eder.
sql
Copy code
SELECT * FROM Customers
WHERE City LIKE 'L%';
SQL'de 'Group By' ve 'Having' anahtar kelimeleri ne işe yarar?
'Group By' anahtar kelimesi, belirli bir sütuna göre sonuçları gruplamak için kullanılır. Genellikle 'Count', 'Max', 'Min', 'Sum' veya 'Avg' gibi toplu işlevlerle birlikte kullanılır. 'Having' anahtar kelimesi ise, gruplandırılmış sonuçlarda bir koşul belirlemek için kullanılır. 'Having', 'Group By' ile birlikte kullanıldığında 'Where' anahtar kelimesinin bir benzeri olarak çalışır.
sql
Copy code
SELECT Country, COUNT(CustomerID)
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5;
'Limit' anahtar kelimesi ne zaman ve nasıl kullanılır?
'Limit' anahtar kelimesi, döndürülen satır sayısını sınırlamak için kullanılır. Genellikle test amaçlı sorgular yaparken veya performansı artırmak için büyük veritabanlarında kullanılır.
sql
Copy code
SELECT * FROM Customers
LIMIT 10;
SQL'de bir 'Self-Join' nedir?
'Self-Join', bir tablonun kendisiyle birleştirildiği bir 'Join' türüdür. Bu genellikle, aynı tablo içinde ilişkili olan satırları karşılaştırmak için kullanılır.
sql
Copy code
SELECT A.CustomerName AS Customer1, B.CustomerName AS Customer2, A.City
FROM Customers A, Customers B
WHERE A.CustomerID <> B.CustomerID
AND A.City = B.City ;
SQL'de 'Normalization' (Normalizasyon) nedir?
'Normalization', bir veritabanının tasarımını optimize etmek ve veri tekrarını en aza indirmek için bir dizi tekniktir. Bu genellikle, veri bütünlüğünü korumak ve depolama alanını daha verimli bir şekilde kullanmak için yapılır.
SQL'de 'Index' (İndeks) nedir ve ne zaman kullanılır?
'Index', bir tablo üzerinde hızlı veri alımı sağlayan bir veritabanı yapısıdır. 'Index'ler, veri tabanında sorgu performansını artırmak için kullanılır, çünkü verinin daha hızlı bulunmasına yardımcı olurlar. Ancak, 'Index'lerin dikkatli bir şekilde kullanılması gerekir çünkü çok fazla 'Index', veritabanının yazma işlemlerini yavaşlatabilir.
sql
Copy code
CREATE INDEX idx_CustomerName
ON Customers (CustomerName);
SQL'de 'View' (Görünüm) nedir ve ne zaman kullanılır?
Bir 'View', bir veya daha fazla tablo üzerindeki bir sorgunun sonucudur. 'View'lar, sık sık kullanılan sorguları kaydetmek, karmaşık sorguları basitleştirmek veya kullanıcının belirli verilere erişimini sınırlamak için kullanılabilir.
sql
Copy code
CREATE VIEW [Top Customers] AS
SELECT CustomerName, Count(OrderID)
FROM Orders
GROUP BY CustomerName
HAVING Count(OrderID) > 5;
SQL'de 'Stored Procedure' (Depolanmış Yordam) nedir ve ne zaman kullanılır?
'Stored Procedure', bir veya daha fazla SQL ifadesini içeren ve genellikle karmaşık veya tekrarlayan veritabanı işlemlerini gerçekleştiren bir kod bloğudur. 'Stored Procedure'lar, kod tekrarını azaltmak, veri tabanı performansını artırmak ve SQL enjeksiyonu gibi güvenlik risklerini azaltmak için kullanılır.
sql
Copy code
CREATE PROCEDURE UpdateInventory
@ProductID int, @SoldAmount int
AS
UPDATE Products
SET Inventory = Inventory - @SoldAmount
WHERE ID = @ProductID;
'Cursor' (İmleç) SQL'de ne anlama gelir ve ne zaman kullanılır?
'Cursor'lar, bir sorgu sonucundaki satırlar üzerinde işlem yapmak için kullanılan bir veritabanı yapısıdır. Bir 'Cursor', bir sonuç setini satır satır işlemek için kullanılır. Ancak, 'Cursor'ların dikkatli kullanılması gerekir çünkü genellikle daha yavaştır ve daha fazla kaynak tüketir.
sql
Copy code
DECLARE @ProductID int, @ProductName nvarchar(100), @Price decimal(10,2);
DECLARE product_cursor CURSOR FOR
SELECT ID, Name, Price FROM Products
WHERE Discontinued = 0;
OPEN product_cursor;
FETCH NEXT FROM product_cursor INTO @ProductID, @ProductName, @Price;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @ProductName + ' (' + CAST(@Price AS nvarchar(10)) + ')';
FETCH NEXT FROM product_cursor INTO @ProductID, @ProductName, @Price;
END;
CLOSE product_cursor;
DEALLOCATE product_cursor;
SQL'de bir 'Trigger' (Tetikleyici) nedir?
'Trigger', belirli bir olayın (INSERT, UPDATE, DELETE gibi) gerçekleşmesi üzerine otomatik olarak çalışan bir SQL prosedürüdür. Tetikleyiciler, veri bütünlüğünü korumak, veritabanındaki değişikliklere otomatik olarak yanıt vermek veya veritabanında belirli işlemler gerçekleştirebilmek için kullanılır.
sql
Copy code
CREATE TRIGGER SalesLT.INCREASE_SALES
ON SalesLT.SalesOrderHeader
AFTER INSERT
AS
UPDATE SalesLT.SalesSummary
SET SalesLT.SalesSummary.TotalSales += SalesLT.SalesOrderHeader.SubTotal
FROM inserted;
SQL'de 'Primary Key' (Birincil Anahtar) ve 'Foreign Key' (Yabancı Anahtar) nedir?
Bir 'Primary Key', bir tablodaki her satırı benzersiz olarak tanımlayan bir veya daha fazla sütundur. Her tablonun sadece bir 'Primary Key'i olabilir ve NULL değerlerini kabul etmez.
Bir 'Foreign Key', bir tablodaki bir sütunun veya sütun setinin, başka bir tablonun 'Primary Key'ine referans vermesidir. 'Foreign Key'ler, veritabanı tabloları arasında ilişkileri kurmak ve veri bütünlüğünü korumak için kullanılır.
SQL'de bir 'Schema' (Şema) nedir?
Bir 'Schema', bir veritabanının yapısını ve organizasyonunu tanımlayan bir çerçevedir. 'Schema', tablolar, sütunlar, veri türleri, indeksler, anahtarlar, prosedürler, görünümler ve diğer veritabanı nesnelerini içerir.
SQL'de 'ACID' prensipleri nelerdir?
'ACID' (Atomicity, Consistency, Isolation, Durability - Atomiklik, Tutarlılık, İzolasyon, Dayanıklılık), veritabanı işlemlerinin güvenli ve güvenilir olmasını sağlayan dört temel prensiptir. 'ACID' prensipleri, veritabanının beklenmedik hatalar, sistem çökmeleri veya güç kesintileri gibi durumlar karşısında bile veri bütünlüğünü korumasını sağlar.
SQL'de 'Distinct' anahtar kelimesi ne işe yarar?
'Distinct' anahtar kelimesi, belirli bir sütundan yinelenen değerleri kaldırmak için kullanılır. Bu genellikle bir sütunda belirli bir değerin kaç kez göründüğünü belirlemek veya bir sütundaki benzersiz değerlerin listesini almak için kullanılır.
sql
Copy code
SELECT DISTINCT Country
FROM Customers;
SQL'de 'Union' ve 'Union All' arasındaki fark nedir?
'Union' ve 'Union All', iki veya daha fazla sorgunun sonuçlarını birleştirmek için kullanılır. Ancak, 'Union' yinelenen satırları kaldırırken, 'Union All' yinelenen satırları korur.
SELECT City FROM Customers
UNION
SELECT City FROM Suppliers
ORDER BY City;
sql
Copy code
SELECT City FROM Customers
UNION ALL
SELECT City FROM Suppliers
ORDER BY City;
SQL'de 'Case' ifadesi ne işe yarar?
'Case' ifadesi, bir sorgu içinde koşullu mantığı uygulamak için kullanılır. Bu genellikle bir sütundaki değerlere dayalı olarak yeni bir sütun oluşturmak veya bir sütundaki değerleri dönüştürmek için kullanılır.
sql
Copy code
SELECT OrderID, Quantity,
CASE
WHEN Quantity > 30 THEN 'The quantity is high'
WHEN Quantity = 30 THEN 'The quantity is medium'
ELSE 'The quantity is low'
END AS QuantityText
FROM OrderDetails;
'Subquery' (Alt sorgu) SQL'de ne anlama gelir ve ne zaman kullanılır?
Bir 'Subquery', başka bir sorgu içinde yer alan bir sorgudur. 'Subquery'ler, bir sorgunun nerede kullanılacağına karar vermek, bir sorgunun sonuçlarını filtrelemek veya bir sorgunun sonuçları üzerinde hesaplamalar yapmak için kullanılır.
sql
Copy code
SELECT CustomerName
FROM Customers
WHERE CustomerID IN (SELECT CustomerID FROM Orders WHERE Quantity > 10);
SQL'de 'Join' nedir ve farklı 'Join' türleri nelerdir?
'Join' SQL'de iki veya daha fazla tabloya ait verileri birleştirmek için kullanılır. 'Join' türleri arasında 'Inner Join', 'Left Join', 'Right Join', 'Full Outer Join' ve 'Self Join' bulunur.
sql
Copy code
SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID = Customers.CustomerID;
SQL'de 'Normalization' (Normalizasyon) nedir ve niçin önemlidir?
'Normalization', bir veritabanının tasarımını optimize etmek için kullanılan bir tekniktir. Normalizasyonun amacı, verinin tekrarını azaltmak, verinin bütünlüğünü korumak ve veritabanının verimli bir şekilde ölçeklenmesini sağlamaktır.
SQL'de 'Denormalization' (Denormalizasyon) nedir ve ne zaman kullanılır?
'Denormalization', normalizasyonun aksine, veritabanında veri tekrarını artırır. Bu genellikle veri almak için gereken sorgu karmaşıklığını azaltmak ve veri okuma hızını artırmak için yapılır. Denormalizasyon, veritabanı performansını artırmak için dikkatlice kullanılmalıdır.
'Group By' ve 'Order By' SQL'de ne anlama gelir ve ne zaman kullanılır?
'Group By', belirli bir veya daha fazla sütuna göre sonuçları gruplamak için kullanılır. Genellikle agregat fonksiyonları (COUNT, MAX, MIN, SUM, AVG) ile birlikte kullanılır.
'Order By', sonuçları belirli bir veya daha fazla sütuna göre sıralamak için kullanılır. ASC (artan) veya DESC (azalan) anahtar kelimeleri ile birlikte kullanılabilir.
sql
Copy code
SELECT Country, COUNT(CustomerID)
FROM Customers
GROUP BY Country
ORDER BY COUNT(CustomerID) DESC;
'Window Functions' (Pencere Fonksiyonları) SQL'de ne işe yarar?
Pencere fonksiyonları, bir sonuç kümesi üzerinde karmaşık hesaplamalar yapmayı sağlar. Bir pencere fonksiyonu, bir dizi 'Partition By', 'Order By' ve 'Rows' veya 'Range' ile tanımlanan bir pencere üzerinde işlem yapar.
sql
Copy code
SELECT SalesPerson, FiscalYear, TotalSales,
RANK() OVER (PARTITION BY FiscalYear ORDER BY TotalSales DESC) AS SalesRank
FROM SalesData;
Veri türleri arasında dönüşüm yapmayı ne zaman ve nasıl kullanırsınız?
Veri türleri arasında dönüşüm, bir veri türünün başka bir veri türüne dönüştürülmesini sağlar. Bu genellikle matematiksel hesaplamalar yapmak, veri düzenlemek veya veriyi belirli bir biçimde sunmak için gereklidir. SQL'de CAST veya CONVERT fonksiyonları bu amaçla kullanılır.
sql
Copy code
SELECT OrderID, CAST(OrderDate AS VARCHAR(10))
FROM Orders;
SQL'de 'Cursors' (İmleçler) nedir ve nasıl kullanılır?
İmleçler, bir sonuç kümesi üzerinde satır satır işlem yapmayı sağlar. İmleçler genellikle büyük veri kümeleri üzerinde karmaşık işlemler yapmak için kullanılır.
sql
Copy code
DECLARE @OrderID INT;
DECLARE OrderCursor CURSOR FOR SELECT OrderID FROM Orders WHERE OrderDate < GETDATE();
OPEN OrderCursor;
FETCH NEXT FROM OrderCursor INTO @OrderID;
WHILE @@FETCH_STATUS = 0
BEGIN
-- Do something with @OrderID
FETCH NEXT FROM OrderCursor INTO @OrderID;
END;
CLOSE OrderCursor;
DEALLOCATE OrderCursor;
'Indexes' (İndeksler) SQL'de ne işe yarar ve ne zaman kullanılır?
İndeksler, veritabanında veriye hızlı bir şekilde erişim sağlar. İndeksler, sorgu performansını önemli ölçüde artırabilir, ancak aşırı kullanımı veritabanına ek yük bindirir ve veri ekleme veya güncelleme işlemlerini yavaşlatır. İndeksler genellikle büyük veri kümelerinde ve sık sorgulanan sütunlarda kullanılır.
sql
Copy code
CREATE INDEX idx_Customers_Country
ON Customers (Country);
SQL'de 'Triggers' (Tetikleyiciler) nedir ve ne zaman kullanılır?
Tetikleyiciler, belirli bir olay (INSERT, UPDATE veya DELETE) gerçekleştiğinde otomatik olarak çalışan stored procedures'lardır. Genellikle veri bütünlüğünü sağlamak veya belirli iş kurallarını uygulamak için kullanılırlar.
sql
Copy code
CREATE TRIGGER trg_AfterInsert
AFTER INSERT ON Employees
FOR EACH ROW
BEGIN
INSERT INTO AuditTable (EmpID, AuditMessage)
VALUES (NEW.ID, CONCAT('New employee with ID ', NEW.ID, ' has been added.'));
END;
SQL'de 'Stored Procedures' (Depolanmış Prosedürler) nedir ve ne zaman kullanılır?
Depolanmış prosedürler, bir dizi SQL ifadesini içeren ve bir isimle kaydedilen ve gerektiğinde çalıştırılan prosedürlerdir. Genellikle karmaşık işlemleri otomatikleştirmek, veri bütünlüğünü sağlamak ve veri erişimini kontrol etmek için kullanılırlar.
sql
Copy code
CREATE PROCEDURE InsertEmployee
@Name NVARCHAR(50),
@Position NVARCHAR(50),
@Salary DECIMAL(10, 2)
AS
BEGIN
INSERT INTO Employees (Name, Position, Salary)
VALUES (@Name, @Position, @Salary);
END;
SQL'de 'Views' (Görünümler) nedir ve ne zaman kullanılır?
Görünümler, bir veya daha fazla tabloya dayalı bir sanal tablo oluşturmak için kullanılır. Veri erişimini sınırlamak, karmaşık sorguları basitleştirmek veya veriyi daha anlaşılır bir biçimde sunmak için kullanılırlar.
sql
Copy code
CREATE VIEW EmployeeView AS
SELECT EmployeeID, EmployeeName, Department
FROM Employees
WHERE IsActive = 1;
SQL'de 'Transactions' (İşlemler) nedir ve nasıl kullanılır?
İşlemler, bir veya daha fazla SQL ifadesinin bir grup olarak çalışmasını sağlar. İşlemler, veri bütünlüğünü korumak ve veri tabanında yapılan değişikliklerin tutarlılığını sağlamak için kullanılır.
sql
Copy code
BEGIN TRANSACTION;
BEGIN TRY
INSERT INTO Employees (Name, Position) VALUES ('John Doe', 'Manager');
INSERT INTO Salaries (EmployeeID, Salary) VALUES (SCOPE_IDENTITY(), 50000);
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION;
THROW;
END CATCH
COMMIT TRANSACTION;
'Subqueries' (Alt sorgular) ve 'Correlated Subqueries' (İlişkili alt sorgular) nedir?
Alt sorgu, bir başka SQL ifadesinin içinde yer alan bir sorgudur. İlişkili alt sorgular ise dış sorgudan değer alabilen ve her dış sorgu satırı için çalışabilen alt sorgulardır.
sql
Copy code
SELECT CustomerName
FROM Customers
WHERE CustomerID IN (SELECT CustomerID FROM Orders WHERE Quantity > 10);
sql
Copy code
SELECT e1.EmployeeName
FROM Employees e1
WHERE 5 > (SELECT COUNT(*) FROM Employees e2 WHERE e2.Salary > e1.Salary);
SQL'de 'Temporary Tables' (Geçici Tablolar) nedir ve ne zaman kullanılır?
Geçici tablolar, bir SQL oturumu boyunca var olan ve oturum sona erdiğinde otomatik olarak silinen tablolardır. Geçici tablolar genellikle büyük veri kümeleri üzerinde karmaşık işlemler yapmak için kullanılır.
sql
Copy code
CREATE TEMPORARY TABLE temp_Orders AS
SELECT * FROM Orders
WHERE OrderDate > '2023-01-01';
'Pivot' ve 'Unpivot' işlemleri nedir ve nasıl kullanılır?
'Pivot', satır verilerini sütun verilerine dönüştürmek için kullanılır. 'Unpivot' ise sütun verilerini satır verilerine dönüştürür.
sql
Copy code
SELECT *
FROM (SELECT Year, Quarter, Sales FROM SalesData)
PIVOT (SUM(Sales) FOR Quarter IN ([Q1], [Q2], [Q3], [Q4]));
'Locks' (Kilitler) ve 'Deadlocks' (Kilitlenmeler) nedir?
Kilitler, aynı veri üzerinde aynı anda birden fazla işlemi engellemek için kullanılır. Kilitlenmeler ise iki veya daha fazla işlem birbirini bekler hale geldiğinde ve hiçbirinin ilerlememesi durumunda oluşur. Bu genellikle her işlemin, diğer işlem tarafından tutulan bir kaynağı beklediği durumlarda oluşur.