SQL
| SQL | ||
|---|---|---|
|
| ||
| Deweloper(zy) | ||
|
IBM | ||
| Informacje ogólne | ||
| Wspólne rozszerzenia | sql | |
| Paradygmat | wieloparadygmat | |
| Pojawił się w | 1974 | |
| Zaprojektowany przez |
Donald D. Chamberlin Raymond F. Boyce | |
| Najnowsza stabilna wersja | SQL: 2016 (2016) | |
| typ systemu | Statyczny , Silny | |
| wdrożenia | Kilka | |
| dialekty | SQL-85, SQL-88, SQL-91 , SQL:1999 , SQL:2003 , SQL:2006 , SQL:2008 , SQL:2011 , SQL:2016 | |
| wpływem | dziennik danych | |
| wpłynął | Agena , CQL , LINQ , Windows PowerShell [ 1 ] | |
| System operacyjny | wieloplatformowy | |
| SQL | ||
|---|---|---|
| deweloper | ||
| IBM | ||
| ISO/IEC9075-1:2008 | ||
| Informacje ogólne | ||
| rozszerzenie pliku |
.sql | |
| typu mim |
application/x-sql | |
| Pierwsze wydanie | 1986 | |
| Ostatnia wersja |
SQL:2012 2012 | |
| typ formatu | Baza danych | |
| Normy | ISO/IEC 9075 | |
| otwarty format |
| |
SQL ( Structured Query Language ) to język specyficzny dla domeny przeznaczony do zarządzania i pobierania informacji z systemów zarządzania relacyjnymi bazami danych . [ 2 ] Jedną z jego głównych cech jest obsługa algebry i rachunku relacyjnego do tworzenia zapytań w celu łatwego wyszukiwania informacji z baz danych , a także wprowadzania w nich zmian.
Pierwotnie oparty na algebrze relacyjnej i rachunku relacyjnym , SQL składa się z języka definicji danych , języka manipulacji danymi i języka kontroli danych . Zakres SQL obejmuje wstawianie danych, zapytania, aktualizacje i usuwanie, tworzenie i modyfikowanie schematów oraz kontrolę dostępu do danych . Również SQL jest czasami określany jako język deklaratywny , zawiera również elementy proceduralne.
SQL był jednym z pierwszych języków komercyjnych dla modelu relacyjnego Edgara Franka Codda , opisanego w jego artykule badawczym z 1970 roku The Relational Model of Data for Large Shared Data Banks . Mimo niepełnego przestrzegania modelu relacyjnego opisanego przez Codda, stał się najczęściej używanym językiem baz danych.
SQL stał się standardem Amerykańskiego Narodowego Instytutu Normalizacyjnego (ANSI) w 1986 r. oraz Międzynarodowej Organizacji Normalizacyjnej (ISO) w 1987 r. Od tego czasu standard został zaktualizowany, aby zawierał więcej funkcji. Pomimo istnienia obu standardów, większość kodu SQL nie jest całkowicie przenośna między różnymi systemami baz danych bez innych dostosowań.
Geneza i ewolucja
Początki Momo są związane z relacyjnymi bazami danych, szczególnie tymi znajdującymi się na maszynach IBM w ramach systemu zarządzania System R , opracowanego przez grupę IBM w San Jose w Kalifornii .
Na początku był to IBM , a IBM stworzył SQL. SQL, pierwotnie akronim od „Structured Query Language", to ujednolicony język do definiowania, odpytywania, modyfikowania i kontrolowania danych w relacyjnej bazie danych. Jego nazwa jest oficjalnie wymawiana „ess-cue". -ell" (według amerykańskiego Krajowy Instytut Normalizacyjny).
Relacyjny model zarządzania bazą danych został zaproponowany w 1970 roku przez dr E.F. Codda z IBM Research Laboratory w San Jose w Kalifornii i został opracowany w ciągu następnej dekady na uniwersytetach i laboratoriach badawczych. SQL, jeden z kilku języków, które wyrosły z tej wczesnej pracy, prawie całkowicie zawładnął światem języków relacyjnych baz danych. Dostawcy systemów zarządzania relacyjnymi bazami danych, którzy początkowo wybrali inne języki, zaczęli gromadzić się na SQL; Krajowe i międzynarodowe organizacje normalizacyjne zaproponowały skodyfikowaną wersję języka.
W 1970 roku EF Codd zaproponował model relacyjny i skojarzył z nim podjęzyk dostępu do danych oparty na rachunku predykatów. [ 3 ] W oparciu o te pomysły, IBM Laboratories zdefiniowało język SEQUEL (Structured English Query Language), który został później szeroko zaimplementowany przez eksperymentalny system zarządzania bazami danych System R (DBMS) , opracowany w 1977 r. również przez IBM. Jednak po raz pierwszy został wprowadzony przez Oracle w 1979 roku w produkcie komercyjnym.
SEQUEL stał się poprzednikiem SQL, który jest rozwiniętą wersją tego pierwszego. SQL staje się językiem par excellence różnych systemów zarządzania relacyjnymi bazami danych, które pojawiły się w następnych latach i zostały ostatecznie ustandaryzowane w 1986 roku przez ANSI , dając początek pierwszej standardowej wersji tego języka, „SQL-86” lub „SQL1”. W następnym roku norma ta została również przyjęta przez ISO.
Jednak ten pierwszy standard nie obejmował wszystkich potrzeb programistów i zawierał funkcje definicji pamięci masowej, które uznano za usunięte. Tak więc w 1992 roku został wydany nowy rozszerzony i poprawiony standard SQL o nazwie „SQL-92” lub „SQL2”.
SQL jest obecnie de facto standardem dla zdecydowanej większości komercyjnych DBMS. I chociaż różnorodność poszczególnych dodatków zawartych w różnych komercyjnych implementacjach języka jest duża, wsparcie dla standardu SQL-92 jest ogólne i bardzo szerokie.
Z biegiem czasu ANSI SQL przeszedł kilka zmian i uzupełnień:
| Rok | Nazwa | Alias | Uwagi |
|---|---|---|---|
| 1986 | SQL-86 | SQL-87 | Pierwsza publikacja autorstwa ANSI. Potwierdzony przez Międzynarodową Organizację Normalizacyjną w 1987 roku. |
| 1989 | SQL-89 | Niewielkiej zmiany. | |
| 1992 | SQL-92 | SQL2 | Poważna zmiana. |
| 1999 | SQL:1999 | SQL2000 | Dodano wyrażenia regularne , zapytania rekurencyjne (dla relacji hierarchicznych), wyzwalacze i niektóre funkcje zorientowane obiektowo . |
| 2003 | SQL:2003 | Wprowadza niektóre cechy XML , zmiany w funkcjach, standaryzację obiektu sekwencji i automatyczne numerowanie kolumn. [ 4 ] | |
| 2006 | SQL:2006 | ISO/IEC 9075-14:2006 Definiuje sposoby wykorzystania SQL w połączeniu z XML. Definiuje sposoby importowania i przechowywania danych XML w bazie danych SQL, manipulowania nimi w bazie danych oraz publikowania danych XML i konwencjonalnych danych SQL w formie XML. Ponadto zapewnia funkcje, które pozwalają aplikacjom zintegrować użycie XQuery, języka zapytań XML opublikowanego przez W3C (World Wide Web Consortium) z ich kodem SQL, w celu równoczesnego dostępu do zwykłych danych SQL i dokumentów XML. | |
| 2008 | SQL:2008 | Umożliwia użycie klauzuli ORDER BY poza definicjami kursora. Zawiera wyzwalacze typu ZAMIAST. Dodaj instrukcję TRUNCATE. [ 5 ] | |
| 2011 | SQL:2011 | Dane tymczasowe (OKRES ZA). Ulepszenia funkcji okna i klauzuli FETCH. | |
| 2016 | SQL:2016 | Obsługuje dopasowywanie wzorców, polimorficzne funkcje tabel i obsługę plików JSON. |
Ogólne cechy SQL
SQL to język dostępu do bazy danych, który wykorzystuje elastyczność i moc systemów relacyjnych, a tym samym umożliwia szeroką gamę operacji. [ 6 ]
Jest to język deklaratywny „ wysokiego poziomu ” lub „nieproceduralny” , który dzięki silnej podstawie teoretycznej i orientacji na obsługę zbiorów rekordów — a nie na pojedyncze rekordy — pozwala na wysoką produktywność w kodowaniu i orientacji obiektowej. W ten sposób pojedyncza instrukcja może być równoważna jednemu lub większej liczbie programów, które byłyby używane w języku niskiego poziomu zorientowanym na rekordy. SQL ma również następujące funkcje:
- Język definicji danych : SQL LDD udostępnia polecenia służące do definiowania schematu relacji, usuwania relacji i modyfikacji schematu relacji.
- Interaktywny język manipulacji danymi : SQL LMD obejmuje języki zapytań oparte zarówno na algebrze relacyjnej, jak i rachunku relacyjnym krotek.
- Integralność : SQL LDD zawiera polecenia określające ograniczenia integralności, których muszą przestrzegać dane przechowywane w bazie danych.
- Definicja widoku : LDD zawiera polecenia do definiowania widoków.
- Kontrola transakcji — SQL zawiera polecenia określające początek i koniec transakcji.
- Wbudowany i dynamiczny SQL : Oznacza to, że instrukcje SQL mogą być osadzone w językach programowania, takich jak: C++ , C , Java , PHP , COBOL , Pascal i Fortran .
- Autoryzacja : LDD zawiera polecenia określające prawa dostępu do relacji i widoków.
Typy danych
Niektóre z podstawowych typów danych SQL to:
Liczby całkowite:
- TYNYINT(rozmiar): -128 do 127 normalny. 0 do 255 UNSIGNED *. Maksymalną liczbę cyfr można podać w nawiasach
- MAŁY(rozmiar): -32768 do 32767 normalny. 0 do 65535 BEZ PODPISU *. Maksymalną liczbę cyfr można podać w nawiasach
- ŚREDNIA (rozmiar): -8388608 do 8388607 normalna. 0 do 16777215 BEZ PODPISU *. Maksymalną liczbę cyfr można podać w nawiasach
- INT(rozmiar): -2147483648 do 2147483647 normalne. 0 do 4294967295 BEZ PODPISU *. Maksymalną liczbę cyfr można podać w nawiasach
- BIGINT (rozmiar): -9223372036854775808 do 9223372036854775807 normalny. 0 do 18446744073709551615 BEZ PODPISU *. Maksymalną liczbę cyfr można podać w nawiasach
Liczb zmiennoprzecinkowych:
- FLOAT(rozmiar, d): Mała liczba z ruchomym przecinkiem dziesiętnym. Maksymalną liczbę cyfr można określić w parametrze rozmiaru. Maksymalna liczba cyfr na prawo od kropki dziesiętnej jest określona w parametrze d
- DOUBLE(rozmiar, d) : Duża liczba z ruchomym przecinkiem dziesiętnym. Maksymalną liczbę cyfr można określić w parametrze rozmiaru. Maksymalna liczba cyfr na prawo od kropki dziesiętnej jest określona w parametrze d
- DECIMAL (rozmiar, d) : PODWÓJNY zapisywany jako łańcuch, pozwalający na stały punkt dziesiętny. Maksymalną liczbę cyfr można określić w parametrze rozmiaru. Maksymalna liczba cyfr na prawo od kropki dziesiętnej jest określona w parametrze d
daty i godziny
- DATA(): Data. Format: RRRR-MM-DD Uwaga: Obsługiwany zakres to od „1000-01-01” do „9999-12-31”
- DATETIME(): * Kombinacja daty i godziny. Format: RRRR-MM-DD GG:MI:SS Uwaga: obsługiwany zakres to „1000-01-01 00:00:00” do „9999-12-31 23:59:59”
- TIMESTAMP(): * Znacznik czasu. Wartości TIMESTAMP są przechowywane jako liczba sekund od epoki Uniksa ('1970-01-01 00:00:00' UTC). Format: RRRR-MM-DD GG:MI:SS Uwaga: Obsługiwany zakres to „1970-01-01 00:00:01” UTC do „2038-01-09 03:14:07” UTC
- CZAS(): Czas. Format: GG:MI:SS Uwaga: Obsługiwany zakres to „-838:59:59” do „838:59:59”
- YEAR(): Rok w formacie dwu- lub czterocyfrowym. Uwaga: Dopuszczalne wartości w formacie czterocyfrowym: 1901 do 2155. Dopuszczalne wartości w formacie dwucyfrowym: 70 do 69, reprezentujące lata od 1970 do 2069
Łańcuch znaków:
- CHAR (rozmiar): Posiada ciąg o stałej długości (może zawierać litery, cyfry i znaki specjalne). Stały rozmiar jest podany w nawiasach. Może przechowywać do 255 znaków
- VARCHAR (rozmiar): Posiada ciąg o zmiennej długości (może zawierać litery, cyfry i znaki specjalne). Maksymalny rozmiar jest podany w nawiasach. Możesz zapisać do 255 znaków. Uwaga: jeśli dodasz wartość większą niż 255, zostanie ona przekonwertowana na typ tekstowy
- TINYTEXT: ma ciąg o maksymalnej długości 255 znaków
- TEKST: Zawiera ciąg znaków o maksymalnej długości 65 535 znaków
- BLOB: Dla BLOB (Dużych Obiektów Binarnych). Przechowuje do 65 535 bajtów danych
- MEDIUMTEXT: zawiera ciąg znaków o maksymalnej długości 16 777 215 znaków
- MEDIUMBLOB: Dla BLOB (duże obiekty binarne). Przechowuje 16 777 215 bajtów danych
- LONGTEXT: ma ciąg o maksymalnej długości 4 294 967 295 znaków
- LONGBLOB: dla obiektów BLOB (dużych obiektów binarnych). Mieści 4 294 967 295 bajtów danych
Wylicz i ustaw:
- Wyliczenie (x, y, z itd.): Umożliwia wprowadzenie listy możliwych wartości. Możesz podać do 65535 wartości na liście ENUM. Jeśli zostanie wstawiona wartość, której nie ma na liście, zostanie wstawiona pusta wartość. Uwaga: Wartości są sortowane w kolejności ich wpisywania. Wprowadź możliwe wartości w tym formacie: ENUM ('X', 'Y', 'Z')
- Set: Podobny do ENUM, z wyjątkiem tego, że SET może pomieścić do 64 pozycji listy i może przechowywać więcej niż jedną opcję
Pliki binarne:
- bit: liczba całkowita, która może wynosić 0, 1 lub NULL
Optymalizacja
Jak wspomniano wcześniej i jest to powszechne w językach dostępu do baz danych wysokiego poziomu, SQL jest językiem deklaratywnym. Innymi słowy, określa, co jest pożądane, a nie jak to osiągnąć, więc oświadczenie nie ustanawia wprost nakazu egzekucji.
Wewnętrzna kolejność wykonywania instrukcji może poważnie wpłynąć na wydajność SZBD, dlatego konieczne jest przeprowadzenie optymalizacji przed jej wykonaniem. Wielokrotnie użycie indeksów przyspiesza wykonywanie zapytania, ale spowalnia aktualizację danych. W zależności od wykorzystania aplikacji priorytetem będzie dostęp indeksowany lub szybka aktualizacja informacji. Optymalizacja różni się znacznie dla każdego silnika bazy danych i zależy od wielu czynników.
Nowoczesne systemy baz danych posiadają komponent zwany optymalizatorem zapytań . Przeprowadza on szczegółową analizę możliwych planów wykonania zapytania SQL i wybiera ten, który jest najbardziej efektywny do jego realizacji.
Istnieje rozszerzenie SQL znane jako FSQL (Fuzzy SQL, fuzzy SQL), które umożliwia dostęp do baz danych rozmytych przy użyciu logiki rozmytej . Ten język został zaimplementowany eksperymentalnie i szybko się rozwija.
Język definicji danych (DDL)
Język definicji danych (w języku angielskim Data Definition Language lub DDL ) odpowiada za modyfikowanie struktury obiektów bazy danych. Zawiera polecenia do modyfikowania, usuwania lub definiowania tabel, w których przechowywane są dane bazy danych. Istnieją cztery podstawowe operacje: UTWÓRZ, ZMIEŃ, UPUŚĆ i OBCIĄĆ. [ 7 ]
UTWÓRZ
To polecenie umożliwia tworzenie obiektów danych, takich jak nowe bazy danych, tabele, widoki i procedury składowane .
- Przykład (utwórz tabelę)
CREATE TABLE klienci ;
ZMIEŃ
To polecenie pozwala modyfikować strukturę tabeli lub obiektu. Możesz dodawać/usuwać pola do tabeli, modyfikować typ pola, dodawać/usuwać indeksy do tabeli, modyfikować wyzwalacz itp.
- Przykład (dodaj kolumnę do tabeli)
ZMIEŃ TABELĘ uczniowie DODAJ wiek INT BEZ PODPISU ;
DROP (Usuń)
To polecenie usuwa obiekt z bazy danych. Może to być tabela, widok , indeks , wyzwalacz , funkcja, procedura lub dowolny obiekt obsługiwany przez silnik bazy danych. Można go łączyć z instrukcją ALTER.
- Przykład
studenci DROP TABLE ;
OBCIĄĆ
To polecenie dotyczy tylko tabel, a jego funkcją jest usunięcie całej zawartości określonej tabeli. Zaletą nad poleceniem DELETE jest to, że jeśli chcesz usunąć całą zawartość tabeli, jest to znacznie szybsze, zwłaszcza jeśli tabela jest bardzo duża. Minusem jest to, że TRUNCATE jest przydatne tylko wtedy, gdy chcesz usunąć absolutnie wszystkie rekordy, ponieważ klauzula WHERE nie jest dozwolona. Chociaż na początku ta instrukcja wydaje się być DML (językiem manipulacji danymi), w rzeczywistości jest to DDL, ponieważ wewnętrznie polecenie TRUNCATE usuwa tabelę i odtwarza ją, nie wykonując żadnych transakcji.
- Przykład
OBCIĄĆ TABELĘ nazwa_tabeli ;
Język manipulacji danymi (DML)
Definicja
Język manipulacji danymi ( Data Manipulation Language lub DML w języku angielskim) to język dostarczany przez system zarządzania bazą danych, który umożliwia użytkownikom wykonywanie zadań związanych z wyszukiwaniem lub manipulowaniem danymi, zorganizowanymi przez bazę danych. [ 7 ]
Najpopularniejszym obecnie językiem manipulacji danymi jest SQL, używany do pobierania i manipulowania danymi w relacyjnej bazie danych.
WYBIERZ
Instrukcja SELECT pozwala nam na zapytanie o dane przechowywane w tabeli bazy danych.
Formularz podstawowy
WYBIERZ [ { WSZYSTKIE | DISTINCT } ]
< nazwa_pola > [, < nazwa_pola > ...]
FROM { < nazwa_tabeli >|< nazwa_widoku > } [,
{ < nazwa_tabeli >|< nazwa_widoku > } ...]
[ GDZIE < warunek > [ { ORAZ | LUB } < warunek > ...]]
[ GRUPA WG < nazwa_pola > [, < nazwa_pola > ...]]
[ Mając < warunek > [ { ORAZ | LUB } < warunek > ...]]
[ ORDER BY { < nazwa_pola >|< indeks_pola > } [ { ASC | DESC } ][,
{ < nazwa_pola >|< indeks_pola > } [ { ASC | WYŁĄCZ } ]]];
| WYBIERZ | Słowo kluczowe wskazujące, że instrukcja SQL, którą chcemy wykonać, jest zapytaniem. Wybierz zarówno pola, które są wymienione, jak i wszystkie rekordy spełniające warunek w części WHERE. Gdy atrybuty są pobierane z różnych tabel w części FROM, wykonuje również łączenie. Dlatego mówi się, że jest to język ortogonalny.
Umieszczenie słowa kluczowego ALL oznacza, że chcemy wybrać wszystkie wartości, czyli wygenerować multiset lub torbę zamiast zestawu. Jest to wartość domyślna i rzadko jest określana. Umieszczenie słowa kluczowego DISTINCT oznacza, że chcemy wybrać tylko odrębne wartości. Rezultatem jest zestaw zamiast multisetu lub torby. |
| DESDE | Wskazuje tabelę (lub tabele), z której chcemy pobrać dane. W przypadku, gdy istnieje więcej niż jedna tabela, zapytanie jest nazywane „kwerendą kombinowaną” lub „dołączaniem”. W zapytaniach łączonych konieczne jest zastosowanie warunku złączenia poprzez klauzulę WHERE . |
| GDZIE | Określa warunek, który musi zostać spełniony, aby dane zostały zwrócone przez zapytanie. Poza operatorami relacyjnymi i innymi dopuszcza operatory logiczne AND i OR . |
| GRUPUJ WEDŁUG | Określa grupowanie danych. Jest zawsze używany w połączeniu z dodatkowymi funkcjami. |
| MAJĄCY | Określa warunek, który musi zostać spełniony, aby dane zostały zwrócone przez zapytanie. Jego działanie jest podobne do działania WHERE , ale dotyczy zbioru wyników zwracanych przez zapytanie. Musi być zawsze stosowany razem z GROUP BY , a warunek musi odnosić się do pól w nim zawartych. |
| ZAMÓW PRZEZ | Przedstawia wynik uporządkowany według wskazanych kolumn. Kolejność może być wyrażona za pomocą ASC (kolejność rosnąco) i DESC (kolejność malejąco). Wartość domyślna to ASC. |
Przykład:
Aby sformułować zapytanie do tabeli samochodów i pobrać pola: tablica rejestracyjna, marka, model, kolor, liczba_kilometrów, liczba_miejsc, musimy wykonać następujące zapytanie. Dane zostaną zwrócone posortowane według marki i modelu w porządku rosnącym, od najmniejszego do największego. Słowo kluczowe FROM wskazuje, że dane zostaną pobrane z tabeli Samochody.
SELECT
tablica rejestracyjna ,
marka ,
model ,
kolor ,
liczba_kilometrów ,
liczba_miejsc
FROM
cars
ORDER BY
marka ,
model ;
Przykład uproszczonego zapytania za pomocą symbolu wieloznacznego pola (*):
Użycie gwiazdki wskazuje, że chcemy, aby zapytanie zwróciło wszystkie pola, które istnieją w tabeli, a dane zostaną zwrócone w kolejności marki i modelu.
WYBIERZ *
Z
samochodów
ZAMÓW WEDŁUG
marki , modelu ;
klauzula WHERE
Klauzula WHERE to instrukcja, która pozwala nam filtrować wynik instrukcji SELECT . Zwykle nie chcemy uzyskać wszystkich istniejących informacji w tabeli, ale chcemy uzyskać tylko te informacje, które są nam w danym momencie przydatne. Klauzula WHERE filtruje dane przed ich zwróceniem przez zapytanie. Gdy w klauzuli WHERE chcemy zawrzeć typ tekstu, musimy umieścić wartość między pojedynczymi cudzysłowami.
Przykłady:
W naszym przykładzie chcemy zapytać o konkretny samochód, w tym celu dodaliśmy klauzulę WHERE . Ta klauzula określa co najmniej jeden warunek, który musi zostać spełniony, aby instrukcja SELECT zwróciła dane. W takim przypadku zapytanie zwróci tylko dane samochodu z tablicą rejestracyjną, więc zapytanie zwróci tylko dane samochodu z tablicą rejestracyjną MF-234-ZD lub tablicę rejestracyjną FK-938-ZL. Możesz użyć klauzuli WHERE samodzielnie lub w połączeniu z dowolną liczbą warunków.
SELECT
tablica rejestracyjna ,
marka ,
model ,
kolor ,
ilość_kilometrów ,
ilość_miejsc
FROM
samochodów
WHERE
tablica rejestracyjna = 'MF-234-ZD'
OR tablica rejestracyjna = 'FK-938-ZL' ;
Warunek WHERE można zanegować za pomocą operatora logicznego NOT. Następujące zapytanie zwróci wszystkie dane z tabeli Samochody, z wyjątkiem tej z tablicą rejestracyjną MF-234-ZD.
SELECT
tablica rejestracyjna ,
marka ,
model ,
kolor ,
liczba_kilometrów ,
liczba_miejsc
FROM
cars
WHERE
NOT rejestracja = 'MF-234-ZD' ;
Następujące zapytanie używa warunkowego DISTINCT , które zwróci tabelę wygenerowaną przez wybranie tylko pól marki i modelu każdego rekordu, eliminując powtarzające się wiersze. Innymi słowy, zestaw modeli każdej marki, który istnieje w samochodach.
SELECT DISTINCT marka , model FROM samochodów ;
Jeśli pominięto DISTINCT lub użyto ALL , wygenerowana tabela miałaby powtarzające się wiersze, ponieważ może być kilka samochodów tej samej marki i modelu, ale z różnymi tablicami rejestracyjnymi. W takim przypadku wynik byłby zbiorem wielokrotnym , w którym każda linia z polami marki i modelu w odpowiedzi odpowiada jakiejś tablicy rejestracyjnej z tabeli samochodów , która nie jest pokazana w odpowiedzi.
Klauzula ORDER BY
Klauzula ORDER BY to instrukcja, która pozwala nam określić kolejność zwracania danych. Za pomocą słów kluczowych ASC i DESC możemy określić kolejność rosnącą lub malejącą . Kolejność zależy od typu danych zdefiniowanych w kolumnie, tak że pole numeryczne będzie uporządkowane jako takie, a alfanumeryczne od A do Z, nawet jeśli jego zawartość jest numeryczna. Domyślnie jest to ASC, jeśli nie określono podczas zapytania.
Przykłady:
SELECT
tablica rejestracyjna ,
marka ,
model ,
kolor ,
liczba_kilometrów ,
liczba_miejsc
FROM
cars
ORDER BY
marka ASC ,
model DESC ;
W tym przykładzie wybierane są wszystkie rejestracje pól, marka, model, kolor, liczba_kilometrów i liczba_miejsc z tabeli samochodów, porządkując je według marki i modelu pól, marki w kolejności rosnącej i modelu w kolejności malejącej.
WYBIERZ
tablicę rejestracyjną ,
markę , model , kolor , ilość_kilometrów , ilość_miejsc FROM samochodów ORDER BY 2 ;
Ten przykład wybiera wszystkie pola tablicy rejestracyjnej, marki, modelu, koloru, number_kilometers i num_places z tabeli cars, porządkując je według pola marki , ponieważ pojawia się jako drugie na liście pól składających się na SELECT.
Podzapytania
Podzapytanie to instrukcja SELECT osadzona w klauzuli innej instrukcji SQL. Podzapytania mogą być również używane w poleceniach INSERT, UPDATE, DELETE oraz w klauzuli FROM. [ 8 ]
Podzapytania mogą być przydatne, jeśli musisz wybrać wiersze z tabeli z warunkiem zależnym od danych w samej tabeli lub w innej tabeli.
Podzapytanie (zapytanie wewnętrzne) jest wykonywane przed zapytaniem głównym; wynik podzapytania jest używany przez zapytanie główne (zapytanie zewnętrzne).
WYBIERZ c . immatrykulacja , c . model
Z samochodów JAK C
GDZIE c . czesne IN
(
WYBIERZ m . czesne
Z grzywien AS m
GDZIE m . kwota > 100
);
W tym przykładzie wybierane są tablice rejestracyjne i modele samochodów, których grzywna przekracza 100 USD.
WSTAW
Instrukcja SQL INSERT dodaje jeden lub więcej rekordów do jednej (i tylko jednej) tabeli w relacyjnej bazie danych.
Formularz podstawowy
INSERT INTO
tabela ( kolumnaA , [ kolumnaB , ...])
VALUES
( 'wartość1' , [ 'wartość2' , ...]);
-- Lub może być również użyty jako:
INSERT INTO table VALUES ( 'wartość1' , 'wartość2' );
Liczba kolumn i wartości muszą być takie same. Jeśli kolumna nie zostanie określona, zostanie jej przypisana wartość domyślna. Wartości określone (lub sugerowane) w oświadczeniu INSERTspełniają wszystkie obowiązujące ograniczenia. Jeśli wystąpi błąd składni lub jeśli którekolwiek z ograniczeń zostanie naruszone, wiersz nie zostanie dodany i zostanie zwrócony błąd.
Przykład
INSERT INTO phone_book ( nazwisko , numer )
WARTOŚCI ( 'Roberto Jeldrez' , 4886850 );
Po określeniu wszystkich wartości tabeli można użyć skróconego zestawienia:
INSERT INTO nazwa_tabeli VALUES ( 'wartość1' , [ 'wartość2' , ...]);
Przykład (zakładając, że „nazwisko” i „numer” to jedyne kolumny w tabeli „książka telefoniczna”):
INSERT INTO agenda_telefonica
VALUES ( „Johnny Aguilar” , 080473968 );
Formularze zaawansowane
Cechą SQL (od SQL-92) jest użycie konstruktorów wierszy do wstawiania wielu wierszy naraz za pomocą jednej instrukcji SQL:
INSERT INTO
table ( kolumna1 [, kolumna2 , ...])
VALUES
( 'wartość1A' , [ 'wartość1B' , ...]),
( 'wartość2A' , [ 'wartość2B' , ...]), ... ;
Ta funkcja jest obsługiwana przez DB2, PostgreSQL (od wersji 8.2), MySQL i H2.
Przykład (zakładając, że nazwisko i numer są jedynymi kolumnami w tabeli phone_book):
INSERT INTO
agenda_telefonica
VALUES
( 'Roberto Fernández' , '4886850' ),
( 'Alejandro Sosa' , '4556550' );
To mogło być zrobione przez zdania
WSTAW WARTOŚCI W agendzie_telefonica ( 'Roberto Fernández' , ' 4886850 ' ); WSTAW WARTOŚCI W agendzie_telefonica ( 'Alejandro Sosa' , ' 4556550 ' );
Należy zauważyć, że oddzielne instrukcje mogą mieć inną semantykę (zwłaszcza w odniesieniu do wyzwalaczy) i mogą mieć inną wydajność niż instrukcja wielokrotnego wstawiania.
Aby wstawić wiele wierszy w MS SQL, możesz użyć tej konstrukcji:
INSERT INTO phone_book
SELECT 'Jan Kowalski' , '555-1212'
UNION ALL
SELECT 'Piotr Kowalski' , '555-2323' ;
Należy zauważyć, że nie jest to poprawna instrukcja SQL zgodnie ze standardem SQL ( SQL: 2003 ), ze względu na niekompletną klauzulę subselect.
Aby zrobić to samo w Oracle , używana jest tabela DUAL , o ile jest to tylko jeden wiersz:
INSERT INTO phone_book
SELECT 'Jan Doe' , '555-1212' FROM DUAL
UNION ALL
SELECT 'Piotr Doe' , '555-2323' FROM DUAL
Implementacja tej logiki zgodna ze standardami jest pokazana w poniższym przykładzie lub jak pokazano powyżej (nie dotyczy Oracle):
INSERT INTO phone_book
WYBIERZ 'Jan Kowalski' , '555-1212' OD BOCZNE ( WARTOŚCI ( 1 ) ) AS t ( c )
UNION ALL
WYBIERZ 'Piotr Kowalski' , '555-2323' OD BOCZNE ( WARTOŚCI ( 1 ) ) AS t ( c )
Kopiowanie wierszy z innych tabel
INSERT może być również używany do pobierania danych od innych, modyfikowania ich w razie potrzeby i wstawiania bezpośrednio do tabeli. Wszystko to odbywa się za pomocą pojedynczej instrukcji SQL, która nie wymaga żadnego przetwarzania pośredniego w aplikacji klienckiej. SUBSELECT jest używany zamiast klauzuli VALUES. SUBSELECT może zawierać instrukcję JOIN , wywołania funkcji, a nawet może wysyłać zapytania o dane wstawiane do tej samej TABELI. Logicznie, SELECT jest oceniany przed rozpoczęciem operacji INSERT. Przykład podano poniżej.
INSERT IN TO phone_book2
SELECT *
FROM książka_telefoniczna
WHERE nazwa IN ( 'Jan Kowalski' , 'Piotr Kowalski' );
Wariancja jest konieczna, gdy część danych z tabeli źródłowej jest wstawiana do nowej tabeli, ale nie cały rekord. (Lub gdy schematy tabel nie są takie same).
INSERT INTO phone_book2 ([ nazwa ], [ numer telefonu ])
SELECT [ imię ], [ numer telefonu ] FROM książka_telefoniczna WHERE imię IN ( 'Jan Kowalski' , 'Piotr Kowalski' );
SELECT tworzy tabelę (tymczasową), a schemat tabeli tymczasowej musi być zgodny ze schematem tabeli, w której wstawiane są dane.
AKTUALIZUJ
Instrukcja SQL UPDATE służy do modyfikacji wartości istniejącego zestawu rekordów w tabeli.
Przykład
UPDATE Moja_tabela SET field1 = 'zaktualizowana wartość' WHERE field2 = 'N' ;
USUŃ
Instrukcja SQL DELETE usuwa jeden lub więcej istniejących rekordów w tabeli.
Formularz podstawowy
DELETE FROM tabela WHERE kolumna1 = 'wartość1' ;
Przykład
DELETE FROM moja_tabela WHERE kolumna2 = 'N' ;
Odzyskiwanie kluczy
Projektanci baz danych, którzy używają klucza zastępczego jako klucza podstawowego dla każdej tabeli, sporadycznie napotkają scenariusz, w którym konieczne jest automatyczne odzyskanie bazy danych, generując klucz podstawowy z instrukcji SQL INSERT do użycia w innych instrukcjach SQL. Większość systemów nie zezwala na zwracanie wiersza danych przez instrukcje SQL INSERT. Dlatego konieczne staje się zastosowanie rozwiązania w takich scenariuszach.
Typowe wdrożenia obejmują:
- Korzystając z procedury składowanej specyficznej dla bazy danych, która generuje klucz zastępczy, wykonaj operację INSERT, a na koniec zwróci wygenerowany klucz.
- Za pomocą instrukcji SELECT specyficznej dla bazy danych w tabeli tymczasowej zawierającej ostatni wstawiony wiersz. DB2 implementuje tę funkcję w następujący sposób:
WYBIERZ *
Z NOWEJ TABELI (
WSTAW WARTOŚCI DO KSIĄŻKI TEL.
( 'Cristobal Jeldrez' , '0426.817.10.30' ) ) AS t
- Użycie instrukcji SELECT po instrukcji INSERT z funkcją specyficzną dla bazy danych, która zwraca klucz podstawowy wygenerowany przez ostatnio wstawiony rekord.
- Użycie unikalnej kombinacji elementów z oryginalnej instrukcji SQL INSERT w kolejnej instrukcji SELECT .
- Użycie identyfikatora GUID w instrukcji SQL INSERT i pobranie go w instrukcji SELECT .
- Użycie funkcji PHP mysql_insert_id() MySQL po instrukcji INSERT.
- Używając INSERT z klauzulą RETURNING dla Oracle , która może być używana tylko wewnątrz bloku PL/SQL , w przypadku PostgreSQL może być również używana zarówno z SQL, jak i PL/SQL.
INSERT INTO phone_book_id WARTOŚCI ( 'Cristobal Jeldrez' , '0426.817.10.30' )
POWRÓT phone_book_id INTO v_pb_id
- W przypadku MS SQL można zastosować następującą instrukcję:
Ustaw NoCount na ;
INSERT INTO phone_book VALUES ( 'Cristobal Jeldrez' , '0426.817.10.30' );
Wybierz @@ Tożsamość jako identyfikator
Wyzwalacze
Wyzwalacze , zwane również wyzwalaczami , są zdefiniowane w tabeli, na której działa instrukcja INSERT, i są oceniane w kontekście operacji. Wyzwalacze BEFORE INSERT umożliwiają modyfikację wartości wprowadzanych do tabeli. Wyzwalacze AFTER INSERT nie mogą modyfikować danych w przyszłości, ale mogą być używane do inicjowania akcji na innych tabelach, na przykład do zastosowania mechanizmów audytu Excel.
Systemy zarządzania bazami danych
Najczęściej używane systemy zarządzania bazami danych z obsługą SQL to, w kolejności alfabetycznej:
- DB2
- ognisty Ptak
- SQL
- Informix
- InterBase
- MariaDB
- Microsoft SQLServer
- mysql
- Wyrocznia
- PostgreSQL
- Wszechobecny SQL
- SQLite
- Sybase-ASE
Interoperacyjność
Języki zapytań różnych systemów zarządzania bazami danych są ze sobą niezgodne i niekoniecznie są zgodne ze standardem. W szczególności składnia daty i godziny, łączenie ciągów, wartości null i porównanie tekstu pod względem rozróżniania wielkości liter różnią się w zależności od dostawcy. Szczególnym wyjątkiem jest PostgreSQL , który dąży do zgodności ze standardami. [ 9 ]
Popularne implementacje SQL zwykle pomijają obsługę podstawowych standardowych funkcji SQL, takich jak DATElub TIME. Tak jest w przypadku menedżera bazy danych Oracle (którego typ DATEzachowuje się jak DATETIME, a nie ma typu TIME) [ 10 ] oraz MS SQL Server (przed wersją 2008). W rezultacie kod SQL rzadko może być przenoszony między systemami baz danych bez modyfikacji.
Istnieje kilka przyczyn braku możliwości przenoszenia między systemami baz danych:
- Złożoność i rozmiar standardu SQL oznacza, że większość implementacji SQL nie jest zgodna z pełnym standardem.
- Standard nie określa zachowania bazy danych w kilku ważnych obszarach (np . indeksy , przechowywanie plików itp.), pozostawiając implementacje do decyzji, jak się zachować.
- Standard SQL określa dokładnie składnię, którą musi zaimplementować zgodny system baz danych. Jednak specyfikacja w standardzie semantyki konstrukcji językowych nie jest tak dobrze zdefiniowana, co prowadzi do niejednoznaczności.
- Wielu dostawców baz danych posiada duże bazy klientów, więc wprowadzanie zmian w celu dostosowania do standardu może prowadzić do niezgodności w instalacjach użytkowników, a dostawca może nie chcieć zrezygnować z kompatybilności wstecznej .
- Dostawca ma niewielką zachętę komercyjną, aby ułatwić użytkownikom zmianę dostawców baz danych.
- Użytkownicy oceniający oprogramowanie bazy danych mają tendencję do oceniania innych czynników, takich jak wyższa wydajność, wyżej w swoich priorytetach w stosunku do zgodności ze standardami.
Standard ODBC ( Open Database Connectivity ) umożliwia dostęp do informacji z dowolnej aplikacji, niezależnie od systemu zarządzania bazą danych (DBMS), w którym informacje są przechowywane, tym samym oddzielając aplikację od bazy danych.
Zobacz także
Referencje
- ^ Paweł Ryan (24 października 2005). „Wycieczka z przewodnikiem po Microsoft Command Shell” . Ars Technica (w języku angielskim) . Źródło 4 sierpnia 2020 .
- ↑ Morteo, Bocalandro, Francisco, Mikołaj (2004). Praktyczne podejście do SQL . Edycje kooperacyjne. ISBN 987-1076-61-4 .
- ↑ EF Codd; Relacyjny model danych dla dużych wspólnych banków danych. Komunik. ACM, 13 (1970), s. 377-387.
- ↑ Eisenberg i in.: Opublikowano SQL:2003.
- Zatwierdzenie SQL 2008.
- ↑ Kapliczka, Mike. Podstawy SQL . W About.com, wyd. Bazy danych . Źródło 17 października 2015 .
- ^ ab Rockoff , Larry (2011). Technologia kursu/Cengage Learning, wyd. Język SQL .
- ↑ Morteo, Bocalandro., Francisco, Mikołaj (2004). Praktyczne podejście do SQL . Wydania spółdzielcze. ISBN 987-1076-61-4 .
- ↑ "O PostgreSQL" . Oficjalna strona PostgreSQL 9.1 . Globalna Grupa Rozwoju PostgreSQL. 2012 . Pobrano 8 czerwca 2016 . PostgreSQL szczyci się zgodnością ze standardami. Jego implementacja SQL jest ściśle zgodna ze standardem ANSI-SQL:2008.
- ^ „Podstawowe elementy Oracle SQL: typy danych” . Oracle Database SQL Language Reference 11g, wydanie 2 (11.2) . Biblioteka dokumentacji bazy danych Oracle. Redwood City, Kalifornia: Oracle USA, Inc. Pobrano 8 czerwca 2016 .