Relacyjne bazy danych
Podstawy SQL
J
ę
zyk SQL
SQL
(
S
tructured
Q
uery
L
anguage)
–
j
ę
zyk umo
ż
liwiaj
ą
cy
dost
ę
p i przetwarzanie danych w bazie danych na poziomie
obiektów modelu relacyjnego tj. tabel i perspektyw.
Po co si
ę
uczy
ć
?
SQL umo
ż
liwia odczyt informacji z ka
ż
dej relacyjnej bazy
danych
zrozumienie mechanizmów rz
ą
dz
ą
cych graficznymi
interfejsami u
ż
ytkownika
mo
ż
liwo
ść
tworzenia zło
ż
onych zapyta
ń
wiedza przydatna na wielu platformach sprz
ę
towych
Funkcje realizowane przez SQL
definicja struktury bazy danych
odczyt danych
modyfikacja danych
kontrola dost
ę
pu
współu
ż
ytkowanie danych
współu
ż
ytkowanie danych
integralno
ść
danych
Mo
ż
na u
ż
ywa
ć
go jako:
element aplikacji i narz
ę
dzi programowych
interakcyjny j
ę
zyk zapyta
ń
j
ę
zyk komunikacji pomi
ę
dzy ró
ż
nymi SZRBD
Składnia SQL - SELECT
SELECT
FROM
nazwa kolumny
nazwa tabeli
WHERE
GROUP BY
warunek wyszukiwania
nazwa kolumny
Składnia SQL - SELECT
SELECT
FROM
nazwa kolumny
nazwa tabeli
Przykłady:
Przykłady:
SELECT
nazwisko
FROM
TSedziowie;
SELECT
nazwa, id
FROM
TKluby
;
SELECT
gol1, gol2, gol3, gol4
FROM
TMecze
;
SELECT
*
FROM
TKluby;
SELECT – eliminowanie duplikatów
SELECT
FROM
nazwa tabeli
nazwa kolumny
DISTINCT
Przykłady:
Przykłady:
SELECT
DISTINCT
kolejka
FROM
TMecze
;
Sortowanie rekordów
SELECT
FROM
nazwa tabeli
nazwa kolumny
ORDER BY
nazwa kolumny
ASC
DESC
Przykłady:
SELECT
imie, nazwisko
FROM
TSedziowie
ORDER BY
nazwisko, imie
ASC
;
SELECT
imie, nazwisko
FROM
TSedziowie
ORDER BY
nazwisko, imie
DESC
;
SELECT
imie, nazwisko
FROM
TSedziowie
ORDER BY
nazwisko
ASC
, imie
DESC
;
SELECT
DISTINCT
kolejka
FROM
TMecze
ORDER BY
kolejka
DESC
;
Proste wyra
ż
enia
Mo
ż
na u
ż
ywa
ć
operatorów do wykonywania działa
ń
na polach, np.
+, -, *, /,
Przykłady:
SELECT
domin-odmin
FROM
tsklady
;
Nadawanie nazw
SELECT
AS
nazwa kolumny - nowa
wyrażenie
Przykłady:
SELECT
domin-odmin
AS
CzasGryPiłkarza
FROM
tsklady;
SELECT
domin-odmin
AS
CzasGryPiłkarza
FROM
tsklady;
SELECT
m.id, k1.nazwa, k2.nazwa
FROM
TMecze
AS
m, TKluby
AS
k1, TKLuby
AS
k2
;
Filtrowanie danych
Przykłady:
SELECT
FROM
nazwa tabeli
wyrażenie
WHERE
warunek wyszukiwania
AS
alias
DISTINCT
Przykłady:
SELECT
*
FROM
tKartkiGole
WHERE
rodzaj =
"
K
";
SELECT
imie, nazwisko
FROM
TPilkarze
WHERE
klubid = 3;;
SELECT
nazwa
FROM
TKluby
WHERE
id = 999
SELECT
p.imie, p.nazwisko, k.nazwa
FROM
TPilkarze as p,
TKluby as k
WHERE
p.klubid = k.id
AND
k.id = 4
ORDER BY
p.nazwisko;
Filtrowanie danych – warunki wyszukiwania
Podstawowe warunki:
porównanie (operatory: =, <>, <, >, <=, >=)
zakres (BETWEEN … AND …)
wyst
ę
powanie (IN)
wzór (LIKE)
* - zast
ę
puje dowolny ci
ą
g znaków
? - zast
ę
puje pojedynczy znak
puste warto
ś
ci (IS NULL)
istnienie (EXISTS)
Filtrowanie danych – warunki wyszukiwania
Przykłady:
SELECT
*
FROM
tsedziowie
WHERE
miasto <> "Warszawa";
SELECT
*
FROM
tmecze
WHERE
kiedy
BETWEEN
#
2003-08-16
#
AND
#
2003-09-13
#;
AND
#
2003-09-13
#;
SELECT
*
FROM
tmecze
WHERE
kolejka
IN
("2", "3", "5")
;
SELECT
*
FROM
tsedziowie
WHERE
miasto
IS NULL;
SELECT
imie, nazwisko
FROM
tsedziowie
WHERE
nazwisko
LIKE
"G*";
Filtrowanie danych – ł
ą
czenie predykatów
Warunki zło
ż
one buduje si
ę
przy pomocy operatorów
logicznych
AND
,
OR
,
NOT
Przykłady:
Przykłady:
SELECT
p.imie, p.nazwisko, k.nazwa
FROM
TPilkarze as p,
TKluby as k
WHERE
p.klubid = k.id
AND
k.id = 4
ORDER BY
p.nazwisko;
SELECT
id
FROM
TMecze
WHERE
gospodarz = 5
OR
przeciwnik
= 5
;
Proste funkcje agregujące
SELECT
wyrażenie
AS
alias
COUNT (*)
COUNT
SUM
AVG
FROM
nazwa tabeli
WHERE
warunek wyszukiwania
AVG
MIN
MAX
Przykłady:
SELECT
SUM
(widownia)
FROM
Tmecze
;
SELECT
SUM
(gol1) +
SUM
(gol2)
FROM
TMecze
;
Proste funkcje agregujące
SELECT
COUNT(*)
FROM
TPilkarze, TKluby
;
SELECT
COUNT(*)
FROM
tKartkiGole
WHERE
rodzaj =
"
S
";
SELECT
COUNT(*)
as ilegoli
FROM
tKartkiGole
WHERE
rodzaj =
"
N
"
OR
rodzaj =
"
K
"
OR
rodzaj =
"
S
";
Zapytania wielotabelowe
Wa
ż
ne:
nale
ż
y poda
ć
wszystkie nazwy tablic w klazuzuli FROM
w celu unikni
ę
cia niejednoznaczno
ś
ci nale
ż
y stosowa
ć
nazwy
kwalifikowane pól (poprzedzone nazw
ą
tabeli lub alias)
we frazie WHERE nale
ż
y umie
ś
ci
ć
warunek wi
ążą
cy zbiory
Nazwa kwalifikowana:
np. GoleKartki.rodzaj, TKluby.nazwa
Alias tablicy umieszcza si
ę
we frazie FROM np.
FROM
TMecze
AS
m, TKluby
AS
k1, TKLuby
AS
k2
Zapytanie
SELECT
imie, nazwisko, nazwa
FROM
TPilkarze, TKluby
zwraca wszystkie możliwe kombinacje rekordów tabel TPilkarze,
TKluby w ilości:
Zapytania wielotabelowe - przykłady
TKluby w ilości:
SELECT
COUNT
(*)
FROM
TPilkarze, TKluby
czyli iloczyn:
SELECT
COUNT
(*)
FROM
TPilkarze
SELECT
COUNT
(*)
FROM
TKluby
Zapytania wielotabelowe - przykłady
SELECT
COUNT
(*) as liczbapilkarzy
FROM
TPilkarze
AS
p,
TKluby
AS
k
WHERE
p.klubid = k.id
AND
k.id = 4
SELECT
p.imie, p.nazwisko, k.nazwa
FROM
TPilkarze
AS
p,
TKluby
AS
k
WHERE
p.klubid = k.id
AND
p.id = 179
TKluby
AS
k
WHERE
p.klubid = k.id
AND
p.id = 179
SELECT
k1.nazwa, k2.nazwa, m.id
FROM
TKluby
AS
k1,
TKluby
AS
k2, TMecze
AS
m
WHERE
m.id = 5
AND
k1.id
= m.gospodarz
AND
k2.id = m.przeciwnik
Klauzula JOIN
Klazula
JOIN
pozwala łączyć ze sobą kilka tabel
SELECT
FROM
nazwa tabeli
nazwa kolumny
JOIN
ON
nazwa tabeli
warunek wyszukiwania
Klazula
JOIN
pozwala łączyć ze sobą kilka tabel
wykorzystując do tego klucze główne i obce.
Dotyczy tylko tych wierszy, które mają swoje odpowiedniki
w tabeli komplementarnej.
Klauzula INNER JOIN - przykłady
SELECT
COUNT
(*) as liczbapilkarzy
FROM
TPilkarze
AS
p
INNER JOIN
TKluby
AS
k
ON
p.klubid = k.id
AND
k.id =
4
;
SELECT
p.imie, p.nazwisko, k.nazwa
FROM
TPilkarze
AS
p
INNER JOIN
TKluby
AS
k
ON
p.klubid = k.id
AND
p.id =
INNER JOIN
TKluby
AS
k
ON
p.klubid = k.id
AND
p.id =
179;
SELECT
imie, nazwisko, nazwa
FROM
TPilkarze
INNER JOIN
TKluby
ON
TPilkarze.klubid = TKluby.id
AND
TPilkarze.id
= 179
Klauzula GROUP BY
SELECT
FROM
nazwa tabeli
nazwa kolumny
WHERE
warunek wyszukiwania
GROUP BY
nazwa kolumny
Przykłady:
liczba goli i kartek zdobytych przez każdego z piłkarzy
liczba goli i kartek zdobytych przez każdego z piłkarzy
SELECT
pilkarzid,
COUNT
(*)
AS
ile
FROM
tKartkiGole
GROUP
BY
pilkarzid
ORDER BY
ile
DESC
liczba goli zdobyta przez każdego z piłkarzy
SELECT
pilkarzid,
COUNT
(*)
AS
ile
FROM
tKartkiGole
WHERE
(rodzaj = "N"
OR
rodzaj = "K")
GROUP BY
pilkarzid
ORDER BY
ile
DESC
Klauzula GROUP BY - c.d.
Co z nazwiskami piłkarzy, jak je uzyskać?
SELECT
p.imie, p.nazwisko, pilkarzid,
COUNT
(*)
AS
ile
FROM
tKartkiGole, TPilkarze
AS
p
WHERE
WHERE
(rodzaj = "N"
OR
rodzaj = "K")
AND
p.id = pilkarzid
GROUP BY
pilkarzid
ORDER BY
ile
DESC;
Klauzula GROUP BY – c. d.
Jak uzyskać listę strzelców z danego klubu?
SELECT
p.imie, p.nazwisko, kl.nazwa,
COUNT
(*)
AS
ile
FROM
tKartkiGole
AS
gol, TPilkarze
AS
p, TKluby
AS
kl
WHERE
WHERE
gol.rodzaj =
"
N
"
AND
p.id = gol.pilkarzid
AND
kl.id = gol.klubid
AND
kl.id = 2
GROUP BY
gol.pilkarzid
ORDER BY
ile
DESC
;
Ograniczenie liczby rekordów - LIMIT
Klauzula LIMIT ogranicza liczbę jednocześnie wyświetlanych
rekordów
SELECT
*
FROM
"tmecze"
LIMIT
15
zwraca 15 pierwszych rekordów
zwraca 15 pierwszych rekordów
SELECT
*
FROM
"tsklady"
LIMIT
105, 15
zwraca 15 kolejnych rekordów pomijając pierwsze 105
Instrukcje modyfikacji tablic
INSERT – pozwala dopisywać nowe wiersze do
tablicy
UPDATE - pozwala modyfikować istniejące dane
DELETE – pozwala usunąć wiersze z tablicy
Instrukcja INSERT
INSERT
nazwa tabeli,
ew. nazwy kolumn
VALUES
wartości
INTO
Przykłady:
INSERT
INTO
tKartkiGole
VALUES
( "1", "1", "266", "7",
"28", "K");
INSERT
INTO
TPilkarze
VALUES
( "114", "Piotr",
"Soczewka", "2");
INSERT
INTO
TPilkarze (id, imie, nazwisko)
VALUES
(
"350", "Grzegorz", "Kowalski");
Instrukcja UPDATE
UPDATE
nazwa tabeli
WHERE
wartości
SET
warunek
wyszukiwania
SET – podaje nazwy kolumn i przypisane im nowe wartości
WHERE – określa, które rekordy mają być modyfikowane
Przykłady:
UPDATE
TPilkarze
SET
nazwisko = "Gruszka"
WHERE
id
= 114;
UPDATE
TPilkarze
SET
imie = "Jan", nazwisko =
"Gruszka"
WHERE
id = 114;
Instrukcja DELETE
DELETE
nazwa tabeli
WHERE
warunek
wyszukiwania
FROM
Przykłady:
DELETE FROM
TPilkarze
WHERE
id = 350;
DELETE FROM
TPilkarze
WHERE
klubid
IN
(
SELECT
id
FROM
tkluby
WHERE
nazwa
LIKE
"
*
Warszawa
*
");
Tworzenie tabel
CREATE
nazwa tabeli
WHERE
nazwa kolumny=typ
TABLE
Przykłady:
CREATE TABLE
TPilkarze (
id int(11) NOT NULL auto_increment,
imie varchar(75) NOT NULL,
nazwisko varchar(75) NOT NULL,
klubid int(11),
PRIMARY KEY (id),
UNIQUE id_2 (id),
KEY id (id, imie, nazwisko, klubid)
);
Usuwanie tabel
DROP
nazwa tabeli
TABLE
Przykłady:
DROP TABLE
TPilkarze;
DROP TABLE
TMecze;
DROP TABLE
tKartkiGole;
Klauzula UNION
Klauzula
UNION
– służy do łączenia rezultatów dwóch lub
więcej instrukcji SELECT w jedną tablicę
Łączone instrukcje SELECT muszą spełniać określone
warunki:
muszą zawierać tę samą liczbe kolumn
muszą zawierać tę samą liczbe kolumn
odpowiednie kolumny ze wszystkich instrukcji SELECT
muszą mieć zgodne typy
klauzula ORDER BY może wystąpić tylko w ostatniej
instrukcji SELECT
Klauzula UNION
SELECT
*
FROM
tKartkiGole
WHERE
rodzaj = "N"
UNION
UNION
SELECT
*
FROM
tKartkiGole
WHERE
rodzaj = "S"
;