Merhaba, bu yazımda SQL Nedir? Yapılandırılmış Sorgu Dili konusuna değinmek istiyorum. Neredeyse tüm projelerimde SQL ‘i kullanırım. Daha doğrusu SQL’siz bir uygulama geliştirmem nadirdir. SQL Eğitim Setim için biraz bahsetmiştim ancak bu yazıda SQL’i derinlemesine göreceğiz.
SQL Nedir? Yapılandırılmış Sorgu Dili
SQL Nedir?
SQL, Structured Query Language, Yapılandırılmış Sorgu Dili, programlamada kullanılan ve ilişkisel bir veritabanı yönetim sisteminde (RDBMS) tutulan verileri yönetmek için veya bir ilişkisel veri akışı yönetim sisteminde (RDSMS) akış işleme için tasarlanmış alana özgü bir dildir. Yapılandırılmış verilerin, yani varlıklar ve değişkenler arasındaki ilişkileri içeren verilerin işlenmesinde özellikle yararlıdır. SQL, ISAM veya VSAM gibi eski okuma-yazma API’lerine göre iki ana avantaj sunar. İlk olarak, tek bir komutla birçok kayda erişme kavramını tanıttı. İkinci olarak, bir kayda nasıl ulaşılacağını belirleme ihtiyacını ortadan kaldırır, örn. indeksli veya indekssiz.
Başlangıçta ilişkisel cebir ve grup ilişkisel hesaplamaya dayanan SQL, genellikle alt diller olarak gayri resmi olarak sınıflandırılabilen birçok ifade türünden oluşur: bir veri sorgulama dili (DQL), bir veri tanımlama dili (DDL), bir veri kontrol dili (DCL) ve bir veri işleme dili (DML). SQL’in kapsamı, veri sorgulama, veri işleme (ekleme, güncelleme ve silme), veri tanımlama (şema oluşturma ve değiştirme) ve veri erişim kontrolünü içerir. SQL esasen bir bildirim dili (4GL) olmasına rağmen, aynı zamanda yordamsal öğeler de içerir.
SQL, Edgar F. Codd’un ilişkisel modelini kullanan ilk ticari dillerden biriydi. Model, 1970 yılında yayınladığı “A Relational Model of Data for Large Shared Data Banks” adlı etkili makalesinde tanımlandı.
SQL, 1986’da Amerikan Ulusal Standartlar Enstitüsü’nün (ANSI) ve 1987’de Uluslararası Standardizasyon Örgütü’nün (ISO) bir standardı haline geldi. O zamandan beri, standart daha geniş bir dizi özelliği içerecek şekilde revize edildi. Standartların varlığına rağmen, çoğu SQL kodu, farklı veritabanı sistemlerine taşınmadan önce en azından bazı değişiklikler gerektirir.
SQL Tarihi
SQL ilk olarak 1970’lerin başında Edgar F. Codd’dan ilişkisel modeli öğrendikten sonra Donald D. Chamberlin ve Raymond F. Boyce tarafından IBM’de geliştirildi. Başlangıçta SEQUEL (Yapılandırılmış İngilizce Sorgu Dili) olarak adlandırılan bu sürüm, IBM San Jose Araştırma Laboratuvarı’nda bir grubun 1970’lerde geliştirdiği IBM’in orijinal yarı-ilişkisel veritabanı yönetim sistemi System R’de depolanan verileri işlemek ve almak için tasarlandı.
Chamberlin ve Boyce’un ilişkisel bir veritabanı dili konusundaki ilk girişimi SQUARE (İlişkisel Bir Ortamda Sorguları Belirtme) idi, ancak alt simge/üst simge gösterimi nedeniyle kullanımı zordu. 1973’te San Jose Araştırma Laboratuvarı’na taşındıktan sonra, SQUARE’in devamı üzerinde çalışmaya başladılar. “SEQUEL” İngiltere merkezli Hawker Siddeley Dynamics Engineering Limited şirketinin ticari markası olduğu için SEQUEL adı daha sonra SQL (sesli harfler düşürülerek) olarak değiştirildi. SQL etiketi daha sonra Yapılandırılmış Sorgu Dili’nin kısaltması oldu.
Sistemin kullanışlılığını ve pratikliğini belirlemek için SQL’i müşteri test sitelerinde test ettikten sonra sırasıyla IBM, 1979, 1981 ve 1983’de piyasada bulunan System/38, SQL/DS ve IBM Db2 dahil olmak üzere System R prototiplerine dayalı ticari ürünler geliştirmeye başladı.
1970’lerin sonlarında, Relational Software, Inc. (şimdi Oracle Corporation), Codd, Chamberlin ve Boyce tarafından tanımlanan kavramların potansiyelini gördü ve ABD Donanması, Merkezi İstihbarat’a satma arzusuyla kendi SQL tabanlı RDBMS’lerini geliştirdi. Ajans ve diğer ABD devlet kurumları. Haziran 1979’da, İlişkisel Yazılım, SQL’in ticari olarak mevcut ilk uygulamalarından birini, VAX bilgisayarlar için Oracle V2’yi (Sürüm2) tanıttı.
1986’da, ANSI ve ISO standart grupları, standart “Veritabanı Dili SQL” dil tanımını resmi olarak kabul etti. Standardın yeni sürümleri 1989, 1992, 1996, 1999, 2003, 2006, 2008, 2011 ve en son 2016’da yayınlandı.
Syntax
- SQL dili, aşağıdakiler de dahil olmak üzere çeşitli dil öğelerine bölünmüştür:
- İfadelerin ve sorguların kurucu bileşenleri olan tümceler. (Bazı durumlarda bunlar isteğe bağlıdır.)
- Skaler değerler veya sütun ve veri satırlarından oluşan tablolar üretebilen ifadeler
- SQL üç değerli mantık (3VL) (doğru/yanlış/bilinmeyen) veya Boolean doğruluk değerleriyle değerlendirilebilecek koşulları belirten ve deyimlerin ve sorguların etkilerini sınırlamak veya program akışını değiştirmek için kullanılan yüklemler.
- Belirli kriterlere göre verileri alan sorgular. Bu, SQL’in önemli bir unsurudur.
- Şema ve veriler üzerinde kalıcı bir etkiye sahip olabilen veya işlemleri, program akışını, bağlantıları, oturumları veya tanılamayı kontrol edebilen ifadeler.
- SQL ifadeleri ayrıca noktalı virgül (“;”) ifade sonlandırıcısını da içerir. Her platformda gerekli olmasa da SQL gramerinin standart bir parçası olarak tanımlanır.
- Önemsiz boşluklar, SQL deyimlerinde ve sorgularında genellikle yok sayılır, bu da okunabilirlik için SQL kodunu biçimlendirmeyi kolaylaştırır.
Prosedürel Uzantılar
SQL belirli bir amaç için tasarlanmıştır: ilişkisel bir veritabanında bulunan verileri sorgulamak. SQL, C veya BASIC gibi zorunlu bir programlama dili değil, küme tabanlı, bildirimsel bir programlama dilidir. Ancak, Standart SQL’in uzantıları, akış denetimi yapıları gibi prosedürel programlama dili işlevselliği ekler.
Standart SQL/PSM uzantılarına ve tescilli SQL uzantılarına ek olarak, diğer dillerle DBMS entegrasyonu yoluyla birçok SQL platformunda prosedürel ve nesne yönelimli programlanabilirlik mevcuttur. SQL standardı, SQL veritabanlarında Java kodunu desteklemek için SQL/JRT uzantılarını (Java Programlama Dili için SQL Rutinleri ve Türleri) tanımlar. Microsoft SQL Server 2005, veritabanında yönetilen .NET derlemelerini barındırmak için SQLCLR’yi (SQL Server Ortak Dil Çalışma Zamanı) kullanır; SQL Server’ın önceki sürümleri ise öncelikle C ile yazılmış yönetilmeyen genişletilmiş saklı yordamlarla sınırlıydı. PostgreSQL, kullanıcıların işlevleri geniş bir Perl, Python, Tcl, JavaScript (PL/V8) ve C dahil olmak üzere çeşitli diller.
SQL Birlikte Çalışabilirliği ve Standardizasyonu
Genel Bakış
SQL uygulamaları satıcılar arasında uyumsuzdur ve standartları tam olarak takip etmesi gerekmez. Özellikle tarih ve saat sözdizimi, dize birleştirme, NULL’lar ve karşılaştırmalı büyük/küçük harf duyarlılığı satıcıdan satıcıya değişir. PostgreSQL her durumda standarda uymasa da, belirli istisnalar, standartlara uygunluk için çaba gösteren PostgreSQL ve Mimer SQL’dir. Örneğin, PostgreSQL’de alıntı yapılmayan isimlerin küçük harfe katlanması, alıntı yapılmayan isimlerin büyük harfe katlanması gerektiğini söyleyen SQL standardı ile uyumlu değildir. Bu nedenle, Foo, standarda göre foo değil, FOO’ya eşdeğer olmalıdır.
SQL’in popüler uygulamaları, genellikle, DATE veya TIME veri türleri gibi Standart SQL’in temel özelliklerini destekler. Bu tür en belirgin örnekler ve tesadüfen en popüler ticari ve tescilli SQL VTYS’leri Oracle (DATE’si DATETIME olarak davranır ve TIME türünden yoksundur) ve MS SQL Server’dır (2008 sürümünden önce). Sonuç olarak, SQL kodu nadiren değişiklik yapılmadan veritabanı sistemleri arasında taşınabilir.
Uyumsuzluk Nedenleri
Veritabanı sistemleri arasında bu taşınabilirlik eksikliğinin birkaç nedeni şunları içerir:
- SQL standardının karmaşıklığı ve boyutu, çoğu uygulayıcının tüm standardı desteklemediği anlamına gelir.
- Standart, birkaç önemli alanda (örneğin, dizinler, dosya depolama …) veritabanı davranışını belirtmez ve uygulamaların nasıl davranacağına karar vermesine izin verir.
- SQL standardı, uyumlu bir veritabanı sisteminin uygulaması gereken sözdizimini kesin olarak belirtir. Bununla birlikte, standardın dil yapılarının semantiğine ilişkin belirtimi daha az iyi tanımlanmıştır ve bu da belirsizliğe yol açar.
- Birçok veritabanı satıcısının mevcut geniş müşteri tabanları vardır; SQL standardının daha yeni sürümünün satıcının veritabanının önceki davranışıyla çakıştığı durumlarda, satıcı geriye dönük uyumluluğu bozmak istemeyebilir.
- Veri tabanı tedarikçilerini değiştirmeyi kolaylaştırmak için satıcılar için çok az ticari teşvik mevcuttur (bkz. satıcı kilitleme).
- Veritabanı yazılımını değerlendiren kullanıcılar, performans gibi diğer faktörleri standartlara uygunluktan daha yüksek önceliklerine yerleştirme eğilimindedir.
Standardizasyon Geçmişi
SQL, 1986’da ANSI tarafından SQL-86 ve ISO 1987’de standart olarak kabul edilmiştir. ISO/IEC JTC 1, Bilgi teknolojisi, Alt Komite SC 32, Veri yönetimi ve değişimi tarafından sürdürülür.
1996 yılına kadar, Ulusal Standartlar ve Teknoloji Enstitüsü (NIST) veri yönetimi standartları programı, SQL DBMS’nin SQL standardına uygunluğunu onayladı. Satıcılar artık ürünlerinin uyumluluğunu kendileri onaylıyor.
Orijinal standart, “SQL” için resmi telaffuzun bir başlangıç olduğunu ilan etti: /ˌɛsˌkjuːˈɛl/ (“ess cue el”). Ne olursa olsun, İngilizce konuşan birçok veritabanı uzmanı (Donald Chamberlin’in kendisi dahil), dilin yayın öncesi geliştirme adı olan “SEQUEL”i yansıtan /ˈsiːkwəl/ (“sequel”) kısaltmasına benzer bir telaffuz kullanır.
SQL standardı bir dizi revizyondan geçmiştir:
Mevcut Standart
Standart genel olarak şu modelle belirtilir: ISO/IEC 9075-n:yyyy Bölüm n: başlık veya kısayol olarak ISO/IEC 9075.
ISO/IEC 9075, ISO/IEC 13249: SQL tabanlı arayüzleri ve video, ses ve uzamsal veriler gibi uygulamaları geniş çapta yaymak için paketleri tanımlayan SQL Multimedya ve Uygulama Paketleri (SQL/MM) ile tamamlanmaktadır. İlgili taraflar, ISO, IEC veya ANSI’den SQL standartları belgeleri satın alabilir. SQL:2008’in bir taslağı zip arşivi olarak ücretsiz olarak mevcuttur.
Dağıtılmış SQL İşleme
Dağıtılmış İlişkisel Veritabanı Mimarisi (DRDA), 1988’den 1994’e kadar IBM içindeki bir çalışma grubu tarafından tasarlandı. DRDA, ağa bağlı ilişkisel veritabanlarının SQL isteklerini yerine getirmek için işbirliği yapmasını sağlar.
Etkileşimli bir kullanıcı veya program, yerel bir RDB’ye SQL ifadeleri yayınlayabilir ve uzak RDB’lerden yanıt olarak veri tabloları ve durum göstergeleri alabilir. SQL ifadeleri ayrıca paketler olarak uzak RDB’lerde derlenebilir ve saklanabilir ve ardından paket adına göre çağrılabilir. Bu, karmaşık, yüksek frekanslı sorgular yayınlayan uygulama programlarının verimli çalışması için önemlidir. Erişilecek tabloların uzak sistemlerde bulunması özellikle önemlidir.
DRDA’nın mesajları, protokolleri ve yapısal bileşenleri, Dağıtılmış Veri Yönetimi Mimarisi tarafından tanımlanır. Dağıtılmış SQL işleme ala DRDA, çağdaş dağıtılmış SQL veritabanlarından farklıdır.
SQL Hakkındaki Eleştiriler
Tasarım
SQL, teorik temelinden, ilişkisel modelden ve tanımlama grubu hesabından çeşitli şekillerde sapar. Bu modelde, bir tablo bir demetler kümesidir, SQL’de ise tablolar ve sorgu sonuçları satır listeleridir; aynı satır birden çok kez ortaya çıkabilir ve satırların sırası sorgularda kullanılabilir (örneğin, LIMIT yan tümcesinde). Eleştirmenler, SQL’in kesinlikle orijinal temele dönen bir dille değiştirilmesi gerektiğini savunuyorlar: örneğin, Üçüncü Manifesto’ya bakınız.
Ortogonallik ve Tamlık
Erken spesifikasyonlar, birincil anahtarlar gibi ana özellikleri desteklemiyordu. Sonuç kümeleri adlandırılamadı ve alt sorgular tanımlanmadı. Bunlar 1992’de eklendi.
Toplam türlerinin eksikliği, SQL’in kullanıcı tanımlı türlerinin tam olarak kullanılmasına bir engel olarak tanımlanmıştır. Örneğin JSON desteğinin 2016’da yeni bir standart tarafından eklenmesi gerekiyor.
NULL
Null kavramı bazı tartışmaların konusudur. Null işaretçisi, bir değerin olmadığını gösterir ve bir tamsayı sütunu için 0 değerinden veya bir metin sütunu için boş bir dizeden farklıdır. Null kavramı, SQL’de 3 değerli mantığın genel 3 değerli mantığının somut bir uygulaması olan 3 değerli mantığı zorlar.
Mükerrer Kayıtlar
Bir başka popüler eleştiri, yinelenen satırlara izin vermesi, veri türleri verileri ayrıştırma açısından ve modülerliğin olmaması nedeniyle doğru bir şekilde temsil etmeyi zorlaştırabilecek Python gibi dillerle entegrasyonu yapmasıdır.
Bu genellikle, tablodaki bir satırı benzersiz şekilde tanımlayan bir veya daha fazla sütunla bir birincil anahtar veya benzersiz bir kısıtlama bildirerek önlenir.
Empedans Uyumsuzluğu
Nesne-ilişkisel empedans uyumsuzluğuna benzer bir şekilde, bildirimsel SQL dili ile SQL’in tipik olarak gömülü olduğu prosedürel diller arasında bir uyumsuzluk meydana gelir.
SQL Veri Türleri
SQL standardı, üç tür veri türü tanımlar
- Önceden tanımlanmış veri türleri
- İnşa edilmiş tipler
- Kullanıcı tanımlı türler.
Oluşturulan türler ARRAY, MULTISET, REF(erence) veya ROW’dan biridir. Kullanıcı tanımlı türler, kendi yapıcıları, gözlemcileri, mutatörleri, yöntemleri, kalıtım, aşırı yükleme, üzerine yazma, arabirimler vb. ile nesne yönelimli dildeki sınıflarla karşılaştırılabilir. Önceden tanımlanmış veri türleri, uygulama tarafından özünde desteklenir.
Önceden tanımlanmış veri türleri
- Karakter Tipleri
- Character -Karakter (CHAR)
- Character varying – Karakter değişen (VARCHAR)
- Character large object – Karakter büyük nesne(CLOB)
- Ulusal karakter türleri
- National character – Ulusal karakter (NCHAR)
- National character varying -Ulusal karakter değişen (NCHAR VARYING)
- National character large object – Ulusal karakter büyük nesne (NCLOB)
- İkili türler
- Binary – İkili (BINARY)
- Binary varying – İkili değişken (VARBINARY)
- Binary large object – İkili büyük nesne (BLOB)
- Sayısal Türler
- Exact numeric types – Tam sayısal türler (NUMERIC, DECIMAL, SMALLINT, INTEGER, BIGINT)
- Approximate numeric types – Yaklaşık sayısal türler (FLOAT, REAL, DOUBLE PRECISION)
- Decimal floating-point type – Ondalık kayan nokta türü (DECFLOAT)
- Datetime types – Tarih saat türleri(DATE, TIME, TIMESTAMP)
- Interval type – Aralık türü(INTERVAL)
- Boolean
- XML
- JSO
SQL Nedir? Yapılandırılmış Sorgu Dili yazımda buraya kadardı.
Discord’a katılmayı unutmayın.
Tüm Üretim ve Yönetim Sistemleri kategorisine ait yazılara da bağlantıya tıklayarak ulaşabilirsiniz.
Tüm Programlama kategorisindeki yazılarıma bağlantıya tıklayarak ulaşabilirsiniz. SQL Eğitim Seti sayfasına bağlantıya tıklayarak ulaşabilirsiniz.
Diğer yazılarımızda görüşmek üzere…