2. SQL nedir?
SQL: Standard Query Language
Bir veri tabanından diğerine değişen
unsurları olsa da, ANSI standardıdır.
İlişkisel veri tabanlarıyla işlem yapmak için
kullanılır.
− Sorgu; kayıt ekleme, silme ve
güncelleme
− Veri yapılarını değiştirme
− Yetki verme ve geri alma
4GL: 4. kuşak programlama dili
3. Veri Tanımlama Komutları
DDL: Data Definition Language
Veri tabanı şemasını tanımlamak için kullanılan
komutlardır.
Veri yapılarını oluşturmak, değiştirmek veya silmek
için kullanılırlar.
Veri sözlüğü (data dictionary): Bir veri tabanını ve
onu oluşturan öğelerin (örnek: tablolar) yapısını,
biçimini, içeriğini tanımlayan bilgi kümesidir. Hem
veri tabanına erişmek, hem de onu değiştirmek için
kullanılır.
4. CREATE
Veri tabanının kendisini veya içinde bir öğe
yaratmak için kullanılır.
CREATE komutu ile yarabilirsiniz:
− Tablo (table)
− Dizin (index)
− Görünüm (view)
− Saklı yordam (stored procedure)
− İşlev (function)
− Tetikleyici (trigger)
CREATE DATABASE crm;
5. CREATE TABLE
CREATE TABLE musteri (
musteri_no INT NOT NULL,
firma_adi VARCHAR(100) NOT NULL,
sehir VARCHAR(20) NULL,
ulke VARCHAR(20) NULL,
vergi_dairesi VARCHAR(20) NULL,
vergi_no VARCHAR(11) NULL
);
6. Veri tipleri
Sayısal: INT, DECIMAL, DOUBLE
Alfanumerik: CHAR, VARCHAR
Tarih / saat: DATE, TIME, DATETIME,
TIMESTAMP
Mantıksal: BOOLEAN
Metin: TEXT
İkilik (binary): BLOB
7. Sayısal veri tipleri
INT, TINYINT, SMALLINT, BIGINT...
− Unutma: En küçük ve en büyük değerler!
− https://dev.mysql.com/doc/refman/8.0/en/integer-types.html
DECIMAL
− Nokta (ondalık ayracı) sabit. Kesin değer.
FLOAT, DOUBLE
− Nokta kayıyor!!! Yaklaşık değer.
BIT: 1 veya 0 saklayalım :)
− Örnek: b'101'
8. Alfanümerik veri tipleri
CHAR ve VARCHAR arasındaki fark nedir?
CHAR(5): 5 karakterlik yer bellekte veya
diskte ayrılır.
VARCHAR(5): Değer atanıncaya kadar yer
ayrılmaz. Değer atanınca, kaç karakterse o
kadar yer ayrılır.
Tüm değerler '' veya “” içine yazılmalıdır:
Örnek: 'Ahmet Yılmaz'
9. Tarih veri tipleri (MySQL)
DATE: 'YYYY-AA-GG'
TIME: 'SS:DD:SS'
DATETIME: 'YYYY-AA-GG SS:DD:ss'
− '2018-10-05 21:30:04'
TIMESTAMP:
− '1970-01-01 00:00:01' UTC '2038-01-09
03:14:07' UTC arasındaki zamanlar için.
− https://www.codeproject.com/Tips/12156
35/MySQL-DATETIME-vs-TIMESTAMP
10. DROP
Veri tabanını veya CREATE ile yaratılan
öğeleri silmek için kullanılır.
DROP DATABASE crm;
DROP TABLE musteri;
11. TRUNCATE
Bir tablonun içindeki tüm kayıtları siler.
Veri tabanı implementasyonuna bağlı
olarak, kayıtların diskte işgal ettiği yeri de
boşaltabilir.
Eğer boşaltılmak istenen tablonun
kayıtlarına verilen yabancı anahtar
referansları varsa, TRUNCATE komutuna
izin verilmez.
TRUNCATE TABLE musteri;
12. RENAME
Bir tablonun veya veri tabanı öğesinin adını
değiştirmek için kullanılır.
ALTER TABLE musteri
RENAME TO firma;
13. ALTER
Bir veri tabanının veya onun öğelerinden
birinin özelliklerini değiştirmek için kullanılır.
ALTER komutundan sonra ADD, DROP,
CHANGE, RENAME gibi komutlar da gelir.
ALTER TABLE musteri
ADD PRIMARY KEY (musteri_no);
14. ALTER ile tabloları değiştirmek
Kolon ekleme:
ALTER TABLE musteri
ADD COLUMN notlar TEXT NULL;
Dizin (index) ekleme:
ALTER TABLE musteri
ADD INDEX (firma_adi);
Bir kolonu değiştirme:
ALTER TABLE musteri
CHANGE firma_adi firma_adi
VARCHAR(150) NOT NULL;
16. Boş / Null
Bir değeri bilmiyorsak ne yazacağız?
Örnek: Yaşı bilmiyorsak 0 mı yazalım?
Ama ya bebekse ve yaşı o yüzden 0 ise?
Bilinmeyen veya uygun olmayan değerler
için NULL kullanılır.
Veri yapılarını tanımlarken NULL
yazarsak, o alan boş bırakılabilir, NOT
NULL yazarsak boş bırakılamaz!
17. CREATE TABLE
CREATE TABLE sinif_listesi (
ogrenci_no VARCHAR(10) NOT NULL,
ad VARCHAR(30) NOT NULL,
soyad VARCHAR(30),
sinif TINYINT
);
ALTER TABLE sinif_listesi
ADD PRIMARY KEY (ogrenci_no);
18. Veri Değiştirme Komutları
DML: Data Manipulation Language
Tablolardaki kayıtları süzmek ve
değiştirmek için kullanılan komutlardır.
− SELECT: Kayıtları süzmek ve göstermek
− INSERT: Kayıt eklemek
− UPDATE: Kaydı değiştirmek
− DELETE: Kaydı silmek
19. INSERT
Var olan bir tabloya yeni kayıt eklemek için
kullanılır.
INSERT INTO musteri (musteri_no,
firma_adi, sehir, ulke,
vergi_dairesi, vergi_no, notlar)
VALUES (1, 'Yakamoz', 'Bursa',
'Türkiye', 'Nilüfer', '928 xxx
yyyy', 'yazılım firması');
20. UPDATE
Var olan bir kaydın bir kısmını veya
tamamını değiştirmek için kullanılır.
UPDATE musteri
SET notlar = 'teknik destek ve
yazılım'
WHERE musteri_no = 1;
21. DELETE
Tablodan bir veya daha fazla kaydı silmek
için kullanılır.
DELETE FROM musteri
WHERE musteri_no = 1;
22. SELECT
Bir veya daha fazla tablodan sorgulama
yapmak için kullanılır.
Kayıtları süzer ve bir sonuç kümesi olarak
geri döner.
SELECT gösterilecek-alanlar
FROM hangi-tablodan
WHERE süzme-koşulları;
23. Dizin (indeks)
Tablolar üzerinde yapılan sorgulamalarda
hızı artırmak için dizin (indeks) kullanılır.
Dizinleri bir kitabın arkasındaki indeks
bölümüne benzetebilirir. Aradığımız
anahtar sözcüğün hangi sayfalarda
(tablonun neresinde) olduğunu bize
söylerler.
24. Birincil anahtar ve indeksler
Birincil anahtar (primary key) de bir
indekstir.
Birincil anahtar her tabloda bir tane olur.
Üzerinde kurulu olduğu kolon veya
kolonların
− Tekil olması
− Boş olmaması zorunludur.
25. Birincil anahtar ve indeksler
Ancak indeksler, tanımlarına bağlı olarak
boş değer alabilen kolonlar üzerine de
kurulur.
Açıkça tekil (UNIQUE) olarak
tanımlanmamışlarsa, tekil olmak zorunda
değillerdir.
26. Performans açısından...
(+) Dizin kurmak, sorgularken hızı artırır.
ÖNEMLİ: Bir kolon üzerine dizin
kurulmamışsa, o kolon değeri için süzme
yapıldığında; sorgu sırasında bütün tablo
baştan sona okunur.
(-) İndeksler (dizinler) diskte yer işgal eder.
(-) Bir tablo üzerinde pek çok indeks (dizin)
varsa; kayıt ekleme, güncelleme ve silme
işlemleri daha uzun sürer.
27. ADD INDEX
Tabloya indeks ekleme:
ALTER TABLE musteri
ADD INDEX (sehir);
Tabloya tekil indeks ekleme:
ALTER TABLE musteri
ADD UNIQUE (firma_adi);