SQL - SQL

SQL (Yapılandırılmış Sorgu Dili)
paradigma bildirimsel
Aile Sorgu dili
Tarafından tasarlandı Donald D. Chamberlin
Raymond F. Boyce
geliştirici ISO / IEC
İlk ortaya çıktı 1974 ; 47 yıl önce ( 1974 )
kararlı sürüm
SQL:2016 / Aralık 2016 ; 4 yıl önce ( 2016-12 )
Yazma disiplini Statik , güçlü
işletim sistemi Çapraz platform
İnternet sitesi www .iso .org /standart /63555 .html
Başlıca uygulamalar
Birçok
lehçeler
Tarafından etkilenmiş
Veri kaydı
Etkilenen
CQL , LINQ , SPARQL , SOQL , PowerShell , JPQL , jOOQ , N1QL
SQL (dosya biçimi)
Dosya adı uzantısı
.sql
İnternet medya türü
uygulama/sql
Tarafından geliştirilmiş ISO / IEC
İlk sürüm 1986 ( 1986 )
Biçim türü Veri tabanı
Standart ISO/IEC 9075
Açık biçim ? Evet
İnternet sitesi www .iso .org /standart /63555 .html

SQL ( / ˌ ɛ s ˌ k Ju ɛ l / ( dinlemek )Bu ses hakkında SQL , / s i k a əl / "netice"; Structured Query Language ) bir olan alana özgü dil tutulan verileri yönetmek için programlama kullanılan ve tasarlanan bir ilişkisel veritabanı yönetim sistemi (RDBMS) veya bir ilişkisel veri akışı yönetim sisteminde (RDSMS) akış işleme için . 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, örneğin indeksli veya indekssiz bir kayda nasıl ulaşılacağını belirleme ihtiyacını ortadan kaldırır .

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 bildirimsel bir dil olmasına rağmen ( 4GL ), aynı zamanda yordamsal öğeler de içerir .

SQL kullanan ilk ticari dillerden biri oldu Edgar F. Codd ‘ın ilişkisel modeli . Model, 1970 tarihli etkili makalesinde, "Büyük Paylaşılan Veri Bankaları için İlişkisel Bir Veri Modeli"nde açıklanmış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 geldi.

SQL bir hale standart bir Amerikan Ulusal Standartlar Enstitüsü 1986 yılında (ANSI), ve Uluslararası Standardizasyon Örgütü O zamandan beri 1987 yılında (ISO), standart özellikler daha büyük bir dizi 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

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ı'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 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" Bir çünkü adı SEQUEL sonra SQL değiştirildi (sesli harfleri bırakarak) marka arasında İngiltere merkezli Hawker Siddeley Dinamikleri Mühendislik Limited şirketi. Yapılandırılmış Sorgu Dili etiketi daha sonra SQL'in kısaltması oldu.

Sistemin kullanışlılığını ve pratikliğini belirlemek için SQL'i müşteri test sitelerinde test ettikten sonra IBM , 1979, 1981'de piyasada bulunan System/38 , SQL/DS ve DB2 dahil olmak üzere System R prototiplerine dayalı ticari ürünler geliştirmeye başladı. ve sırasıyla 1983.

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 uygulamasını, 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ı.

Sözdizimi

Tek bir ifade oluşturan birkaç SQL dili öğesini gösteren bir grafik

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ütunlardan ve veri satırlarından oluşan tablolar üretebilen ifadeler
  • Yüklemler to SQL değerlendirilebilir koşulları belirlemek, mantık (3il) üç değerli (doğru / yanlış / bilinmeyen) veya Boole gerçeği değerlerini ve ya değişim programı akışına tabloların ve sorguları etkilerini sınırlamak için kullanılır.
  • Verileri belirli ölçütlere göre alan sorgular . Bu, SQL'in önemli bir öğesidir .
  • Şemalar 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 . Bunlar şunları içerir:

Kaynak Kısaltma Ad Soyad
ANSI/ISO Standardı SQL/PSM SQL/Kalıcı Depolanan Modüller
Üsler arası / Firebird PSQL Prosedürel SQL
IBM DB2 SQL PL'si SQL Prosedür Dili (SQL/PSM'yi uygular)
IBM Informix SPL Saklanan Yordam Dili
IBM Netezza NZPLSQL (Postgres PL/pgSQL'e göre)
yenilikçi PSQL Yenilikçi Prosedürel SQL ( SQL/PSM ve PL/SQL'i uygular )
MariaDB SQL/PSM , PL/SQL SQL/Kalıcı Depolanmış Modül (SQL/PSM'yi uygular), Prosedürel Dil/SQL ( Ada'ya dayalıdır )
Microsoft / Sybase T-SQL Transact-SQL
Mimer SQL SQL/PSM SQL/Kalıcı Depolanan Modül (SQL/PSM'yi uygular)
MySQL SQL/PSM SQL/Kalıcı Depolanan Modül (SQL/PSM'yi uygular)
MonetDB SQL/PSM SQL/Kalıcı Depolanan Modül (SQL/PSM'yi uygular)
NuoDB SSP Starkey Saklı Prosedürler
kehanet 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'e dayalı )
SAP R/3 ABAP Gelişmiş İş Uygulama Programlama
SAP HANA SQLScript SQLScript
Sybase Watcom-SQL SQL Anywhere Watcom-SQL Lehçesi
Ter veri SPL Saklanan Yordam Dili

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 .

Birlikte çalışabilirlik ve standardizasyon

genel bakış

SQL uygulamaları satıcılar arasında uyumsuzdur ve standartlara tam olarak uyması gerekmez. Özellikle tarih ve saat sözdizimi, dize bitiştirme, NULLs 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 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, standarda göre değil Fooile eşdeğer olmalıdır . FOOfoo

SQL'in popüler uygulamaları, genellikle DATEveya TIMEveri türleri gibi Standart SQL'in temel özelliklerini desteklemez . Bu tür en bariz örnekler ve tesadüfen en popüler ticari ve tescilli SQL VTYS'leri Oracle ( DATEgibi davranan DATETIMEve bir TIMEtürü olmayan) 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ındaki 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 vermesini sağlar.
  • 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 yılında ANSI tarafından SQL-86 ve 1987 yılında ISO olarak 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 onayladı. Satıcılar artık ürünlerinin uyumluluğunu kendileri onaylıyor.

Orijinal standart "SQL" için resmi telaffuz bir olduğunu ilan initialism : / ˌ ɛ s ˌ k Ju ɛ l / ( "ess işaret el"). Ne olursa olsun, (Donald Chamberlin kendisi de dahil) pek çok İngilizce konuşan veritabanı uzmanları kullanmak kısaltma telaffuz -like / s i k a əl / ( "netice"), dilin yayın öncesi gelişim adı, "netice" yansıtma.
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ştirildi
1989 SQL-89 FIPS 127-1 FIPS 127-1 olarak benimsenen, bütünlük kısıtlamaları ekleyen küçük revizyon
1992 SQL-92 SQL2, FIPS 127-2 Ana revizyon (ISO 9075), Giriş Seviyesi SQL-92, FIPS 127-2 olarak kabul edildi
1999 SQL:1999 SQL3 Düzenli ifade eşleştirme, özyinelemeli sorgular (örneğin geçişli kapatma ), tetikleyiciler , prosedürel ve akış kontrolü deyimleri 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ömmek için destek eklendi ( SQL/OLB ) ve tersi ( SQL/JRT )
2003 SQL:2003 Tanıtılan XML özelliklerini (lı SQL / XML ), pencere fonksiyonları (kimlik sütunlarının dahil) otomatik olarak oluşturulan değerlerle, standardize dizileri ve sütunları
2006 SQL:2006 ISO/IEC 9075-14:2006, SQL'in XML ile kullanılabileceği yolları tanımlar. XML verilerini bir SQL veritabanına alma ve depolama, veritabanı içinde işleme ve hem XML hem de geleneksel SQL verilerini XML biçiminde yayınlama 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 Konsorsiyumu ( W3C ) tarafından yayınlanan XML Sorgu Dili olan XQuery ile sorguları SQL kodlarına entegre etmesine olanak tanır .
2008 SQL:2008 ORDER BY'ı imleç tanımlarının dışında yasallaştırır. INSTEAD OF tetikleyicileri, TRUNCATE deyimi, FETCH yan tümcesi ekler
2011 SQL:2011 Geçici verileri ekler (PERIOD FOR) (daha fazla bilgi şurada : Temporal database#History ). İçin geliştirmeler pencere fonksiyonları ve maddesini FETCH.
2016 SQL:2016 Satır deseni eşleştirme, polimorfik tablo işlevleri, JSON ekler
2019 SQL:2019 Bölüm 15, çok boyutlu diziler ekler (MDarray türü ve operatörler)

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 .

SQL Standardının Anatomisi

SQL standardı 10 parçaya bölünmüştür, ancak eski parçaların geri çekilmesi nedeniyle numaralandırmada boşluklar vardır.

  • ISO/IEC 9075-1:2016 Bölüm 1: Çerçeve (SQL/Çerçeve). Mantıksal kavramlar sağlar.
  • ISO/IEC 9075-2:2016 Bölüm 2: Temel (SQL/Temel). 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üzeyinde Arabirim ( 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 arabirim bileşenlerini (yapılar, prosedürler, değişken bağlamalar) tanımlar. (Java için bölüm 10'a bakın.) SQL/CLI, SQL deyimleri ve SQL/CLI prosedür çağrıları, çağıran uygulamanın kaynak kodundan ayrı olarak ele alınacak şekilde tanımlanı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ı depolanmış modüller ( SQL/PSM ). Kontrol akışı, koşul işleme, ifade koşul sinyalleri ve yeniden sinyaller, imleçler ve yerel değişkenler ve değişkenlere ve parametrelere ifadelerin atanması dahil olmak üzere SQL için prosedürel uzantıları standartlaştırır. Ek olarak, SQL/PSM, kalıcı veritabanı dili rutinlerinin (örneğin, "depolanmış prosedürler") beyanını 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ı ve veri bağlantısı türlerini tanımlayan SQL uzantıları sağlar. Dış veriler, SQL tabanlı bir VTYS tarafından erişilebilen ancak yönetilmeyen 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ğlamaları ( SQL/OLB ). Java'da 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ğlamaya yönelik mekanizmaları açıklar 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şmaktadır . SQL/OLB'den farklı olarak 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 ). SQL veritabanlarını ve nesnelerini kendi kendini açıklayan hale getirmek için ortak bir araç seti sağlayarak Bilgi Şemasını ve Tanım Şemasını tanımlar. Bu araçlar, SQL nesne tanımlayıcısını, yapı ve bütünlük kısıtlamalarını, güvenlik ve yetkilendirme belirtimlerini, ISO/IEC 9075'in özellikleri ve paketlerini, SQL tabanlı VTYS uygulamaları tarafından sağlanan özelliklerin desteklenmesini, SQL tabanlı VTMS uygulama bilgilerini ve boyutlandırma öğelerini ve DBMS uygulamaları tarafından desteklenen değerler. 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 dilini ( SQL/JRT ) kullanan SQL Rutinleri ve türleri . Statik Java yöntemlerini SQL uygulamaları ('veritabanı içindeki Java') içinden rutinler olarak çağırma yeteneğini belirtir. Ayrıca, Java sınıflarını SQL yapılandırılmış kullanıcı tanımlı türler olarak kullanma becerisini 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 Spesifikasyonlar ( SQL/XML ). SQL ile birlikte XML kullanmak için SQL tabanlı uzantıları belirtir. XML veri türü bir SQL veritabanında destek manipülasyon ve XML depolanması için çeşitli rutinler, işlevler ve XML-to-SQL veri türü eşleştirmeleri yanı sıra tanıtıldı. 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). MDarrays, MDarray dilimleri, MDarray hücreleri ve ilgili özellikler üzerindeki işlemlerle birlikte SQL için çok boyutlu bir dizi tipini (MDarray) belirtir. Standardın bu bölümü yalnızca isteğe bağlı özelliklerden oluşmaktadır .

ISO/IEC Standardının Uzantıları

ISO/IEC 9075, ISO/IEC 13249 SQL Multimedya ve Uygulama Paketleri ile tamamlanmaktadır . Bu yakından ilişkili 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 ayrıca ISO/IEC TR 19075 olarak yayınlanan bir dizi Teknik Rapor eşlik eder. Bu Teknik Raporlar, uygun olan yerlerde örnekler vererek SQL'in bazı özelliklerinin gerekçesini ve kullanımını açıklar. Teknik Raporlar normatif değildir; 9075'ten 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 Normal İ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 dilini kullanan Programlara Gömülü SQL
  • ISO/IEC TR 19075-4:2015 Bölüm 4: Java programlama dilini kullanan Rutinler ve türlerle SQL
  • ISO/IEC TR 19075-5:2016 Bölüm 5: SQL'de Satır Örüntü Tanıma
  • ISO/IEC TR 19075-6:2017 Bölüm 6: JavaScript Nesne Gösterimi (JSON) için SQL desteği
  • ISO/IEC TR 19075-7:2017 Bölüm 7: SQL'de polimorfik tablo işlevleri
  • 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 bulunmaktadır. İlişkisel modele alternatifler için gezinme veritabanına ve NoSQL'e bakın .

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

Dağıtılmış İlişkisel Veritabanı Mimarisi (DRDA), 1988'den 1994'e kadar IBM bünyesindeki bir çalışma grubu tarafından tasarlanmıştır. DRDA, SQL isteklerini yerine getirmek için ağ bağlantılı ilişkisel veritabanlarının 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 .

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, The Third 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 yılında eklenmiştir.

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.

Boş

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 .

kopyalar

Bir başka popüler eleştiri, yinelenen satırlara izin vermesi ve veri türleri, ayrıştırma ve modülerliğin olmaması nedeniyle verileri doğru bir şekilde temsil etmeyi zorlaştırabilecek Python gibi dillerle entegrasyon 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ünü tanımlar :

  • önceden tanımlanmış veri türleri
  • yapılı 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 türleri
  • Karakter (CHAR)
  • Karakter değiştirme (VARCHAR)
  • Karakter büyük nesne (CLOB)
  • Ulusal karakter türleri
  • Ulusal karakter (NCHAR)
  • Ulusal karakter değişkenliği (NCHAR DEĞİŞEN)
  • Ulusal karakter büyük nesne (NCLOB)
  • İkili türler
  • İkili (İkili)
  • İkili değişken (VARBINARY)
  • İkili büyük nesne (BLOB)
  • Sayısal türler
  • Tam sayısal türler (SAYISAL, DECIMAL, SMALLINT, INTEGER, BIGINT)
  • Yaklaşık sayısal türler (FLOAT, REAL, DOUBLE HASSASİYET)
  • Ondalık kayan nokta türü (DECFLOAT)
  • Tarih saat türleri (DATE, TIME, TIMESTAMP)
  • Aralık türü (ARALIK)
  • Boole
  • XML
  • JSON

Ayrıca bakınız

Notlar

Referanslar

Kaynaklar

SQL standartları belgeleri

ITTF kamuya açık standartlar ve teknik raporlar

ISO / IEC Bilgi Teknolojileri Görev Gücü yayınlar halka açık standartlar SQL dahil. Teknik Düzeltme (düzeltmeler) ve Teknik Raporlar (tartışma belgeleri) burada yayınlanır.

SQL -- Bölüm 1: Çerçeve (SQL/Çerçeve)

taslak belgeler

Resmi SQL standartları, bir ücret karşılığında ISO ve ANSI'den temin edilebilir . Bilgilendirici kullanım için, katı standartlara uyumun aksine, geç taslaklar genellikle yeterlidir.

Dış bağlantılar