Strukturalny język zapytań
| Język programowania SQL | |
|---|---|
| Części instrukcji. | |
| Autor | Donalda Chamberlina |
| Data powstania | 1974 |
| Ostatnia wersja | SQL: 2016 (grudzień 2016 ) |
| Stosowanie | tworzenie, zapytania, zarządzanie bazą danych |
| Paradygmaty | wieloparadygmat |
| Pisanie na maszynie | statyczny, mocny |
| Wspólne rozszerzenia | .sql |
W informatyce SQL ( Structured Query Language ) ( / skjuːˈɛl / "SQL") to ustandaryzowany język baz danych oparty na modelu relacyjnym ( RDBMS ), przeznaczony do następujących operacji:
- tworzyć i modyfikować schematy baz danych (DDL = Data Definition Language );
- wstawiaj, modyfikuj i zarządzaj przechowywanymi danymi (DML = Data Manipulation Language );
- zapytanie o przechowywane dane (DQL = Data Query Language );
- tworzyć i zarządzać narzędziami dostępu do danych i kontroli (DCL = Data Control Language ).
Wbrew nazwie nie jest to zatem prosty język zapytań : niektóre z jego podzbiorów pozwalają na tworzenie, zarządzanie i administrowanie bazami danych.
Historia
SQL narodził się w 1974 roku przez Donalda Chamberlina w laboratoriach IBM . Narodziło się jako narzędzie do pracy z bazami danych zgodnymi z modelem relacyjnym . W tamtym czasie nazywano go jednak SEQUEL (z tego powodu poprawna wymowa SQL w IPA to [ˈɛsˈkjuˈɛl], a nieformalna [ˈsiːkwəl]). W 1975 roku opracowano prototyp o nazwie SEQUEL-XRM ; z nim przeprowadzono eksperymenty, które doprowadziły w 1977 r. do nowej wersji języka, która początkowo powinna była nazywać się SEQUEL / 2, ale potem stała się z powodów prawnych (nazwa SEQUEL była już używana, a przede wszystkim zarejestrowana). , w innym zakresie dla linii lotniczych), SQL. Opracowano na nim prototyp System R , który był używany przez IBM do użytku wewnętrznego i dla niektórych swoich klientów. Ale biorąc pod uwagę jego sukces, inne firmy również szybko zaczęły opracowywać produkty oparte na SQL. W 1981 roku IBM zaczął sprzedawać niektóre produkty relacyjne, aw 1983 wypuścił DB2 , swój relacyjny DBMS popularny w ostatnich latach XX wieku . SQL szybko stał się branżowym standardem oprogramowania wykorzystującego model relacyjny.
ANSI przyjęło go jako standard od 1986 roku, bez wprowadzania istotnych zmian do wersji pierwotnie opracowanej przez IBM. W 1987 roku ISO zrobiło to samo. Ta pierwsza standardowa wersja nosi nazwę SQL / 86. W kolejnych latach powstały kolejne wersje, którymi były SQL/89, SQL/92 i SQL/2003. Ten proces standaryzacji miał na celu stworzenie języka, który działałby we wszystkich relacyjnych systemach DBMS (Data Base Management Systems), ale cel ten nie został osiągnięty. W rzeczywistości różni producenci zaimplementowali język z licznymi odmianami i w praktyce przyjęli standardy na poziomie nieprzekraczającym minimum, zdefiniowanego przez Ansi jako Entry Level.
Funkcje
SQL to język służący do wykonywania zapytań i zarządzania bazami danych za pomocą konstrukcji programistycznych zwanych zapytaniami . Dzięki SQL możesz odczytywać, modyfikować, usuwać dane oraz wykonywać funkcje administracyjne i administracyjne w systemie bazy danych. Większość implementacji ma interfejs wiersza poleceń do bezpośredniego wykonywania poleceń, jako alternatywę tylko dla GUI .
Pierwotnie zaprojektowany jako deklaratywny język typów , od tego czasu ewoluował wraz z wprowadzeniem konstrukcji proceduralnych , instrukcji kontroli przepływu , typów danych zdefiniowanych przez użytkownika i różnych innych rozszerzeń językowych. Od czasu zdefiniowania standardu SQL: 1999 wiele z tych rozszerzeń zostało formalnie przyjętych jako integralna część SQL w sekcji SQL/PSM standardu.
Niektóre z najczęstszych zarzutów pod adresem SQL dotyczą braku możliwości przenoszenia kodu między różnymi dostawcami, niewłaściwego sposobu obsługi brakujących (null) danych oraz czasami niepotrzebnie skomplikowanej semantyki.
Struktura
Będąc językiem deklaratywnym , SQL nie wymaga pisania sekwencji operacji (takich jak języki imperatywne ), zamiast określania logicznych właściwości poszukiwanych informacji. Dzieli się na:
- Data Definition Language (DDL) - umożliwia tworzenie i usuwanie baz danych lub modyfikowanie ich struktury
- Data Manipulation Language (DML) - umożliwia wstawianie, usuwanie, modyfikowanie danych
- Data Control Language (DCL) - pozwala zarządzać użytkownikami i uprawnieniami
- Język zapytań (QL) - pozwala na zapytanie bazy danych, czyli odczytanie danych.
- Device Media Control Language (DMCL) - umożliwia sterowanie nośnikami ( pamięciami masowymi ), na których przechowywane są dane.
Operatory
Operatory udostępniane przez standardowy SQL dzielą się na siedem kategorii:
- Operatorzy przypisania
- Operatory porównania
- Operatory ciągów
- Operatory arytmetyczne
- Operatory warunkowe
- Operatory logiczne
- Operatory bitów
Operatorzy przypisania
Operatory przypisania przypisują wartość do zmiennej lub pola.
=Wyraża przypisanie i nie zwraca żadnej wartości.:=Wyraża przypisanie wartości do zmiennej, która nie została jeszcze utworzona i nie zwraca żadnej wartości.
Operatory porównania
Operatory porównania służą do określania równości i nierówności między wartościami oraz do wyszukiwania w danych. Poniżej znajduje się schemat tabeli:
=Wyraża równość między dwiema wartościami liczbowymi lub ciągami znaków (gdzie nie jest używany jako operator przypisania)ISSłuży do sprawdzania, czy wartość jest NULL lub czy odpowiada wartości logicznej (PRAWDA, FAŁSZ, NIEZNANA).LIKEWyraża podobieństwo między dwiema wartościami literałowymi: z operatorem LIKE można użyć do porównań znaków specjalnych% (zastępuje dowolną liczbę liter) i _ (zastępuje dowolną literę)<Określa, czy jedna wartość jest mniejsza od innej>Określa, czy jedna wartość jest większa od innej<=Określa, czy jedna wartość jest mniejsza lub równa innej>=Określa, czy jedna wartość jest większa czy równa innej<>Określa, czy dwie wartości różnią się od siebie!=równoważny<>BETWEEN ... ANDPobiera wartość między dwiema wartościamiINOkreśla, czy wartość znajduje się na liście możliwych wartościEXISTSOkreśla, czy dane podzapytanie zwraca wartośćANYoSOMEOkreśla, czy dane podzapytanie zwraca przynajmniej jedną z podanych wartościALLOkreśla, czy dane podzapytanie zwraca wszystkie żądane wartości
Niektóre z tych operatorów odpowiadają przeciwnemu operatorowi używającemu terminu NIE:
IS NOTNOT LIKENOT BETWEENNOT INNOT EXISTS
Operatory ciągów
Operatory ciągów przyjmują dwa ciągi jako operandy i zwracają wartość logiczną lub ciąg.
LIKE operator
Operator LIKE(używany jest również DOPASOWANIA) jest zwykle podstawą kryteriów wyszukiwania słów kluczowych i zapytań dokonywanych przez wyszukiwarkę.
Znak podkreślenia ( _) o nazwie wildchar , wyszukuje pojedynczy dowolny znak; symbol %jest nazywany operatorem wieloznacznym i wyszukuje dowolny ciąg, to znaczy zakres wartości liczbowych. Aby wyszukać znak podkreślenia w wyrażeniu, użyj składni [_](patrz także poniżej).
Składnia programu Microsoft Access różni się nieco od tego międzynarodowego standardu i jest bardziej kompletna. Zamiast symbolu podkreślenia , służy ?do wyszukiwania pojedynczego znaku (zarówno cyfry, jak i litery); zamiast symbolu %operator wieloznaczny jest podawany przez *. Program Access umożliwia wyszukiwanie pojedynczej wartości liczbowej za pomocą klawisza z krzyżykiem (lub krzyżykiem ) ( #) oraz wyszukiwanie znaku (litery i cyfry) w zbiorze wartości lub poza nim, przy użyciu składni []i [!]. Interwał może być punktowy lub zbiorczy: na przykład [AF] wskazuje litery między A i F, podczas gdy [A, F] wskazuje tylko wyszukiwanie tych dwóch liter. Na przykład, wyrażenie takie jak „LIKE P [! AF] C” wyszukuje słowa zaczynające się na „P”, kończące się na „C”, a druga litera nie zawiera znaków między literami A i F. Ta kompletność w implementacji LIKE wynika z faktu, że Access nie przewiduje bardziej skomplikowanych operatorów, takich jak SIMILAR TO i REGEXP.
Pomimo tej kompletności sterownik OLE DB dla Windows ma znany błąd: operator wieloznaczny *może być używany tylko w aplikacji, podczas gdy klasyczny symbol musi być używany przez OLE DB / ODBC %.
Operatory PODOBNE DO i REGEXP
Operator SIMILAR TO jest częścią standardu SQL i pozwala sprawdzić, czy łańcuch pasuje do danego wyrażenia regularnego . Użyta składnia różni się od de facto standardów , które zostały ustanowione przez Perl i POSIX iz tego powodu zastosowanie tego operatora przez producentów jest raczej ograniczone.
Operator REGEXP jest bardziej powszechny i pozwala również sprawdzić, czy ciąg pasuje do danego wyrażenia regularnego. Użyta składnia różni się w zależności od implementacji SQL, jednak generalnie jest zgodna z de facto standardami określonymi przez Perl lub POSIX.
SQL zawiera również operatory uzupełniające NOT SIMILAR TO i NOT REGEXP .
BINARNY
Ten operator służy do rozróżniania wielkości liter w zastosowaniach wyrażeń regularnych, to znaczy do upewnienia się, że wielkie litery są traktowane inaczej niż małe.
UKŁADAJ
Ten operator służy do określania, które sortowanie (zestaw reguł sortowania zestawu znaków) powinno być używane w bieżącym wyrażeniu.
Operatory arytmetyczne
Operatory arytmetyczne akceptują operatory typu liczbowego (całkowite lub dziesiętne) i zwracają wynik odpowiedniej operacji arytmetycznej. Poniżej znajduje się schemat tabeli:
Opis operatora
+Dodaj lub pozostaw znak liczby bez zmian-Odejmij lub odwróć znak liczby*Zrób mnożenie/Dokonaj podziałuMODZwraca resztę dzieleniaDIVZwraca część całkowitą dzielenia
Operatory warunkowe
Jedynym operatorem warunkowym SQL jest WHERE (gdzie) i jest on używany do definiowania ukierunkowanych kryteriów wyszukiwania.
Operatory logiczne
Operatory logiczne SQL należą do operatorów logicznych logicznych i są to AND (i), OR (lub, lub), NOT (nie), XOR (nazywane również „wyłącznym OR”).
- Operator logiczny AND , który wiąże dwa warunki, zwraca TRUE wtedy i tylko wtedy, gdy oba operandy są prawdziwe.
- Operator logiczny OR , który wiąże dwa warunki, zwraca TRUE wtedy i tylko wtedy, gdy przynajmniej jeden z operandów jest prawdziwy.
- Operator NOT akceptuje tylko jeden operand i zwraca wartość odwrotną: fałsz, jeśli to prawda, prawda, jeśli to fałsz.
- Operator XOR , który akceptuje dwa warunki, zwraca TRUE wtedy i tylko wtedy, gdy tylko jeden z operandów jest prawdziwy.
Operatory bitowe
Standard SQL nie przewiduje tej rodziny operatorów, jednak jest ona obecna w wielu implementacjach. Operatory te wykonują operacje AND, OR, NOT i XOR na poziomie bitowym.
Ogólne zasady dla operatorów
Wyrażenie składa się z wartości lub operacji, która zwraca wartość. Ta definicja jest rekurencyjna: wyrażenia mogą być zagnieżdżane. Ponieważ operatory zawsze zwracają wartość, łączenie ich razem w celu tworzenia coraz bardziej złożonych warunków jest całkowicie uzasadnione.
Użycie nawiasów okrągłych () wewnątrz wyrażeń wyszukiwania pozwala na modyfikację lub wyraźne określenie pierwszeństwa operatorów, czyli kolejności ich przetwarzania. Gdy wyrażenie złożone jest napisane bez nawiasów, stosuje się pierwszeństwo między operatorami dostarczonymi przez język.
DDL: Definicja danych
DDL ( Data Definition Language ) służy do tworzenia, modyfikowania lub usuwania obiektów w bazie danych. Polecenia DDL definiują strukturę bazy danych, a tym samym zawartych w niej danych, ale nie dostarczają narzędzi do modyfikacji danych, dla których używany jest język DML ( ang. Data Manipulation Language ). Użytkownik musi mieć niezbędne uprawnienia do działania w strukturze bazy danych, a uprawnienia te są przydzielane za pośrednictwem języka DCL ( Data Control Language ).
Domeny podstawowe
SQL udostępnia sześć rodzin domen podstawowych, z których można zdefiniować domeny, które mają być powiązane z atrybutami schematu.
DML: Manipulacja danymi
DML ( Data Manipulation Language ) udostępnia polecenia do wstawiania, modyfikowania i usuwania danych w tabelach w bazie danych. Struktura tych danych musi być już zdefiniowana przez DDL. Ponadto uprawnienie do dostępu do takich danych musi być wcześniej przypisane użytkownikowi za pośrednictwem DCL.
Wstaw
Polecenie posiada funkcję wstawiania danych do tabel .
Kolumny (lub pola ) docelowe wartości mogą, ale nie muszą być deklarowane w poleceniu. Jeśli nie są zadeklarowane, do polecenia należy przekazać wartość dla każdej kolumny tabeli, ściśle przestrzegając kolejności samych kolumn. Jeżeli natomiast zadeklarowane są kolumny docelowe, możliwe jest wskazanie tylko tych kolumn, dla których przekazywane są wartości, pod warunkiem, że wartości dla wszystkich kolumn nie null (które nie mogą być null) tabeli są mimo to wprowadzone.
Samo polecenie wstawia działa, wstawiając tylko jeden wiersz do tabeli na raz. Możliwe jest jednak wstawienie więcej niż jednego wiersza „automatycznie” poprzez przekazanie do wstawiania szeregu wierszy (lub krotek) wynikających z polecenia select, o ile wiersze te są zgodne z kolumnami tabeli, na której dane są wstawiane .
Wstaw składnię polecenia
- Prosta wstawka:
INSERT INTO nazwa_tabeli
VALUES ( lista wartości , wszystkie z uwzględnieniem kolejności pól tabeli , np . „ darowizna ” ) ; _
lub
INSERT INTO nazwa_tabeli ( lista pól biorących udział w wstawianiu ) VALUES ( lista wartości , wszystkie z uwzględnieniem kolejności pól zadeklarowanych powyżej , np . " darowizna " ) ;
- Wstaw używając wybierz:
INSERT INTO nazwa_tabeli ( lista pól biorących udział w wstawianiu , np . " darowizna " ) AS SELECT ...;
Aktualizuj
Polecenie aktualizacji ma potrójną funkcję modyfikacji danych tabel.
Nazwa każdego pola, które ma zostać zmodyfikowane, musi być zadeklarowana po słowie kluczowym SET i musi po niej następować symbol (równy) =oraz nowa wartość, którą musi przyjąć.
Możesz zmienić wiele pól w tym samym wierszu w jednym poleceniu aktualizacji, oddzielając je od siebie symbolem ,(przecinkiem).
Ogólne polecenie aktualizuje wszystkie wiersze tabeli. Możesz ograniczyć liczbę, stosując dodatkowe słowo kluczowe WHERE , które umożliwia jakościowy wybór wierszy przez nałożenie warunków na dane w wierszach przed aktualizacją.
Aktualizacja składni poleceń
- Aktualizacja ogólna:
UPDATE nazwa_tabeli
SET nazwa_pola1 = 'wartość1_nowa' ,
nazwa_pola2 = 'wartość2_nowa' ,
...
;
- Aktualizacja z warunkiem:
UPDATE nazwa_tabeli
SET nazwa_pola1 = 'wartość1_nowa' ,
nazwa_pola2 = 'wartość2_nowa'
WHERE nazwa_pola3 = 'wartość' ;
Usuń
Polecenie delete ma funkcję usuwania danych z tabel.
Podobnie jak polecenie update, również delete może działać w sposób ogólny, usuwając wszystkie wiersze tabeli lub może identyfikować wiersze do usunięcia za pomocą dodatkowego słowa kluczowego WHERE i powiązanego z nim warunku (lub warunków).
Składnia polecenia usuń
- Ogólne usuwanie:
USUŃ Z nazwa_tabeli ;
- Usuń z warunkiem:
DELETE FROM nazwa_tabeli
WHERE nazwa_pola = 'wartość' ;
Obetnij tabelę
Jak już wspomniano, klauzula Delete bez klauzuli Where usuwa wszystkie wiersze z określonej tabeli. Istnieje jednak inny sposób całkowitego opróżnienia tabeli: polecenie Obetnij tabelę . Niektóre DBMS implementują to polecenie (które nie występuje w standardzie SQL) szybciej niż Delete, na przykład usuwając plik danych bez odczytywania go i odtwarzając pusty. Jednak generalnie uniemożliwia to zwrócenie niektórych informacji pomocniczych, takich jak liczba usuniętych wierszy.
Skróć składnię polecenia tabeli
OBCIĄĆ [ TABLE ] nazwa_tabeli
Transakcja
Transakcja to blok instrukcji, które są ze sobą ściśle powiązane. W przypadku, gdy z jakiegokolwiek powodu (błąd wewnętrzny w SZBD, błąd w instrukcjach SQL, błąd systemowy) jedno z oświadczeń nie zostanie zakończone, cała transakcja zostanie anulowana. Dlatego mówi się, że transakcja jest operacją niepodzielną , to znaczy, że nie jest podzielna: jeśli nie zostanie wykonana w całości, nie zostanie wykonana w ogóle. Jest to jedno z najczęściej używanych narzędzi zapewniających integralność danych.
Dopóki transakcja nie zakończy się sukcesem, wprowadzane przez nią zmiany są widoczne tylko dla sesji, która zainicjowała transakcję. W zależności od poziomu izolacji inni użytkownicy będą mogli uzyskać dostęp do starszej wersji danych lub zostać wstrzymani do czasu zakończenia transakcji.
Nie wszystkie DBMS obsługują transakcje, podczas gdy inne obsługują je tylko pod pewnymi warunkami (na przykład w MySQL są one obsługiwane tylko dla niektórych typów tabel). Ponadto DBMS może ograniczyć transakcje do podzbioru SQL (na przykład w MySQL, jeśli wydane zostanie polecenie DDL, bieżąca transakcja się kończy).
Niektóre DBMS umożliwiają również transakcje zagnieżdżone. Zmiany dokonane przez jedną transakcję zawartą w innej są nieskuteczne, dopóki najbardziej zewnętrzna transakcja nie zostanie pomyślnie zakończona.
Semantycznie bardzo podobną alternatywą są punkty zapisu. Pozwalają na zapisanie wersji danych w trakcie transakcji. Będzie wtedy możliwe anulowanie całej transakcji lub przywrócenie jednego z wcześniej ustawionych punktów zapisu. Ten zapis można wykonać w warunkowym bloku kodu, co czyni tę funkcję znacznie bardziej dynamiczną niż transakcje zagnieżdżone.
Rozpocznij transakcję
Aby jawnie zainicjować transakcję, użyj polecenia BEGIN TRANSACTION . Brak tego polecenia powoduje, że każda instrukcja działa jako oddzielna transakcja.
Składnia polecenia rozpocznij transakcję
ROZPOCZNIJ TRANSAKCJĘ [ nazwa_transakcji ];
Zatwierdź
Polecenie COMMIT służy do potwierdzania transakcji . Dzięki niemu wszystkie zmiany wprowadzone do danych wcześniej są zapisywane.
Zatwierdź składnię polecenia
ZATWIERDZ [ TRANSAKCJA ] [ nazwa_transakcji ];
Cofnij
Polecenie ROLLBACK służy do anulowania transakcji . Dzięki niemu wszystkie zmiany wprowadzone w danych wcześniej (począwszy od początku transakcji) są anulowane.
Cofanie składni poleceń
ROLLBACK [ TRANSAKCJA ] [ nazwa_transakcji ];
DQL: Zapytanie o dane
DQL (język zapytań o dane) zawiera polecenia do odczytu i przetwarzania danych w bazie danych. Te dane muszą zostać wprowadzone przez DML w strukturach utworzonych za pomocą DDL, podczas gdy DCL ustala, czy użytkownik ma do nich dostęp.
Wybierz
Za pomocą polecenia select mamy możliwość wyodrębnienia danych w ukierunkowany sposób z bazy danych.
Składnia polecenia select
WYBIERZ [ WSZYSTKIE | WYRÓŻNIONE | TOP ] selection_elements_list FROM table_list_references
[ GDZIE WYRAŻENIE_WARUNKOWE ] [ GRUPA WEDŁUG lista_kolumn [ HAVING Warunek ] ] [ ORDER BY lista_kolumn ] ;
gdzie to jest:
- list_elements_selection to lista pól do wyodrębnienia (oddzielone od siebie przecinkiem);
- reference_list_table to lista tabel, z których można wyodrębnić dane;
- wyrażenie_warunkowe reprezentuje listę warunków, czyli wymagań, które musi spełnić pole, aby zostało pobrane z zapytania (warunki są określane za pomocą operatorów porównania, łączników logicznych i komparatorów, takich jak between , in , jak , is null );
- lista_kolumn to kolumna lub kolumny, które muszą być traktowane jako odniesienie do sortowania danych wyjściowych.
Domyślnie polecenie SELECT działa z metodą ALL , ale określając DISTINCT (lub UNIQUE w zależności od implementacji) można wyeliminować z wyników duplikaty wierszy.
Klauzula GROUP BY służy do grupowania wyników według krotki , podczas gdy względny warunek HAVING służy do filtrowania wyników.
WYBIERZ dostawcę , suma ( kwota_faktury )
FROM faktury
GRUPA WEDŁUG dostawcy
POSIADAJĄC sumę ( kwota_faktury ) > 10 . 000
W takim przypadku dostawcy, których łączny obrót przekracza 10 000, są odfiltrowywani.
Klauzula ORDER BY służy do sortowania wyników na podstawie co najmniej jednego pola.
LIMIT (lub TOP , w zależności od implementacji) ogranicza liczbę dostarczonych wierszy: LIMIT 10 zajmuje pierwsze 10 wierszy mojej tabeli. Możliwe jest również odrzucenie wielu wierszy na początku wyników poprzez dodanie parametru do klauzuli LIMIT lub OFFSET .
Standardowy SQL nie ma sortowania, jeśli nie określisz klauzuli ORDER BY , więc bez niej LIMIT ma również nieprzewidywalny efekt.
Przykład jest następujący:
SELECT DISTINCT nazwisko , imię , miejscowość_miejsce zamieszkania
FROM użytkowników
GDZIE lata > = 18
ORDER BY nazwisko
To zapytanie wyodrębnia listę wszystkich dorosłych użytkowników, sortując dane wyjściowe według nazwiska. W klauzulach GROUP BY i ORDER BY nazwy pól można zastąpić liczbą odpowiadającą kolejności funkcji SELECT : w ostatnim przypadku ORDER BY nazwisko można wpisać ORDER BY 1 .
Definicja wyboru jest jednak znacznie szersza, dostarcza wielu innych opcji, ale w zasadzie z tymi opcjami składa się większość zapytań.
WYBIERZ ODRÓŻNIENIE *
OD użytkowników
gwiazdka pozwala uwzględnić w zaznaczeniu wszystkie kolumny tabeli użytkownika
Po wybraniu możliwe jest również wykonanie obliczeń:
Wybierz DISTINCT cod_art , cena_jednostka * zapas AS Łącznie , zapas * obciążenie AS TotIngombro ;
OD artykułów
daje to wyodrębnione dane, ale także dane obliczone. Klauzula AS służy do nadania nazwy nowej kolumnie, która zostanie wyświetlona w wyniku wykonanego wyboru.
Wiele DBMS obsługuje niestandardową klauzulę LIMIT, która musi być umieszczona na końcu i może przybierać trzy formy:
LIMIT < liczba_wyników >
LIMIT < pozycja_pierwszy_wynik > , < liczba_wyników >
LIMIT < liczba_wyników > [ PRZESUNIĘCIE < pozycja_pierwszy_wynik > ]
number_results to liczba wierszy do wyodrębnienia. pos_first_result to indeks pierwszego wiersza do wyodrębnienia. Razem mogą służyć do dzielenia wyników na bloki i czytania ich po trochu (na przykład dla wygody administratora lub do stronicowania wyników wyświetlanych przez aplikację internetową).
Dołącz
Forma wyboru składająca się z kilku tabel z co najmniej jednym wspólnym polem jest uzyskiwana przez klauzulę Join .
Podzapytanie
Podzapytania można wstawiać wszędzie tam, gdzie język SQL dopuszcza wyrażenie zwracające pojedynczą wartość oraz w klauzuli FROM. W tym drugim przypadku podzapytania nazywane są również tabelami pochodnymi .
Właściwe podzapytania mogą zwracać pojedynczą wartość lub, w zależności od przypadku, zbiór wyników. Dość prostym przykładem jest ten, w którym chcesz wydobyć z tabeli wartości liczbowe powyżej średniej. Pojedynczy Select nie może odczytać średniej i jednocześnie wartości ją przekraczających. W tym celu będziemy mieli wybór, który odczytuje średnią:
SELECT AVG ( pole1 ) FROM moja_tabela ;
To zapytanie zostanie umieszczone w klauzuli WHERE najbardziej zewnętrznego zapytania; podzapytanie jest wykonywane jako pierwsze:
SELECT * FROM moja_tabela WHERE pole1 > ( SELECT AVG ( pole1 ) FROM moja_tabela );
Jak widać, ze składniowego punktu widzenia podzapytania należy umieszczać w nawiasach.
Tabele pochodne
Tabele pochodne są szczególnym przypadkiem podzapytania: wewnętrzny Select wyodrębnia dane, które następnie zostaną odpytywane przez zewnętrzny Select.
Poniższy przykład służy do celów edukacyjnych, ale nie jest optymalnym podejściem. Załóżmy jednak, że chcesz wyodrębnić rekordy, dla których pole poczty nie jest puste, wybierając je spośród użytkowników, których rejestracja została potwierdzona. Oto jak to zrobić z tabelą pochodną:
SELECT email FROM ( SELECT email FROM użytkowników WHERE potwierdzić = TRUE );
W rzeczywistości tabele pochodne są przydatne, gdy nie ma innych możliwych podejść, co ma miejsce, gdy zapytanie zewnętrzne zawiera JOIN.
DCL: Kontrola danych
DCL służy do zapewniania lub odwoływania użytkownikom uprawnień niezbędnych do korzystania z poleceń DML i DDL, a także samych poleceń DCL (które z kolei są im potrzebne, aby móc zmieniać uprawnienia do niektórych obiektów).
Przyznaj
Polecenie Grant zapewnia lub przyznaje jedno lub więcej uprawnień określonemu użytkownikowi (np. uprawnienie do wstawiania do tabeli, modyfikowania jej lub jej usuwania) oraz ważnego administratora.
Unieważnij
Polecenie Odwołaj cofa jedno lub więcej uprawnień danemu użytkownikowi (np. uprawnienie do usunięcia z tabeli).
Zapisane programy
Termin Programy Zapisane lub Logika Biznesowa odnosi się do tych procedur zaprogramowanych w SQL, z rozszerzeniami proceduralnymi, które umożliwiają sterowanie przepływem, pętle , kursory i obsługę błędów. W najbardziej kompletnych implementacjach SQL programy przechowywane mogą być różnych typów:
- Procedura składowana
- Zapisana funkcja
- Cyngiel
Ponadto niektóre DBMS, takie jak MySQL , umożliwiają tworzenie procedur SQL, które są wykonywane w określonym czasie tylko raz lub wielokrotnie w określonym przedziale czasowym, takie jak zadania Cron w systemach Unix.
Krytyka SQL
SQL to język zapytań zaprojektowany do interakcji z relacyjnymi bazami danych. Teoretycy zwracają jednak uwagę, że oryginalna charakterystyka SQL, inspirowana obliczaniem krotek , faktycznie go narusza . Jego najnowsze rozszerzenia w pełni obsługują model relacyjny , ale pogorszyły wyżej wymienione naruszenia .
Ponadto istnieje wiele krytycznych uwag dotyczących praktycznego wykorzystania SQL:
- nie zapewnia standardowego sposobu dzielenia długiego polecenia na krótsze polecenia, do których można się odnieść za pomocą nazwy (chociaż wiele implementacji faktycznie zapewnia tę funkcjonalność);
- różne implementacje są na ogół niekompatybilne ze sobą;
- w zbyt dużym stopniu polega się na wartościach NULL , meta-wartości, która według jednych naukowców powinna wskazywać na brak wartości, według innych powinna wskazywać na nieznaną wartość, podczas gdy w praktyce kończy się na tym, że używa się jej w obie strony lub tylko w jedną , ale w sposób niespójny .
Bibliografia
- ( EN ) „SQL-99 Complete, Really”, Peter Gulutzan i Trudy Pelzer, R&D Books, 1999, ISBN 978-0-87930-568-0
Powiązane pozycje
- Algebra relacyjna
- Rachunek relacyjny
- Język definicji danych
- Język manipulacji danymi
- Język zapytań
- Język kontroli danych
- Wstrzyknięcie SQL
- SQLJ
- 4GL
- PL / SQL
- Transact-SQL
- NoSQL
Inne projekty
Wikibooki zawierają tekst SQL lub podręczniki
Wikisłownik zawiera lemat słownikowy « SQL »
Wikimedia Commons zawiera obrazy lub inne pliki w SQL
Linki zewnętrzne
- ( EN ) Strukturalny język zapytań , w Encyclopedia Britannica , Encyclopædia Britannica , Inc .
- SQL . Bezpłatny przewodnik w języku włoskim wydany przez Departament Skarbu (w formacie pdf).
- Samouczek SQL , na 1keydata.com .
- Podstawowe instrukcje SQL na stronie kb.askmonty.org .
- ( EN ) SQL :: 2003 BNF , na savage.net.au .
- ( EN ) SQL99 BNF , na savage.net.au .
- ( EN ) Specyfikacja SQL93 ( TXT ) pod adresem contrib.andrew.cmu.edu .
- ( EN ) SQL93 BNF ( TXT ) na contrib.andrew.cmu.edu .
- ( EN ) Specyfikacja SQL92 , pod adresem savage.net.au .
- ( EN ) SQL92 BNF , na savage.net.au .
- ( EN ) PostgreSQL , na postgresql.org .
- ( EN ) Samouczki dotyczące Oracle SQL , na stronie freeitsolutions.com .
- ( PL ) wiscorp.com .
- Podręcznik SQL i samouczek z Webmasterpoint.org , na webmasterpoint.org .