close

SQL

Przejdź do nawigacji Przejdź do wyszukiwania
SQL
Ikona skrótu do bazy danych SQL.png
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 TAk 

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:

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

  1. ^ 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 . 
  2. Morteo, Bocalandro, Francisco, Mikołaj (2004). Praktyczne podejście do SQL . Edycje kooperacyjne. ISBN  987-1076-61-4 . 
  3. EF Codd; Relacyjny model danych dla dużych wspólnych banków danych. Komunik. ACM, 13 (1970), s. 377-387.
  4. Eisenberg i in.: Opublikowano SQL:2003.
  5. Zatwierdzenie SQL 2008.
  6. Kapliczka, Mike. Podstawy SQL . W About.com, wyd. Bazy danych . Źródło 17 października 2015 . 
  7. ^ ab Rockoff , Larry (2011). Technologia kursu/Cengage Learning, wyd. Język SQL . 
  8. Morteo, Bocalandro., Francisco, Mikołaj (2004). Praktyczne podejście do SQL . Wydania spółdzielcze. ISBN  987-1076-61-4 . 
  9. "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. 
  10. ^ „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 .