SQL
Z Wikipedii
SQL (ang. Structured Query Language) to strukturalny język (informatyka) zapytań używany do tworzenia, modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych.
Język SQL jest językiem deklaratywnym. Decyzję o sposobie przechowywania i pobrania danych pozostawia się systemowi zarządzania bazą danych DBMS.
Jest to język programowania opracowany w latach siedemdziesiątych w firmie IBM. Stał się on standardem w komunikacji z serwerami relacyjnych baz danych. Wiele współczesnych systemów relacyjnych baz danych używa do komunikacji z użytkownikiem SQL, dlatego mówi się, że korzystanie z relacyjnych baz danych, to korzystanie z SQL-a. Pierwszą firmą, która włączyła SQL do swojego produktu komercyjnego, był Oracle. Dalsze wprowadzanie SQL-a, w produktach innych firm, wiązało się nierozłącznie z wprowadzaniem modyfikacji pierwotnego języka. Wkrótce utrzymanie dalszej jednolitości języka wymagało wprowadzenia standardu.
Spis treści |
[edytuj] Standardy SQL
W 1986 roku SQL stał się oficjalnym standardem, wspieranym przez Międzynarodową Organizację Normalizacyjną (ISO) i jej członka, Amerykański Narodowy Instytut Normalizacji (ANSI). Wczesne wersje specyfikacji (SQL86 i SQL89) były w dużej mierze jedynie określeniem wspólnej płaszczyzny łączącej różne istniejące wówczas produkty i pozostawiały wiele swobody twórcom implementacji. Z czasem jednak systemy komputerowe uległy integracji i rynek zaczął domagać się aplikacji oraz ich funkcji faktycznie współpracujących z wieloma różnymi bazami danych. Pojawiła się potrzeba określenia standardu ściślejszego. Mógł on jednocześnie obejmować nowe elementy, nieujęte do tej pory w języku. Tak powstał SQL92, obowiązujący w produktach komercyjnych do dziś.
[edytuj] Funkcje silnika i middleware
Produkty związane z relacyjnymi bazami danych to nie tylko serwery. Sam serwer określa się często takimi nazwami jak "back end", "engine", czy też "motor/silnik bazy danych". Przechowuje on dane oraz zapewnia ich pobieranie i aktualizacje w odpowiedzi na pobierane instrukcje w SQL-u.
Uzupełnieniem serwera jest zazwyczaj "front end", "middleware" czy też "fronton" - narzędzia upraszczające komunikację z serwerem i wyposażone w mechanizmy pozwalające wykorzystać pobrane dane. Należą do nich mechanizmy generowania i obsługi formularzy oraz raportów, języki czwartej generacji (4GL), graficzne języki zapytań, narzędzia konstrukcyjne użytkownika, oprogramowanie do prezentacji multimedialnych, systemy tworzenia hipertekstu, systemy CAD/CAM, arkusze kalkulacyjne, jak również interfejsy dostępu bezpośredniego. Wszystkie one wykorzystują, do komunikacji z serwerem i wykonywania za jego pośrednictwem różnych operacji, język SQL. Serwer odpowiada za przechowywanie, porządkowanie i pobieranie danych, zapewnia ich integralność, bezpieczeństwo oraz zabezpiecza przed ewentualnymi konfliktami między użytkownikami.
[edytuj] Formy SQL-a
Z technicznego punktu widzenia, SQL jest podjęzykiem danych. Oznacza to, że jest on wykorzystywany wyłącznie do komunikacji z bazą danych. Nie posiada on cech pozwalających na tworzenie kompletnych programów. Jego wykorzystanie może być trojakie i z tego względu wyróżnia się trzy formy SQL-a:
- SQL interakcyjny lub autonomiczny wykorzystywany jest przez użytkowników w celu bezpośredniego pobierania lub wprowadzania informacji do bazy. Przykładem może być zapytanie prowadzące do uzyskania zestawienia aktywności kont w miesiącu. Wynik jest wówczas przekazywany na ekran, z ewentualną opcją jego przekierowania do pliku lub drukarki.
- Statyczny kod SQL (Static SQL) nie ulega zmianom i pisany jest wraz z całą aplikacją, podczas której pracy jest wykorzystywany. Nie ulega zmianom w sensie zachowania niezmiennej treści instrukcji, które jednak zawierać mogą odwołania do zmiennych lub parametrów przekazujących wartości z lub do aplikacji. Statyczny SQL występuje w dwóch odmianach.
- Embedded SQL (Osadzony SQL) oznacza włączenie kodu SQL do kodu źródłowego innego języka. Większość aplikacji pisana jest w takich językach jak C++ czy Java, jedynie odwołania do bazy danych realizowane są w SQL. W tej odmianie statycznego SQL-a do przenoszenia wartości wykorzystywane są zmienne.
- Język modułów. W tym podejściu moduły SQL łączone są z modułami kodu w innym języku. Moduły kodu SQL przenoszą wartości do i z parametrów, podobnie jak to się dzieje przy wywoływaniu podprogramów w większości języków proceduralnych. Jest to pierwotne podejście, zaproponowane w standardzie SQL. Embedded SQL został do oficjalnej specyfikacji włączony nieco później.
- Dynamiczny kod SQL (Dynamic SQL) generowany jest w trakcie pracy aplikacji. Wykorzystuje się go w miejsce podejścia statycznego, jeżeli w chwili pisania aplikacji nie jest możliwe określenie treści potrzebnych zapytań - powstaje ona w oparciu o decyzje użytkownika. Tę formę SQL generują przede wszystkim takie narzędzia jak graficzne języki zapytań. Utworzenie odpowiedniego zapytania jest tu odpowiedzią na działania użytkownika.
Wymagania tych trzech form różnią się i znajduje to odbicie w wykorzystywanych przez nie konstrukcjach językowych. Zarówno statyczny, jak i dynamiczny SQL uzupełniają formę autonomiczną cechami odpowiednimi tylko w określonych sytuacjach. Większość języka pozostaje jednak dla wszystkich form identyczna.
[edytuj] Składnia SQL
Użycie SQL, zgodnie z jego nazwą, polega na zadawaniu zapytań do bazy danych. Zapytania można zaliczyć do jednego z dwóch głównych podzbiorów:
- SQL DML (ang. Data Manipulation Language, czyli Język Manipulacji Danymi),
- SQL DDL (ang. Data Definition Language, czyli Język Definicji Danych).
Instrukcje SQL w obrębie zapytań tradycyjnie zapisywane są wielkimi literami, jednak nie jest to wymóg. Każde zapytanie w SQL-u musi kończyć się znakiem ";" (średnik).
Dodatkowo, niektóre interpretery SQL (np. psql w przypadku PostgreSQL), używają swoich własnych instrukcji, spoza standardu SQL, które służą np. do połączenia się z bazą, wyświetlenia dokumentacji, itp.
[edytuj] DML
DML służy do operacji na danych - do ich umieszczania w bazie, kasowania, przeglądania, zmiany. Najważniejsze polecenia z tego zbioru to:
- SELECT - pobranie z bazy danych,
- INSERT - umieszczenie danych w bazie,
- UPDATE - zmiana danych,
- DELETE - usunięcie danych z bazy.
Dane tekstowe podawane muszą być zawsze w formie ograniczonej znakami pojedynczego cudzysłowu (').
[edytuj] DDL
Dzięki DDL natomiast, można operować na strukturach, w których te dane są przechowywane - czyli np. dodawać, zmieniać i kasować tabele lub bazy. Najważeniejsze polecenia tej grupy to:
- CREATE (np. CREATE TABLE, CREATE DATABASE, ...) - utworzenie struktury (bazy, tabeli, indeksu, itp.),
- DROP (np. DROP TABLE, DROP DATABASE, ...) - całkowite usunięcie struktury,
- ALTER (np. ALTER TABLE ADD COLUMN ...) - zmiana struktury (dodanie kolumny do tabeli, zmiana typu danych w kolumnie tabeli).
[edytuj] Przykładowe zapytania
Przykładowe użycie wyżej wymienionych rodzajów zapytań.
SELECT * FROM pracownicy WHERE pensja > 2000 ORDER BY staz DESC;
Wyświetla z tabeli pracownicy (FROM pracownicy) wszystkie kolumny (*) dotyczące tych pracowników, których pensja jest większa niż 2000 (WHERE pensja > 2000) i sortuje wynik malejąco według stażu pracy (ORDER BY staz DESC).
INSERT INTO pracownicy (imie, nazwisko, pensja, staz) VALUES ('Jan', 'Kowalski', 5500, 1);
Dodaje do tabeli pracownicy (INTO pracownicy) wiersz (rekord) zawierający dane pojedynczego pracownika.
UPDATE pracownicy SET pensja = pensja * 1.1 WHERE staz > 2;
Podnosi o 10% (SET pensja = pensja * 1.1) pensję pracownikom, których staż jest większy niż 2 (np. lata).
DELETE FROM pracownicy WHERE imie = 'Jan' AND nazwisko = 'Kowalski';
Usuwa z tabeli "pracownicy" wiersz (rekord) dotyczący pracownika o imieniu "Jan" i nazwisku "Kowalski".
CREATE TABLE pracownicy (imie varchar(255), nazwisko varchar(255), pensja float, staz int);
Tworzy tabelę "pracownicy" zawierającą tekstowe (varchar - zmiennej długości pole tekstowe) pola "imię" i "nazwisko", o maksymalnej długości 255 znaków, zapisaną za pomocą liczby rzeczywistej (float od ang. floating point) pensję oraz zapisany za pomocą liczby całkowitej (int od ang. integer) staż.
DROP TABLE pracownicy;
Usuwa z bazy całkowicie tabelę "pracownicy".
ALTER TABLE pracownicy ADD COLUMN dzial varchar(255);
Dodaje do struktury tabeli "pracownicy" kolumnę "dzial" (dział), jako pole tekstowe o długości max. 255 znaków.
[edytuj] SQL:2003
W roku 2003 przedstawiono SQL:2003 – nowy standard języka SQL. opublikowano w Sigmod Record Vol.33 Nr.1 Marzec 2004. Jest to głównie poprawione SQL:1999 z wyjątkiem części SQL/XML oraz kilku dodatkowych właściwości.
W SQL:2003 wprowadzono:
- Nowe typy danych (BIGINT, MULTISET oraz XML)
- Usunięto typy BIT oraz BIT VARYING
- Rozszerzenia w sposobie wywoływania procedur
- Poszerzono instrukcję CREATE TABLE (CREATE TABLE { LIKE | AS } )
- Wprowadzono instrukcję MERGE
- Wprowadzono nowy obiekt schematu – generator sekwencji
- Wprowadzono dwa nowe typy kolumn – identyfikatory oraz generowane
- Retrospektywne sprawdzanie więzów integralności
- Rozszerzenia dla OLAP w formie wbudowanych funkcji (skalarnych i agregujących)
- Klauzula WINDOW
Prowadzone są również prace nad alternatywnymi językami zapytań opartymi na SQL. Przykładem takiego języka może być język ciągłych zapytań CQL lub język SQL wyposażony w możliwość przetwarzania sekwencji danych AQuery.
[edytuj] Systemy bazodanowe używające SQL
- Caché
- DB2
- Firebird
- First SQL
- HSQL
- Ingres
- Informix
- InterBase SQL
- MaxDB znana jako SAP DB
- Microsoft Access
- Microsoft Jet
- Microsoft SQL Server
- Mimer SQL
- MySQL
- mSQL
- OpenLink Virtuoso
- Oracle
- Oracle Rdb
- PostgreSQL
- SQL/DS
- SQLite
- Sybase (Sybase Adaptive Server Enterprise, Sybase SQL Anywhere)
[edytuj] Zobacz też
- obiektowa baza danych
- strumieniowa baza danych
- hurtownia danych
- hierarchiczna baza danych
[edytuj] Linki zewnętrzne
- http://troels.arvin.dk/db/rdbms/ Różnice pomiędzy popularnymi implementacjami SQL
ABAP • Ada • AWK • Asembler • C • C++ • C# • COBOL • D • Forth • Fortran • Icon • Java • JavaScript • Lisp • Modula 2 • Oberon • Object Pascal • Objective-C • Pascal • Perl • PHP • PL/SQL • Python • REXX • Ruby • sh • Smalltalk • Snobol • SQL • Visual Basic • VB.NET
Akademickie
Comal • Eiffel • Haskell • Logo • MCPL • ML • Nemerle • Prolog • Scheme
Historyczne
ALGOL • APL • BASIC • Clipper • MUMPS • PLAN • PL/I • PL/M • SAS • Simula