SQL/Zapytania SQL: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Gang65 (dyskusja | edycje)
Nie podano opisu zmian
Gang65 (dyskusja | edycje)
Nie podano opisu zmian
Linia 1:
 
 
== Składnia SQL ==
Użycie SQL, zgodnie z jego nazwą, polega na zadawaniu zapytań do bazy danych. Zapytania można zaliczyć do jednego z czterech głównych podzbiorów:
* '''SQL DML''' (ang. ''Data Manipulation Language'' – „język manipulacji danymi”),
* '''SQL DDL''' (ang. ''Data Definition Language'' – „język definicji danych”),
* '''SQL DCL''' (ang. ''Data Control Language'' – „język kontroli nad danymi”).
* '''SQL DQL''' (ang. ''Data Query Language'' – „język definiowania zapytań”).
 
Instrukcje SQL w obrębie zapytań tradycyjnie zapisywane są wielkimi literami, jednak nie jest to wymóg.
Każde zapytanie w SQL-u musi kończyć się znakiem średnika (;).
 
Dodatkowo, niektóre programy do łączenia się z silnikiem bazy danych (np. [[psql]] w przypadku PostgreSQL), używają swoich własnych instrukcji, spoza standardu SQL, które służą np. do połączenia się z bazą, wyświetlenia dokumentacji itp.
 
=== DML ===
DML (Data Manipulation Language) służy do wykonywania operacji na danych – do ich umieszczania w bazie, kasowania, przeglądania oraz dokonywania zmian. Najważniejsze polecenia z tego zbioru to:
* '''INSERT''' – umieszczenie danych w bazie,
* '''UPDATE''' – zmiana danych,
* '''DELETE''' – usunięcie danych z bazy.
 
Dane tekstowe muszą być zawsze ujęte w znaki pojedynczego cudzysłowu (').
 
=== DDL ===
Dzięki DDL (Data Definition Language) można operować na strukturach, w których dane są przechowywane – czyli np. dodawać, zmieniać i kasować tabele lub bazy. Najważniejsze polecenia tej grupy to:
 
* '''[[Create (SQL)|CREATE]]''' (np. CREATE TABLE, CREATE DATABASE, ...) – utworzenie struktury (bazy, tabeli, indeksu itp.),
* '''[[Drop (SQL)|DROP]]''' (np. DROP TABLE, DROP DATABASE, ...) – usunięcie struktury,
* '''[[Alter (SQL)|ALTER]]''' (np. ALTER TABLE ADD COLUMN ...) – zmiana struktury (dodanie kolumny do tabeli, zmiana typu danych w kolumnie tabeli).
 
=== DCL ===
DCL (Data Control Language) ma zastosowanie do nadawania uprawnień do obiektów bazodanowych. Najważniejsze polecenia w tej grupie to:
 
* '''[[GRANT (SQL)|GRANT]]''' - służące do nadawania uprawnień do pojedynczych obiektów lub globalnie konkretnemu użytkownikowi (np. GRANT ALL PRIVILEGES ON EMPLOYEE TO PIOTR WITH GRANT OPTION – przyznanie wszystkich praw do tabeli EMPLOYEE użytkownikowi PIOTR z opcją pozwalającą mu nadawać prawa do tej tabeli).
* '''[[REVOKE (SQL)|REVOKE]]''' – służące do odbierania wskazanych uprawnień konkretnemu użytkownikowi (np. REVOKE ALL PRIVILEGES ON EMPLOYEE FROM PIOTR - odebranie użytkownikowi wszystkich praw do tabeli EMPLOYEE).
* '''[[DENY (SQL)|DENY]]'''.
 
=== DQL ===
DQL (Data Query Language) to język formułowania zapytań do bazy danych. W zakres tego języka wchodzi jedno polecenie - SELECT. Często SELECT traktuje się jako część języka DML, ale to podejście nie wydaje się właściwe, ponieważ DML z definicji służy 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.
 
=== Przykładowe zapytania ===
Przykłady użycia wyżej wymienionych rodzajów zapytań:
<source lang="sql">
SELECT *
FROM pracownicy
WHERE pensja > 2000
ORDER BY staz DESC;
</source>
: Zwraca tabelę (listę) utworzoną ze wszystkich kolumn ('''*''') tabeli „pracownicy” ('''FROM pracownicy''') zawierającą pracowników, których pensja jest większa niż 2000 ('''WHERE pensja > 2000''') i sortuje wynik malejąco według parametru '''staz''' ('''ORDER BY staz DESC''').
 
<source lang="sql">
INSERT INTO pracownicy
(imie, nazwisko, pensja, staz)
VALUES
('Jan', 'Kowalski', 5500, 1);
</source>
: Dodaje do tabeli „pracownicy” ('''INTO pracownicy''') wiersz (rekord) zawierający dane pojedynczego pracownika.
 
<source lang="sql">
UPDATE pracownicy
SET pensja = pensja * 1.1
WHERE staz > 2;
</source>
: Podwyższa o 10% pensję ('''SET pensja = pensja * 1.1''') pracownikom, których staż jest większy niż 2 (np. lata).
 
<source lang="sql">
DELETE FROM pracownicy
WHERE imie = 'Jan' AND nazwisko = 'Kowalski';
</source>
: Usuwa z tabeli „pracownicy” wszystkie wiersze (rekordy) dotyczące pracownika o imieniu „Jan” i nazwisku „Kowalski” (czyli takie, w których pole "imię" ma wartość '''Jan''', a pole "nazwisko" – '''Kowalski''').
 
<source lang="sql">
CREATE TABLE pracownicy
(
imie varchar(255),
nazwisko varchar(255),
pensja float,
staz int
);
</source>
: Tworzy tabelę „pracownicy” zawierającą pola tekstowe zmiennej długości (varchar) o nazwach „imie” (imię) i „nazwisko”, o maksymalnej długości 255 znaków, zapisaną za pomocą [[liczby rzeczywiste]]j (float od ang. '''floating point''') pensję oraz zapisany za pomocą [[liczby całkowite]]j (int od ang. '''integer''') staż.
 
<source lang="sql">
DROP TABLE pracownicy;
</source>
: Usuwa z bazy tabelę „pracownicy”.
 
<source lang="sql">
ALTER TABLE pracownicy
ADD dzial varchar(255);
</source>
: Dodaje do struktury tabeli „pracownicy” kolumnę „dzial” (dział), jako pole tekstowe o długości maks. 255 bajtów.
 
 
==Zapytania SQL==
Do pobierania danych z tabel w języku SQL używamy polecenia SELECT.