📄
Text
·
25 min
INSERT INTO ... SELECT
Giriş — Sorgu Sonucundan Toplu Veri Ekleme
INSERT INTO ... SELECT bir sorgunun sonucunu doğrudan başka bir tabloya ekler. Veri taşıma, arşivleme, raporlama tabloları doldurma ve ETL süreçlerinde sıkça kullanılır.
Temel Kullanım
-- Premium müşterileri ayrı tabloya kopyala
CREATE TABLE premium_customers LIKE customers;
INSERT INTO premium_customers
SELECT * FROM customers
WHERE customer_id IN (
SELECT customer_id FROM orders
GROUP BY customer_id
HAVING SUM(total_amount) > 50000
);
-- Belirli sütunları seçerek ekle
INSERT INTO report_table (customer_name, total_orders, total_revenue)
SELECT
CONCAT(c.first_name, ' ', c.last_name),
COUNT(o.order_id),
SUM(o.total_amount)
FROM customers c
INNER JOIN orders o ON c.customer_id = o.customer_id
GROUP BY c.customer_id, c.first_name, c.last_name;Arşivleme Senaryosu
-- Eski siparişleri arşiv tablosuna taşı
INSERT INTO orders_archive
SELECT * FROM orders WHERE order_date < '2023-01-01';
-- Arşivlenen kayıtları ana tablodan sil
DELETE FROM order_items WHERE order_id IN (
SELECT order_id FROM orders WHERE order_date < '2023-01-01'
);
DELETE FROM orders WHERE order_date < '2023-01-01';Hesaplanmış Değerlerle Ekleme
-- Günlük satış özeti tablosu
INSERT INTO daily_sales_summary (report_date, total_orders, total_revenue, avg_order)
SELECT
CURDATE() - INTERVAL 1 DAY,
COUNT(*),
SUM(total_amount),
AVG(total_amount)
FROM orders
WHERE DATE(order_date) = CURDATE() - INTERVAL 1 DAY;Dikkat Edilmesi Gerekenler
SELECT'teki sütun sayısı ve sıra, INSERT'teki sütun listesiyle eşleşmeli
Veri tipleri uyumlu olmalı
UNIQUE/PRIMARY KEY çakışması olabilir —
INSERT IGNOREveyaON DUPLICATE KEY UPDATEkullanBüyük veri setlerinde transaction içinde çalıştır
Özet
INSERT INTO tablo SELECT ...sorgu sonucunu doğrudan tabloya eklerVeri taşıma, arşivleme, raporlama tabloları doldurma için idealdir
Sütun sayısı ve tipleri uyumlu olmalı
Büyük işlemlerde transaction kullan
AI Asistan
Sorularını yanıtlamaya hazır