Bazy danych
Plan wykładu
Wprowadzenie
Język SQL
Język DDL
Język DML
Pokaz
Pytania
Wprowadzenie
SQL
ang. Structured Query Language
Pierwotnie był to język zapytań oparty na algebrze relacyjnej
Obecnie jest to interfejs do relacyjnych oraz nierelacyjnych baz danych
1
Wprowadzenie
SQL
Nie jest językiem programowania, jest to język zapytań
Deklarytywny: deklaruje się kryteria wyboru
Został ustandaryzowany (przez ANSI i ISO)
1986r. SQL-86 (SQL-1)
1992r. SQL-92 (SQL-2)
1999r. SQL-99 (SQL-3)
...
Został rozbudowany - powstały dialekty SQL-a
PL/SQL (Oracle)
Transact SQL (Microsoft)
Wprowadzenie
SQL obejmuje
Język definiowania danych
ang. Data Definition Language (DDL)
Język operowania danymi
ang. Data Manipulation Language (DML)
Język sterowania danymi
ang. Data Control Language (DCL) Wprowadzenie
DDL
Działania na tabelach
Utwórz tabelę - CREATE TABLE
Zmodyfikuj tabelę - ALTER TABLE
Usuń tabelę - DROP TABLE
Działania na indeksach
Utwórz indeks - CREATE INDEX
Usuń indeks - DROP INDEX
2
Wprowadzenie
DDL
Utwórz tabelę - CREATE TABLE
CREATE TABLE tabela
(kolumna typ [ograniczenia kolumny]) CREATE TABLE Studenci
(nazwisko varchar(20) not null); Wprowadzenie
DDL
Typy danych
Znakowe
CHARACTER (n), CHAR (n) –
łańcuch n-znakowy
o stałej długości
VARCHAR (n) –
łańcuch znaków o zmiennej
długości, nie większej niż n
LONG –
łańcuch o długości nie większej niż
2 GB
Wprowadzenie
DDL
Typy danych
Numeryczne
NUMERIC
DECIMAL, DEC
INTEGER, INT
SMALLINT
FLOAT
3
Wprowadzenie
DDL
Typy danych
Data i czas
DATE: rrrr-mm-dd
TIME: hh-mm-ss:ułamki
sek.
Inne typy
BIT(n) –
łańcuch n-bitów
BYTE –
łańcuch 8-bitów
BOOLEAN –
prawda/fałsz
...
Wprowadzenie
DDL
Ograniczenia kolumny
NOT NULL
DEFAULT wartość domyślna
UNIQUE
CONSTRAINT nazwa CHECK (warunek) CREATE TABLE Studenci
(nazwisko varchar(20) NOT NULL,
waga int CONSTRAINT minwaga CHECK (waga > 0)); Wprowadzenie
DDL
Zmodyfikuj tabelę – ALTER TABLE
ALTER TABLE tabela
ADD COLUMN kolumna typ
ALTER COLUMN kolumna typ
DROP COLUMN kolumna
Add – dodaj, Alter – zmodyfikuj, Drop - usuń 4
Wprowadzenie
DDL
Usuń tabelę – DROP TABLE
DROP TABLE tabela
Wprowadzenie
DDL
Utwórz indeks - CREATE INDEX
CREATE [UNIQUE] INDEX indeks
ON tabela (kolumna [ASC|DESC])
WITH {PRIMARY | DISALLOW NULL |
IGNORE NULL}
CREATE INDEX Index_NrStudenta
ON Studenci (IDStudenta DESC)
WITH PRIMARY;
Wprowadzenie
DDL
Usuń indeks – DROP INDEX
DROP INDEX indeks ON tabela
5
Wprowadzenie
DML
Wstaw wiersz(e) - INSERT INTO
Modyfikuj wiersz(e) - UPDATE
Usuń wiersz(e) - DELETE
Pobierz dane - SELECT
Wprowadzenie
DML
Wstaw wiersz(e) - INSERT INTO
INSERT INTO tabela [(<lista kolumn)]
VALUES (<lista wartości>)
INSERT INTO Studenci
VALUES (‘Dubno’, 1);
Wprowadzenie
DML
Modyfikuj wiersz(e) - UPDATE
UPDATE tabela
SET <kolumna> = wyrazenie
[WHERE <warunek>]
UPDATE Studenci SET Rok = Rok +1
WHERE nazwisko=‘Dubno’;
6
Wprowadzenie
DML
Usuń wiersz(e) - DELETE
DELETE FROM tabela
[WHERE <warunek>]
DELETE FROM Studenci
WHERE nazwisko=‘Dubno’;
Wprowadzenie
DML
Pobierz dane
Określimy interesujące nas kolumny
Projekcja (selekcja pionowa)
Określimy interesujące nas wiersze
Selekcja (selekcja pozioma)
Wykorzystamy instrukcję SELECT
Wprowadzenie
DML
SELECT <>
FROM <>
WHERE <>
GROUP BY <>
HAVING <>
ORDER BY <>
UNION ...
7
Wprowadzenie
DML
Pobierz dane
SELECT [A] {B [AS <nazwa>] | *}
FROM <element> [alias]
A – ALL | DISTINCT
B – kolumna | tabela.kolumna
SELECT S.Nazwisko AS Nazwisko
FROM Studenci S;
Wprowadzenie
DML
Pobierz dane
SELECT * FROM Studenci;
SELECT Nazwisko FROM Studenci;
SELECT Nazwisko, waga*2 FROM Studenci; SELECT Nazwisko, waga*2 AS ‘Waga’ FROM
Studenci;
SELECT DISTINCT Rok FROM Studenci; Wprowadzenie
DML
Pobierz dane
SELECT <>
FROM <>
WHERE <warunek>
Warunki
Proste i złożone (AND, OR)
Filtrujące i łączące
8
Wprowadzenie
DML
Fraza WHERE
SELECT <>
FROM <>
WHERE <warunek>
SELECT S.Nazwisko AS Nazwisko
FROM Studenci S
WHERE Rok < 3;
Wprowadzenie
DML
Fraza WHERE (warunki filtrujące)
<wyrazenie> <operator> <stala>
<wyrazenie> <operator> <wyrazenie>
<wyrazenie> [NOT] BETWEEN min AND max
<wyrazenie> [NOT] IN (<lista wartości>)
< wyrazenie> [NOT] LIKE <wzorzec> Wprowadzenie
DML
Fraza WHERE (warunki filtrujące) – cd.
<operator>
=, >, >=, <, <=, !=
<wzorzec>
_ - dowolny znak
% - dowolny ciąg znaków
9
Wprowadzenie
DML
Fraza WHERE (warunki łączące)
Studenci (nrs, imie, nazwisko, nrsekcjik) Sekcje (nrsekcji, nazwa, nrsk)
Projekty (nrp, nazwa, nrsk)
Zaliczenia (nrs, nrp, ocena)
SELECT imie, nazwisko, ocena
FROM Studenci, Zaliczenia
WHERE Studenci.nrs = Zaliczenia.nrs; Wprowadzenie
DML
Fraza WHERE (warunki łączące) – cd.
Studenci (nrs, imie, nazwisko, nrsekcjik) Sekcje (nrsekcji, nazwa, nrsk)
Projekty (nrp, nazwa, nrsk)
Zaliczenia (nrs, nrp, ocena)
SELECT S.imie, S.nazwisko, Z.ocena FROM Studenci S, Zaliczenia Z
WHERE S.nrs = Z.nrs;
Wprowadzenie
DML
Fraza WHERE (warunki łączące) – cd.
Studenci (nrs, imie, nazwisko, nrsekcji) Sekcje (nrsekcji, nazwa, nrsk)
Projekty (nrp, nazwa, nrsk)
Zaliczenia (nrs, nrp, ocena)
SELECT S.imie, S.nazwisko, Z.ocena FROM Studenci S, Zaliczenia Z
WHERE S.nrs = Z.nrs AND nrsekcji = 1
AND ocena > 4;
10
Wprowadzenie
DML
Fraza WHERE (warunki filtrujące z pytaniami zagnieżdzonymi)
SELECT <>
FROM <>
Pytanie zewnętrzne
WHERE <warunek>
(SELECT <>
FROM <>
Pytanie wewnętrzne
WHERE <>);
Wprowadzenie
DML
Fraza WHERE (warunki filtrujące z pytaniami zagnieżdzonymi) – cd.
<warunek>
<wyrazenie> <operator> SELECT imie, nazwisko FROM Studenci WHERE nrs =
(SELECT nrsk FROM Sekcje
WHERE nazwa = ‘Sekcja I’);
Wprowadzenie
DML
Fraza WHERE (warunki filtrujące z pytaniami zagnieżdzonymi) – cd.
<warunek>
<wyrazenie> <operator> {ANY | ALL}
SELECT nazwa FROM Projekty
WHERE nrp = any
(SELECT nrp FROM Zaliczenia);
11
Wprowadzenie
DML
Fraza WHERE (warunki filtrujące z pytaniami zagnieżdzonymi) – cd.
<warunek>
<wyrazenie> <operator> {ANY | ALL}
SELECT imie, nazwisko FROM Studenci S
WHERE 4.5 < all
(SELECT ocena FROM Zaliczenia Z
WHERE Z.nrs = S.nrs);
Wprowadzenie
DML
Fraza WHERE (warunki filtrujące z pytaniami zagnieżdzonymi) – cd.
<warunek>
<wyrazenie> <operator> [NOT] IN
SELECT nazwa FROM Projekty
WHERE nrp IN
(SELECT nrp FROM Zaliczenia);
Wprowadzenie
DML
Fraza GROUP BY
GROUP BY <lista kolumn>
SELECT nrsekcji, avg(ocena)
FROM Studenci S, Zaliczenia Z
WHERE S.nrs = Z.nrs
GROUP BY nrsekcji;
12
Wprowadzenie
DML
Funkcje agregujące
SUM (<argumenty>)
AVG (<argumenty>)
MAX (<argumenty>)
MIN (<argumenty>)
COUNT (<argumenty>)
<argumenty>
[ALL | DISTINCT] <wyrazenie> oraz COUNT (*)
Wprowadzenie
DML
Funkcje agregujące – cd.
SELECT count(*) FROM Studenci;
SELECT avg(ocena), min(ocena), max(ocena) FROM Zaliczenia;
SELECT nrs, nrp, ocena FROM Zaliczenia Z1
WHERE ocena =
(SELECT max(ocena) FROM Zaliczenia Z2
WHERE Z2.nrp = Z1.nrp);
Wprowadzenie
DML
Fraza HAVING (filtrowanie grup) HAVING <warunek>
SELECT nrsekcji, count(*)
FROM Studenci
GROUP BY nrsekcji
HAVING count(*) <2;
13
Wprowadzenie
DML
Fraza ORDER BY (porządkowanie wyników) ORDER BY {wyrazenie | <nr>} [ASC | DESC]
SELECT imie, nazwisko
FROM Studenci
ORDER BY nrsekcji, nazwisko;
Wprowadzenie
DML
Fraza UNION (suma zbiorów wierszy)
Fraza INTERSECT (przecięcie zbiorów wierszy)
Fraza MINUS (różnica zbiorów wierszy) SELECT <lista kolumn>
FROM <>
...
UNION
SELECT <lista kolumn>
FROM <>
...
Wprowadzenie
DML
Fraza UNION (suma zbiorów wierszy) SELECT nrsk
FROM Sekcje
UNION
SELECT nrsk
FROM Projekty;
14
Wprowadzenie
DML
Fraza INTERSECT (przecięcie zbiorów wierszy) SELECT nrsk
FROM Sekcje
INTERSECT
SELECT nrsk
FROM Projekty;
Wprowadzenie
DML w Microsoft ACCESS (?)
SELECT
SELECT ... INTO
INSERT ... INTO
UPDATE
DELETE
TRANSFORM
PARAMETERS
UNION
Kwerenda dołączająca
Kwerenda tworząca tabelę
Kwerenda wybierająca
Kwerenda aktualizująca
Kwerenda usuwająca
Kwerenda krzyżowa
Kwerenda składająca
Kwerenda parametryczna
Wprowadzenie
DML w Microsoft ACCESS (!)
SELECT
SELECT ... INTO
INSERT ... INTO
UPDATE
DELETE
TRANSFORM
PARAMETERS
UNION
Kwerenda wybierająca
Kwerenda tworząca tabelę
Kwerenda dołączająca
Kwerenda aktualizująca
Kwerenda usuwająca
Kwerenda krzyżowa
Kwerenda parametryczna
Kwerenda składająca
15
Pokaz
Praktyka
www.roz6.polsl.pl/bazydanych
Pytania
16
Dziękuję
17