SQL

bilgipedi.com.tr sitesinden
SQL (Yapılandırılmış Sorgu Dili)
ParadigmaBildirimsel
AileSorgu dili
Tarafından tasarlandıDonald D. Chamberlin
Raymond F. Boyce
GeliştiriciISO/IEC JTC 1 (Joint Technical Committee 1) / SC 32 (Subcommittee 32) / WG 3 (Working Group 3)
İlk ortaya çıktı1974; 49 yıl önce
Kararlı sürüm
SQL:2016 / Aralık 2016; 6 yıl önce
Yazma disipliniStatik, güçlü
İŞLETIM SISTEMIÇapraz platform
Web sitesiwww.iso.org/standard/63555.html
Başlıca uygulamalar
Birçok
Lehçeler
  • SQL-86
  • SQL-89
  • SQL-92
  • SQL:1999
  • SQL:2003
  • SQL:2006
  • SQL:2008
  • SQL:2011
  • SQL:2016
Etkilendiği
Datalog
Etkilenmiş
CQL, LINQ, SPARQL, SOQL, PowerShell, JPQL, jOOQ, N1QL
  • Vikikitap'ta Yapılandırılmış Sorgu Dili
SQL (dosya biçimi)
Dosya adı uzantısı
.sql
İnternet medya türü
uygulama/sql
Tarafından geliştirilmiştirISO/IEC
İlk sürüm1986
Format türüVeritabanı
StandartISO/IEC 9075
Açık format mı?Evet
Web sitesiwww.iso.org/standard/63555.html

SQL (/ˌɛsˌkjuːˈɛl/ (listen) S-Q-L, /ˈskwəl/ "sequel"; Structured Query Language) programlamada kullanılan ve bir ilişkisel veritabanı yönetim sisteminde (RDBMS) tutulan verileri yönetmek veya bir ilişkisel veri akışı yönetim sisteminde (RDSMS) akış işleme için tasarlanmış alana özgü bir dildir. Özellikle yapılandırılmış verilerin, yani varlıklar ve değişkenler arasındaki ilişkileri içeren verilerin işlenmesinde kullanışlıdır.

SQL, ISAM veya VSAM gibi eski okuma-yazma API'lerine göre iki ana avantaj sunar. İlk olarak, tek bir komutla çok sayıda kayda erişme kavramını getirmiştir. İkinci olarak, bir kayda nasıl ulaşılacağını belirtme ihtiyacını ortadan kaldırır, örneğin bir dizinle veya dizinsiz.

Başlangıçta ilişkisel cebir ve tuple ilişkisel hesaplamasına dayanan SQL, gayri resmi olarak alt diller olarak sınıflandırılabilecek birçok ifade türünden oluşur: bir veri sorgu dili (DQL), bir veri tanımlama dili (DDL), bir veri kontrol dili (DCL) ve bir veri manipülasyon dili (DML). SQL'in kapsamı veri sorgusu, veri manipülasyonu (ekleme, güncelleme ve silme), veri tanımı (şema oluşturma ve değiştirme) ve veri erişim kontrolünü içerir. SQL esasen bildirimsel bir dil (4GL) olmasına rağmen, prosedürel unsurlar da içerir.

SQL, Edgar F. Codd'un ilişkisel modelini kullanan ilk ticari dillerden biridir. Bu model Codd'un 1970 tarihli "A Relational Model of Data for Large Shared Data Banks" adlı etkili makalesinde tanımlanmıştır. Codd tarafından tanımlanan ilişkisel modele tamamen bağlı kalmamasına rağmen, en yaygın kullanılan veritabanı dili haline gelmiştir.

SQL, 1986 yılında Amerikan Ulusal Standartlar Enstitüsü'nün (ANSI) ve 1987 yılında Uluslararası Standardizasyon Örgütü'nün (ISO) bir standardı haline gelmiştir. O zamandan bu yana standart, daha geniş bir dizi özelliği içerecek şekilde revize edilmiştir. Standartların varlığına rağmen, çoğu SQL kodu farklı veritabanı sistemlerine taşınmadan önce en azından bazı değişiklikler gerektirir.

Tarihçe

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ştirilmiştir. Başlangıçta SEQUEL (Structured English Query Language) olarak adlandırılan bu sürüm, IBM San Jose Araştırma Laboratuvarı'ndaki 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 tasarlanmıştır.

Chamberlin ve Boyce'un ilk ilişkisel veritabanı dili denemesi SQUARE (Specifying Queries in A Relational Environment) 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 adı daha sonra SQL olarak değiştirildi (sesli harfler atılarak) çünkü "SEQUEL" İngiltere merkezli Hawker Siddeley Dynamics Engineering Limited şirketinin ticari markasıydı. SQL etiketi daha sonra Structured Query Language'in kısaltması haline geldi.

Sistemin kullanışlılığını ve pratikliğini belirlemek için SQL'i müşteri test sahalarında test ettikten sonra IBM, System/38, SQL/DS ve IBM Db2 dahil olmak üzere System R prototipine dayalı ticari ürünler geliştirmeye başladı ve bunlar sırasıyla 1979, 1981 ve 1983 yıllarında ticari olarak satışa sunuldu.

1970'lerin sonlarında, Relational Software, Inc. (şimdiki Oracle Corporation) Codd, Chamberlin ve Boyce tarafından tanımlanan kavramların potansiyelini gördü ve ABD Donanması, Merkezi İstihbarat Teşkilatı ve diğer ABD devlet kurumlarına satmak amacıyla kendi SQL tabanlı RDBMS'lerini geliştirdi. Haziran 1979'da Relational Software, VAX bilgisayarlar için SQL'in ticari olarak mevcut ilk uygulamalarından biri olan Oracle V2'yi (Sürüm2) tanıttı.

1986 yılına gelindiğinde ANSI ve ISO standart grupları standart "Veritabanı Dili SQL" dil tanımını resmi olarak kabul etti. Standardın yeni versiyonları 1989, 1992, 1996, 1999, 2003, 2006, 2008, 2011 ve en son 2016 yıllarında yayınlanmıştır.

Veritabanı yaklaşımı ile birlikte bir veri sorgulama diline veya aracına ihtiyaç duyulmuştur. İlk başta matematiksel bir sözdizimine sahip olan SQUARE adlı bir dil geliştirilmiştir. Geniş kullanıcı kitleleri tarafında kolay kullanılabilmesi için matematiksel söz dizimli SQUARE dilinden vazgeçilerek, İngilizce'ye benzer sözdizimine sahip bir dil oluşturulmuş ve SEQUEL olarak adlandırılmıştır. Daha sonra da bu SEQUEL dili, İngilizce söylenişine paralel olarak SQL olarak adlandırılmıştır.

SQL dili ilişkisel alanda büyük ilgi görmüş ve İlişkisel Veri Tabanı Yönetim Sistemlerinin (İVTYS) tümünde yer alan standart dil görünümü kazanmıştır. Bu nedenle Veri Tabanı konusunda çalışan tüm bilişim teknik personeli tarafından bilinmesi gereken bir dil konumundadır.

Sözdizimi

Tek bir ifadeden oluşan SQL dili öğelerinin birkaçını gösteren bir grafik

SQL dili, aşağıdakiler de dahil olmak üzere çeşitli dil öğelerine ayrılmıştır:

  • İfadelerin ve sorguların kurucu bileşenleri olan cümleler. (Bazı durumlarda bunlar isteğe bağlıdır.)
  • Skaler değerler ya da sütun ve veri satırlarından oluşan tablolar üretebilen ifadeler
  • SQL üç değerli mantık (3VL) (doğru/yanlış/bilinmeyen) veya Boole doğruluk değerlerine göre değerlendirilebilen 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.
  • Verileri belirli kriterlere göre alan sorgular. Bu SQL'in önemli bir unsurudur.
  • Şemalar ve veriler üzerinde kalıcı bir etkiye sahip olabilen ya da işlemleri, program akışını, bağlantıları, oturumları ya da tanılamaları kontrol edebilen ifadeler.
    • SQL deyimleri ayrıca noktalı virgül (";") deyim sonlandırıcısını da içerir. Her platformda gerekli olmasa da, SQL gramerinin standart bir parçası olarak tanımlanmıştır.
  • Önemsiz boşluklar genellikle SQL deyimlerinde ve sorgularında göz ardı edilir, bu da SQL kodunun okunabilirlik için biçimlendirilmesini kolaylaştırır.
SELECT deyimi
Select deyimi, ilişkili veri tabanından veri almak için kullanılır.:SELECT ilçe, postakodu FROM tabloIlceler WHERE plakaKodu = '34'
İstanbul'un ilçeleri ile posta kodlarını gösterir
UPDATE deyimi
Update deyimi, ilişkili veri tabanındaki verileri güncellemek için kullanılır.:UPDATE tabloIlceler SET postakodu = '06720' WHERE ilce = 'Bala'
Bala'nın posta kodunu değiştirir
INSERT deyimi
Insert deyimi, ilişkili veri tabanına veri eklemek için kullanılır.:INSERT INTO tabloIlceler VALUES (, 'Yenişehir', , , '53')
Yeni veriler ekler
DELETE deyimi
Delete deyimi, ilişkili veri tabanından veri silmek için kullanılır.:DELETE FROM tabloIlceler WHERE plakaKodu = '53'
plakaKodu 53 olan bütün verileri siler

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. Bununla birlikte, Standart SQL'in uzantıları, akış kontrolü yapıları gibi prosedürel programlama dili işlevselliği ekler. Bunlar şunları içerir:

Kaynak Kısaltma Tam adınız
ANSI/ISO Standardı SQL/PSM SQL/Kalıcı Depolanmış Modüller
Interbase / Firebird PSQL Prosedürel SQL
IBM Db2 SQL PL SQL Prosedür Dili (SQL/PSM uygular)
IBM Informix SPL Saklanan Prosedürel Dil
IBM Netezza NZPLSQL (Postgres PL/pgSQL tabanlı)
Invantive PSQL Invantive Procedural SQL (SQL/PSM ve PL/SQL uygular)
MariaDB SQL/PSM, PL/SQL SQL/Kalıcı Saklı Modül (SQL/PSM uygular), Prosedürel Dil/SQL (Ada tabanlı)
Microsoft / Sybase T-SQL Transact-SQL
Mimer SQL SQL/PSM SQL/Kalıcı Depolanmış Modül (SQL/PSM uygular)
MySQL SQL/PSM SQL/Kalıcı Depolanmış Modül (SQL/PSM uygular)
MonetDB SQL/PSM SQL/Kalıcı Depolanmış Modül (SQL/PSM uygular)
NuoDB SSP Starkey Saklı Prosedürleri
Oracle PL/SQL Prosedürel Dil/SQL (Ada tabanlı)
PostgreSQL PL/pgSQL Prosedürel Dil/PostgreSQL Yapılandırılmış Sorgu Dili (azaltılmış PL/SQL tabanlı)
SAP R/3 ABAP İleri İş Uygulamaları Programlama
SAP HANA SQLScript SQLScript
Sybase Watcom-SQL SQL Anywhere Watcom-SQL Lehçesi
Teradata SPL Saklanan Prosedürel Dil

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 Common Language Runtime) kullanırken, SQL Server'ın önceki sürümleri öncelikle C dilinde yazılmış yönetilmeyen genişletilmiş saklı yordamlarla sınırlıydı. PostgreSQL, kullanıcıların Perl, Python, Tcl, JavaScript (PL/V8) ve C dahil olmak üzere çok çeşitli dillerde işlevler yazmasına olanak tanır.

  • Sybase
  • MySQL
  • PostgreSQL
  • Microsoft SQL Server
  • Oracle
  • IBM DB2
  • IBM Informix
  • Progress
  • Firebird
  • Microsoft Access

Birlikte çalışabilirlik ve standardizasyon

Genel Bakış

SQL uygulamaları satıcılar arasında uyumsuzdur ve standartlara tam olarak uymaları gerekmez. Özellikle, tarih ve saat sözdizimi, dize birleştirme, NULL'lar ve karşılaştırma büyük/küçük harf duyarlılığı satıcıdan satıcıya değişir. PostgreSQL her durumda standarda bağlı kalmasa da, standartlara uyum için çaba gösteren PostgreSQL ve Mimer SQL özel istisnalardır. Örneğin, PostgreSQL'de tırnak içine alınmamış isimlerin küçük harfe katlanması, tırnak içine alınmamış isimlerin büyük harfe katlanması gerektiğini söyleyen SQL standardıyla uyumsuzdur. 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 desteklememektedir. Bunun en bariz örnekleri ve bu arada en popüler ticari ve tescilli SQL DBMS'leri Oracle (DATE, DATETIME gibi davranır ve TIME türü yoktur) ve MS SQL Server'dır (2008 sürümünden önce). Sonuç olarak, SQL kodu veritabanı sistemleri arasında değişiklik yapılmadan nadiren taşınabilir.

Uyumsuzluk nedenleri

Veritabanı sistemleri arasındaki bu taşınabilirlik eksikliğinin çeşitli nedenleri şunlardır:

  • SQL standardının karmaşıklığı ve boyutu, çoğu uygulayıcının standardın tamamını desteklemediği anlamına gelir.
  • Standart, bazı önemli alanlarda (örn. indeksler, dosya depolama...) veritabanı davranışını belirtmez ve nasıl davranılacağına uygulamacıların 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 spesifikasyonu daha az iyi tanımlanmıştır ve bu da belirsizliğe yol açmaktadır.
  • Birçok veritabanı satıcısının mevcut büyük müşteri tabanları vardır; SQL standardının yeni sürümünün satıcının veritabanının önceki davranışıyla çeliştiği durumlarda, satıcı geriye dönük uyumluluğu bozmak istemeyebilir.
  • Veritabanı tedarikçilerini değiştirmeyi kolaylaştırmak için satıcılar için çok az ticari teşvik mevcuttur (bkz. satıcı kilitlenmesi).
  • Veritabanı yazılımını değerlendiren kullanıcılar, performans gibi diğer faktörleri standartlara uygunluktan daha öncelikli görme eğilimindedir.

Standardizasyon geçmişi

SQL, 1986 yılında ANSI tarafından SQL-86 olarak ve 1987 yılında ISO tarafından bir 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ülmektedir.

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 onaylamıştır. Satıcılar artık ürünlerinin uygunluğunu kendileri onaylamaktadır.

Orijinal standart, "SQL" için resmi telaffuzun bir baş harf olduğunu beyan etmiştir: /ˌɛsˌkjuːˈɛl/ ("ess cue el"). Ne olursa olsun, İngilizce konuşan birçok veritabanı uzmanı (Donald Chamberlin'in kendisi de dahil olmak üzere), dilin yayın öncesi geliştirme adı olan "SEQUEL "i yansıtan /ˈskwəl/ ("sequel") kısaltma benzeri telaffuzunu kullanmaktadır.
SQL standardı bir dizi revizyondan geçmiştir:

Yıl İsim Takma ad Yorumlar
1986 SQL-86 SQL-87 İlk olarak ANSI tarafından resmileştirilmiştir
1989 SQL-89 FIPS 127-1 FIPS 127-1 olarak kabul edilen bütünlük kısıtlamalarını ekleyen küçük revizyon
1992 SQL-92 SQL2, FIPS 127-2 Büyük revizyon (ISO 9075), FIPS 127-2 olarak kabul edilen Giriş Seviyesi SQL-92
1999 SQL:1999 SQL3 Düzenli ifade eşleştirme, özyinelemeli sorgular (örn. geçişli kapatma), tetikleyiciler, prosedürel ve akış kontrolü ifadeleri için destek, skaler olmayan türler (diziler) ve bazı nesne yönelimli özellikler (örn. yapılandırılmış türler), SQL'i Java'ya gömme desteği (SQL/OLB) ve tersi (SQL/JRT) eklendi
2003 SQL:2003 XML ile ilgili özellikler (SQL/XML), pencere işlevleri, standartlaştırılmış diziler ve otomatik oluşturulan değerlere sahip sütunlar (kimlik sütunları dahil) tanıtıldı
2006 SQL:2006 ISO/IEC 9075-14:2006, SQL'in XML ile kullanılabileceği yolları tanımlar. XML verilerinin bir SQL veritabanına aktarılması ve saklanması, veritabanı içinde manipüle edilmesi ve hem XML hem de geleneksel SQL verilerinin XML biçiminde yayınlanması yollarını tanımlar. Buna ek olarak, uygulamaların sıradan SQL verilerine ve XML belgelerine eş zamanlı olarak erişmek için World Wide Web Consortium (W3C) tarafından yayınlanan XML Sorgu Dili olan XQuery ile SQL kodlarına sorguları entegre etmelerine olanak tanır.
2008 SQL:2008 ORDER BY dış imleç tanımlarını yasallaştırır. INSTEAD OF tetikleyicileri, TRUNCATE deyimini, FETCH cümlesini ekler
2011 SQL:2011 Zamansal veri ekler (PERIOD FOR) (daha fazla bilgi için Temporal database#History). Pencere fonksiyonları ve FETCH cümlesi için geliştirmeler.
2016 SQL:2016 Satır deseni eşleştirme, polimorfik tablo fonksiyonları, JSON ekler
2019 SQL:2019 Bölüm 15, çok boyutlu diziler (MDarray türü ve operatörleri) ekler

Mevcut standart

Standart genellikle şu kalıpla gösterilir: 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 ile tamamlanmaktadır: SQL Multimedya ve Uygulama Paketleri (SQL/MM), video, ses ve uzamsal veriler gibi yaygın uygulamalara yönelik SQL tabanlı arayüzleri ve paketleri tanımlar. İlgilenen taraflar SQL standartları belgelerini ISO, IEC veya ANSI'den satın alabilirler. SQL:2008'in bir taslağı zip arşivi olarak ücretsiz olarak temin edilebilir.

SQL Standardının Anatomisi

SQL standardı 10 bölüme ayrılmıştır, ancak eski bölümlerin geri çekilmesi nedeniyle numaralandırmada boşluklar vardır.

  • ISO/IEC 9075-1:2016 Bölüm 1: Çerçeve (SQL/Framework). Mantıksal kavramlar sağlar.
  • ISO/IEC 9075-2:2016 Bölüm 2: Temel (SQL/Foundation). Dilin en merkezi unsurlarını içerir ve hem zorunlu hem de isteğe bağlı özelliklerden oluşur.
  • ISO/IEC 9075-3:2016 Bölüm 3: Çağrı Düzeyi Arayüzü (SQL/CLI). Ada, C sırasıyla C++, COBOL, Fortran, MUMPS, Pascal veya PL/I ile yazılmış uygulamalardan SQL ifadelerini yürütmek için kullanılabilecek arayüz bileşenlerini (yapılar, prosedürler, değişken bağları) tanımlar. (Java için bkz. Bölüm 10.) SQL/CLI, SQL ifadelerinin ve SQL/CLI prosedür çağrılarının, çağıran uygulamanın kaynak kodundan ayrı olarak ele alınacağı şekilde tanımlanmıştır. Açık Veritabanı Bağlantısı, SQL/CLI'nin iyi bilinen bir üst kümesidir. Standardın bu bölümü yalnızca zorunlu özelliklerden oluşmaktadır.
  • ISO/IEC 9075-4:2016 Bölüm 4: Kalıcı saklı modüller (SQL/PSM). Kontrol akışı, koşul işleme, ifade koşulu sinyalleri ve istifa, imleçler ve yerel değişkenler ve ifadelerin değişkenlere ve parametrelere atanması dahil olmak üzere SQL için prosedürel uzantıları standartlaştırır. Buna ek olarak, SQL/PSM kalıcı veritabanı dili rutinlerinin (örneğin, "saklı prosedürler") bildirimini ve bakımını resmileştirir. Standardın bu bölümü yalnızca isteğe bağlı özelliklerden oluşmaktadır.
  • ISO/IEC 9075-9:2016 Bölüm 9: Harici Verilerin Yönetimi (SQL/MED). SQL'in harici verileri yönetmesine izin vermek için yabancı veri sarmalayıcılarını ve veri bağlantısı türlerini tanımlayan SQL uzantıları sağlar. Harici veriler, SQL tabanlı bir VTYS tarafından erişilebilen ancak yönetilemeyen verilerdir. Standardın bu bölümü yalnızca isteğe bağlı özelliklerden oluşmaktadır.
  • ISO/IEC 9075-10:2016 Bölüm 10: Nesne dili bağları (SQL/OLB). Java'ya gömülü SQL olan SQLJ'nin sözdizimini ve semantiğini tanımlar (ayrıca bkz. bölüm 3). Standart ayrıca SQLJ uygulamalarının ikili taşınabilirliğini sağlamak için mekanizmaları tanımlar ve çeşitli Java paketlerini ve bunların içerdiği sınıfları belirtir. Standardın bu bölümü yalnızca isteğe bağlı özelliklerden oluşur. SQL/OLB'nin aksine JDBC bir API tanımlar ve SQL standardının bir parçası değildir.
  • ISO/IEC 9075-11:2016 Bölüm 11: Bilgi ve tanım şemaları (SQL/Schemata). Bilgi Şeması ve Tanım Şemasını tanımlar ve SQL veritabanlarını ve nesnelerini kendi kendini tanımlayan hale getirmek için ortak bir araç seti sağlar. Bu araçlar SQL nesne tanımlayıcısını, yapı ve bütünlük kısıtlamalarını, güvenlik ve yetkilendirme özelliklerini, ISO/IEC 9075'in özelliklerini ve paketlerini, SQL tabanlı DBMS uygulamaları tarafından sağlanan özelliklerin desteğini, SQL tabanlı DBMS uygulama bilgilerini ve boyutlandırma öğelerini ve DBMS uygulamaları tarafından desteklenen değerleri içerir. Standardın bu bölümü hem zorunlu hem de isteğe bağlı özellikleri içerir.
  • ISO/IEC 9075-13:2016 Bölüm 13: Java TM programlama dili (SQL/JRT) kullanan SQL rutinleri ve tipleri. Statik Java yöntemlerinin SQL uygulamaları içinden rutinler olarak çağrılabilmesini ('veritabanı içinde Java') belirtir. Ayrıca Java sınıflarının SQL yapılandırılmış kullanıcı tanımlı tipler olarak kullanılabilmesini gerektirir. Standardın bu bölümü yalnızca isteğe bağlı özelliklerden oluşmaktadır.
  • ISO/IEC 9075-14:2016 Bölüm 14: XML ile İlgili Özellikler (SQL/XML). XML'i SQL ile birlikte kullanmak için SQL tabanlı uzantıları belirtir. XML veri türünün yanı sıra, XML'in bir SQL veritabanında manipülasyonunu ve depolanmasını desteklemek için çeşitli rutinler, işlevler ve XML-SQL veri türü eşlemeleri tanıtılır. Standardın bu bölümü yalnızca isteğe bağlı özelliklerden oluşmaktadır.
  • ISO/IEC 9075-15:2019 Bölüm 15: Çok boyutlu diziler (SQL/MDA). SQL için çok boyutlu bir dizi türünü (MDarray) ve MDarray'ler, MDarray dilimleri, MDarray hücreleri ve ilgili özellikler üzerindeki işlemleri belirtir. Standardın bu bölümü yalnızca isteğe bağlı özelliklerden oluşur.

ISO/IEC Standardı Uzantıları

ISO/IEC 9075, ISO/IEC 13249 SQL Multimedya ve Uygulama Paketleri ile tamamlanmaktadır. Bu yakından ilgili ancak ayrı standart aynı komite tarafından geliştirilmiştir. SQL tabanlı arayüzleri ve paketleri tanımlar. Amaç, metin, resim, veri madenciliği veya uzamsal veriler gibi tipik veritabanı uygulamalarına birleşik erişimdir.

  • ISO/IEC 13249-1:2016 Bölüm 1: Çerçeve
  • ISO/IEC 13249-2:2003 Bölüm 2: Tam Metin
  • ISO/IEC 13249-3:2016 Bölüm 3: Mekansal
  • ISO/IEC 13249-5:2003 Bölüm 5: Hareketsiz görüntü
  • ISO/IEC 13249-6:2006 Bölüm 6: Veri madenciliği
  • ISO/IEC 13249-7:2013 Bölüm 7: Tarihçe
  • ISO/IEC 13249-8:xxxx Bölüm 8: Meta Veri Kayıt Erişimi MRA (devam eden çalışma)

Teknik raporlar

ISO/IEC 9075'e ISO/IEC TR 19075 olarak yayınlanan bir dizi Teknik Rapor da eşlik etmektedir. Bu Teknik Raporlar SQL'in bazı özelliklerinin gerekçelerini ve kullanımını açıklamakta ve uygun yerlerde örnekler vermektedir. Teknik Raporlar normatif değildir; 9075 ile herhangi bir tutarsızlık varsa, 9075'teki metin geçerlidir. Şu anda mevcut olan 19075 Teknik Raporları şunlardır:

  • ISO/IEC TR 19075-1:2011 Bölüm 1: SQL'de XQuery Düzenli İfade Desteği
  • ISO/IEC TR 19075-2:2015 Bölüm 2: Zamanla İlgili Bilgiler için SQL Desteği
  • ISO/IEC TR 19075-3:2015 Bölüm 3: Java programlama dili kullanan programlara gömülü SQL
  • ISO/IEC TR 19075-4:2015 Bölüm 4: Java programlama dilini kullanan rutinler ve tipler ile SQL
  • ISO/IEC TR 19075-5:2016 Bölüm 5: SQL'de Satır Örüntüsü Tanıma
  • ISO/IEC TR 19075-6:2017 Bölüm 6: JavaScript Object Notation (JSON) için SQL desteği
  • ISO/IEC TR 19075-7:2017 Bölüm 7: SQL'de polimorfik tablo fonksiyonları
  • ISO/IEC TR 19075-8:2019 Bölüm 8: Çok Boyutlu Diziler (SQL/MDA)
  • ISO/IEC TR 19075-9:2020 Bölüm 9: Çevrimiçi analitik işleme (OLAP) yetenekleri

Alternatifler

Bir dil olarak SQL'e alternatifler ile ilişkisel modelin kendisine alternatifler arasında bir ayrım yapılmalıdır. Aşağıda SQL diline önerilen ilişkisel alternatifler yer almaktadır. İlişkisel modele alternatifler için navigasyonel veritabanı ve NoSQL'e bakınız.

  • .QL: nesne yönelimli Datalog
  • 4D Sorgu Dili (4D QL)
  • Datalog: eleştirmenler Datalog'un SQL'e göre iki avantajı olduğunu öne sürmektedir: programın anlaşılmasını ve bakımını kolaylaştıran daha temiz semantiğe sahiptir ve özellikle özyinelemeli sorgular için daha anlamlıdır.
  • HTSQL: URL tabanlı sorgu yöntemi
  • IBM Business System 12 (IBM BS12): 1982 yılında tanıtılan ilk tamamen ilişkisel veritabanı yönetim sistemlerinden biri
  • ISBL
  • jOOQ: Java'da alana özgü dahili bir dil olarak uygulanan SQL
  • Java Persistence Sorgu Dili (JPQL): Java Persistence API ve Hibernate kalıcılık kütüphanesi tarafından kullanılan sorgu dili
  • JavaScript: MongoDB sorgu dilini bir JavaScript API'sinde uygular.
  • LINQ: Koleksiyonları doğrudan .Net kodu içinden sorgulamak için dil yapıları gibi yazılmış SQL ifadelerini çalıştırır
  • Nesne Sorgu Dili
  • QBE (Query By Example) Moshè Zloof, IBM 1977 tarafından oluşturulmuştur
  • 1974 yılında U.C. Berkeley Ingres projesi tarafından tanıtılan QUEL, SQL'den ziyade tuple ilişkisel hesaplamasına daha yakındır
  • Öğretici D
  • XQuery

Dağıtılmış SQL işleme

Dağıtılmış İlişkisel Veritabanı Mimarisi (DRDA), 1988-1994 yılları arasında IBM bünyesindeki bir çalışma grubu tarafından tasarlanmıştır. 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ı ya da program yerel bir RDB'ye SQL deyimleri gönderebilir ve uzak RDB'lerden yanıt olarak veri tabloları ve durum göstergeleri alabilir. SQL ifadeleri ayrıca derlenip uzak RDB'lerde paketler halinde saklanabilir ve daha sonra 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 uzak sistemlerde bulunduğunda özellikle önemlidir.

DRDA'nın mesajları, protokolleri ve yapısal bileşenleri Dağıtık Veri Yönetimi Mimarisi tarafından tanımlanmıştır. DRDA'ya göre dağıtık SQL işleme, çağdaş dağıtık SQL veritabanlarından farklıdır.

Eleştiriler

Tasarım

SQL, teorik temeli olan ilişkisel modelden ve tuple hesaplamasından çeşitli şekillerde sapmaktadır. Bu modelde, bir tablo bir dizi tuple iken, SQL'de 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 cümlesinde). Eleştirmenler SQL'in orijinal temeline sıkı sıkıya bağlı bir dil ile değiştirilmesi gerektiğini savunmaktadır: örneğin bkz.

Ortogonallik ve bütünlük

İlk spesifikasyonlar birincil anahtarlar gibi önemli özellikleri desteklemiyordu. Sonuç kümeleri adlandırılamıyordu ve alt sorgular tanımlanmamıştı. Bunlar 1992 yılında eklenmiştir.

Toplam türlerinin eksikliği, SQL'in kullanıcı tanımlı türlerinin tam olarak kullanılmasının önündeki bir engel olarak tanımlanmıştır. Örneğin JSON desteğinin 2016'da yeni bir standartla eklenmesi gerekmektedir.

Null

Null kavramı bazı tartışmalara konu olmuştur. Null işareti 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ş dizeden farklıdır. Null kavramı, genel 3-değerli mantığın somut bir uygulaması olan SQL'deki 3-değerli-mantığı zorunlu kılar.

Yinelemeler

Bir diğer popüler eleştiri de yinelenen satırlara izin vermesi, veri türleri ayrıştırma açısından ve modülerliğin olmaması nedeniyle verilerin doğru bir şekilde temsil edilmesini zorlaştırabilecek Python gibi dillerle entegrasyonu zorlaştırmasıdır.

Bu durum genellikle tablodaki bir satırı benzersiz bir şekilde tanımlayan bir veya daha fazla sütuna sahip bir birincil anahtar veya benzersiz bir kısıtlama bildirilerek önlenir.

Empedans uyuşmazlığı

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
  • inşa edilmiş tipler
  • kullanıcı tanımlı tipler.

Oluşturulan tipler ARRAY, MULTISET, REF(erence) veya ROW tiplerinden biridir. Kullanıcı tanımlı tipler, kendi kurucuları, gözlemcileri, mutatörleri, yöntemleri, kalıtım, aşırı yükleme, üzerine yazma, arayüzleri vb. ile nesne yönelimli dildeki sınıflarla karşılaştırılabilir. Önceden tanımlanmış veri türleri, uygulama tarafından içsel olarak desteklenir.

Önceden tanımlı veri türleri

  • Karakter türleri
  • Karakter (CHAR)
  • Karakter çeşitliliği (VARCHAR)
  • Karakter büyük nesnesi (CLOB)
  • Ulusal karakter türleri
  • Ulusal karakter (NCHAR)
  • Ulusal karakter değişimi (NCHAR VARYING)
  • Ulusal karakter büyük nesnesi (NCLOB)
  • İkili tipler
  • İkili (BINARY)
  • İkili değişken (VARBINARY)
  • İkili büyük nesne (BLOB)
  • Sayısal tipler
  • Tam sayısal tipler (NUMERIC, DECIMAL, SMALLINT, INTEGER, BIGINT)
  • Yaklaşık sayısal tipler (FLOAT, REAL, DOUBLE PRECISION)
  • Ondalık kayan nokta tipi (DECFLOAT)
  • Datetime türleri (DATE, TIME, TIMESTAMP)
  • Aralık tipi (INTERVAL)
  • Boolean
  • XML
  • JSON

Veri tanımlama olanakları

SQL veri tanımlama deyimlerinden başlıcaları şunlardır:

CREATE TABLE tablo_adi
Yeni bir tablo oluşturmak için kullanılır. Alan isimleri yazılırken sona virgül konulur ve son satır olan işlemimizde virgül konmadan parantez kapatılır.
CREATE TABLE tabloilceler (
  ilceNo mediumint(8) unsigned DEFAULT '0' NOT NULL,
  ilce varchar(30) NOT NULL,
  postakodu varchar(5),
  ilceTel char(3),
  plakaKodu char(2) NOT NULL
) <span title="Kaynak: Türkçe Vikipedi, Bölüm "Veri tanımlama olanakları"" class="plainlinks">[https://tr.wikipedia.org/wiki/SQL#Veri_tanımlama_olanakları <span style="color:#dddddd">ⓘ</span>]</span>
ALTER TABLE tablo_adı
Yeni bir sütun eklemek, sütunun tipini veya uzunluğunu değiştirmek vb. yapısal değişiklikler yapılması için kullanılır.
DROP TABLE tablo_adı
Tabloyu içerisindeki verilerle birlikte siler.
TRUNCATE TABLE tablo_adı
Tablodaki tüm verileri siler, tablo yapısını korur.:
CREATE VIEW görüş_adı
Görüntü oluşturmak için kullanılır
DROP VIEW görüş_adı
Görüntüyü siler
CREATE INDEX indeks_adı
Tablonun (en azından bir) sütun adı üzerinde indeks oluşturmak için kullanılır.
DROP INDEX indeks_adı
Oluşturulan indeksleri veri tabanından kaldırmak için kullanılır.