13. Strukturalny język zapytań SQL - wprowadzenie

Język SQL (Structured Query Language) jest to uniwersalny język stosowany w systemach relacyjnych baz danych do komunikowania się z bazą. Jest on również podstawowym językiem programowania baz danych, pozwalającym na tworzenie i modyfikowanie obiektów bazy danych np. przykład tabel.

Język SQL jest językiem delkaratywnym. W językach deklaratywnych definiuje się warunki, jakie musi spełniać końcowy wynik, natomiast nie definiujemy się sposobu, w jaki ten wynik zostanie osiągnięty. W instrukcjach języka SQL nie znajdziemy informacji, w jaki sposób serwer bazodanowy powinien uzyskać wymagany wynik. Sposób wykonania instrukcji zależy od serwera baz danych i to zadaniem serwera jest znalezienie najlepszego sposobu osiągnięcia spodziewanego wyniku.

Język SQL realizuje trzy podstawowe typy zadań – definiowanie danych, manipulowanie danymi i kontrolowanie danych. W związku z tym jego instrukcje można podzielić na trzy kategorie:

    • Instrukcje DDL (Data Definition Language – język definicji danych)– tworzą język definiowania danych i służą do tworzenia, modyfikowania i usuwania obiektów bazy danych.
    • Instrukcje DML (Data Manipulation Language – język manipulacji danych) – tworzą język manipulowania danymi i służą do odczytywania i modyfikowania danych.
    • Instrukcje DCL (Data Control Language – język kontroli nad danymi) – tworzą język kontroli dostępu do danych i umożliwiają nadawanie i odbieranie uprawnień użytkownikom.

Niektóre źródła rozróżniają czwartą kategorię. Jest to DQL (Data Query Language – język definiowania zapytań). Do tej kategorii wchodzi jedno polecenie – SELECT. Często SELECT traktuje się jako część języka DML (Data Manipulation Language), ale to podejście nie wydaje się właściwe ponieważ DML z definicji słuzy do manipulowania danymi – ich tworzenia, usuwania i uaktualniania. Na pograniczu obu języków znajduje się polecenie SELECT INTO, które dodatkowo modyfikuje (przepisuje, tworzy) dane.

Język

Polecenia wchodzące w skład języka

DML

INSERT – umieszczanie danych w bazie

UPDATE – zmiana istniejących danych

DELETE – usuwanie danych z bazy

DDL

CREATE – utworzenie struktury (bazy danych, tabeli, indeksu)

DROP – usunięcie struktury

ALTER – zmiana struktury (dodanie kolumny, zmiana typu danych, zmiana nazwy kolumny)

DCL

GRANT – nadawanie uprawnień do pojedynczych obiektów lub globalnie konkretnemu użytkownikowi

REVOKE – odbieranie uprawnień

DENY – zabranianie wykonywania pewnych operacji

DQL

SELECT – pobieranie danych z bazy danych

Składnia języka jest zbiorem reguł, których należy przestrzegać. W języku SQL stosuje się trzy kategorie pojęć składniowych: identyfikatory, literały i operatory.

Identyfikator jednoznacznie definiuje obiekt bazy danych. Każdy obiekt bazy danych (baza, tabela, kolumna) musi posiadać niepowtarzalną nazwę w obrębie obiektu rodzica. Identyfikatory muszą być zgodne ze zdefiniowanymi w standardzie regułami:

    • nie mogą być dłuższe niż 128 znaków. Zaleca się używania krótkich nazw, ale muszą jednoznacznie opisywać obiekt
    • mogą zawierać litery, cyfry oraz znaki: @ $ #
    • nie mogą zawierać spacji ani innych znaków specjalnych
    • muszą zaczynać się literą
    • nie mogą być słowami kluczowymi języka SQL

Literał jest stałą wartością. Wszystkie wartości liczbowe, ciągi znaków i daty, jeżeli nie są identyfikatorami, są traktowane jako stałe, czyli literały

    • typy liczbowe moją dopuszczalną postać liczby, np.: 150, -375, 5.39, 3E4
    • ciągi znaków muszą być umieszczone w apostrofach: 'Gdańsk', 'Komputer'
    • typy daty muszą być umieszczone w apostrofach, na przykład: '20-09-2012', '2010-02-13'

Operatory odgrywają rolę łączników. Ze względu na zastosowanie zostały podzielone na:

    • arytmetyczne – suma ( + ), różnica ( - ), iloczyn ( * ), iloraz ( / ), modulo ( % ),
    • znakowe – konkatenacja (złączenie ciągu znaków) ( + ), symbol dowolny ciąg znaków ( % ), symbol zastępujący jeden znak ( _ )
    • logiczne – AND, OR, NOT
    • porównania – =, <, >, <=, >=, <>
    • operatory specjalne (zależą od systemu bazodanowego) IN, BETWEEN .. AND, LIKE