SQL, günümüzde veritabanı yönetimi için temel araçlardan biri olmuştur. “Structured Query Language”ın kısaltması olan SQL, ilişkisel veritabanlarındaki verilerle etkileşimde bulunmak, sorgulamak ve yönetmek için kullanılan bir programlama dilidir. Bu yazıda, SQL’in temel prensiplerinden başlayarak, işlevselliğini, avantajlarını ve günlük kullanım örneklerini keşfedeceğiz.
İçindekiler
SQL’in Temel Prensipleri
a. Veritabanı Oluşturma ve Yönetme: SQL, veritabanları oluşturmak ve yönetmek için kullanılır. CREATE DATABASE komutu ile yeni bir veritabanı oluşturabilir, ardından CREATE TABLE ile tabloları tanımlayabilirsiniz.
b. Veri Ekleme, Güncelleme ve Silme: INSERT, UPDATE ve DELETE komutları ile SQL, veritabanındaki verilerle etkileşime geçer. Bu komutlar, veri eklemek, güncellemek veya silmek için kullanılır.
c. Veritabanı Sorgulama: SELECT komutu, veritabanından veri çekmek için kullanılır. WHERE koşulları ekleyerek veriyi filtreleyebilir, GROUP BY ile gruplandırabilir ve ORDER BY ile sıralayabilirsiniz.
SQL Temel Komutları
a. SELECT İfadeleri:
- SQL’de
SELECT
komutu, veritabanından veri çekmek için kullanılır. Temel bir kullanım şu şekildedir:
1 2 3 | SELECT column1, column2, ... FROM table_name WHERE condition; |
1 | SELECT * FROM customers; |
1 | SELECT customer_id, first_name, last_name FROM customers; |
1 | SELECT product_name, price FROM products WHERE price > 50; |
DML (Data Manipulation Language) komutları, veritabanındaki verilerle etkileşimde bulunmak için kullanılır.
INSERT Komutu:
INSERT
komutu, veritabanına yeni veri eklemek için kullanılır. Bir tabloya yeni bir kayıt eklemek amacıyla kullanılır.
1 2 | INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); |
1 2 | INSERT INTO customers (first_name, last_name, email) VALUES ('John', 'Doe', 'john.doe@example.com'); |
UPDATE
komutu, var olan veriyi güncellemek için kullanılır. Belirli bir koşula uyan kayıtları güncellemek amacıyla kullanılır.
1 2 3 | UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition; |
1 2 3 | UPDATE products SET stock_quantity = 100 WHERE product_id = 1; |
DELETE
komutu, veritabanındaki veriyi silmek için kullanılır. Belirli bir koşula uyan kayıtları silmek amacıyla kullanılır.
1 2 | DELETE FROM table_name WHERE condition; |
1 2 | DELETE FROM customers WHERE customer_id = 1001; |
SQL Fonksiyonları
a. Matematiksel Fonksiyonlar:
- SUM(): Belirli bir sütundaki değerlerin toplamını hesaplar.
1 | SELECT SUM(price) AS total_price FROM products; |
- AVG(): Belirli bir sütundaki değerlerin ortalamasını hesaplar.
1 | SELECT AVG(salary) AS average_salary FROM employees; |
- MIN() ve MAX(): Sırasıyla belirli bir sütundaki en küçük ve en büyük değerleri bulur.
1 2 | SELECT MIN(stock_quantity) AS min_stock FROM products; SELECT MAX(stock_quantity) AS max_stock FROM products; |
- CONCAT(): İki veya daha fazla dizeyi birleştirir.
1 | SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM employees; |
- SUBSTRING(): Belirli bir dizeden bir alt dize alır.
1 | SELECT SUBSTRING(product_name, 1, 5) AS short_name FROM products; |
- LENGTH(): Bir dizenin uzunluğunu hesaplar.
1 | SELECT LENGTH(product_name) AS name_length FROM products; |
- UPPER() ve LOWER(): Sırasıyla bir dizedeki harfleri büyük veya küçük harfe dönüştürür.
1 2 | SELECT UPPER(first_name) AS upper_name FROM employees; SELECT LOWER(last_name) AS lower_name FROM employees; |
- NOW(): Geçerli tarih ve saat bilgisini alır.
1 | SELECT NOW() AS current_datetime; |
- COUNT(): Belirli bir sütundaki toplam satır sayısını hesaplar.
1 | SELECT COUNT(customer_id) AS total_customers FROM customers; |
- GROUP BY: Belirli bir sütuna göre gruplama yapar ve grup bazında işlemler yapmanıza olanak tanır.
1 | SELECT category, AVG(price) AS avg_price FROM products GROUP BY category; |
SQL ve Web Geliştirme
a. Veritabanı İlişkisi:
Web geliştirmenin temelinde veritabanları, kullanıcıların etkileşimde bulunduğu içerik ve verileri depolar. SQL, bu veritabanlarının yönetimi ve sorgulanması için kullanılır.
b. Veritabanı Bağlantısı:
Web uygulamaları, SQL ile etkileşimde bulunabilmek için veritabanına bağlantı kurmalıdır. Bu bağlantı genellikle programlama dilleri aracılığıyla gerçekleştirilir. Örneğin, PHP’de MySQL veritabanına bağlantı kurma işlemi şu şekildedir:
1 2 3 4 5 6 7 8 9 10 11 12 | $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "database"; // MySQL ile bağlantı oluştur $conn = new mysqli($servername, $username, $password, $dbname); // Hata kontrolü if ($conn->connect_error) { die("Bağlantı hatası: " . $conn->connect_error); } |
c. SQL ve Dinamik İçerik Oluşturma:
Web uygulamaları genellikle kullanıcıya özelleştirilmiş ve dinamik içerik sunar. Bu içerik, SQL sorguları aracılığıyla veritabanından çekilir ve web sayfasına entegre edilir.
1 2 3 4 5 6 7 8 9 10 11 12 | // Örneğin: Kullanıcının favori ürünlerini getir $user_id = 123; $sql = "SELECT product_name FROM favorite_products WHERE user_id = $user_id"; $result = $conn->query($sql); if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { echo "Favori Ürün: " . $row["product_name"]. "<br>"; } } else { echo "Hiç favori ürün yok."; } |
d. ORM (Object-Relational Mapping):
ORM, SQL sorgularını daha programlama diline özgü nesnelerle eşleştiren bir yaklaşımdır. Bu, veritabanı işlemlerini daha soyut ve programlanabilir hale getirir. Örneğin, Python’da SQLAlchemy gibi ORM kütüphaneleri kullanılabilir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | # Örneğin: SQLAlchemy ile favori ürünleri getir from sqlalchemy import create_engine, Column, Integer, String, ForeignKey from sqlalchemy.orm import declarative_base, Session, relationship Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) favorite_products = relationship("Product", back_populates="user") class Product(Base): __tablename__ = 'products' id = Column(Integer, primary_key=True) name = Column(String) user_id = Column(Integer, ForeignKey('users.id')) user = relationship("User", back_populates="favorite_products") # Favori ürünleri getirme user = session.query(User).filter_by(id=123).first() if user: for product in user.favorite_products: print("Favori Ürün:", product.name) else: print("Hiç favori ürün yok.") |
e. Güvenlik ve SQL Injection:
SQL Injection saldırıları, web uygulamalarında sıkça karşılaşılan bir güvenlik sorunudur. Bu nedenle, kullanıcı girişleri ve SQL sorgularını oluştururken parametreli sorgular ve veri doğrulama gibi güvenlik önlemleri alınmalıdır.
1 2 3 4 5 6 7 8 9 | // SQL Injection'a karşı güvenli sorgu kullanımı $user_input = $_POST['user_input']; $sql = "SELECT * FROM users WHERE username = ?"; $stmt = $conn->prepare($sql); $stmt->bind_param("s", $user_input); $stmt->execute(); $result = $stmt->get_result(); // Diğer SQL sorgu işlemleri... |