BazyDanych KM przeglad SQL v2

background image

1

Bazy danych

Wykład 5.

Język SQL - przegląd

Podstawy SQL

•Standardy SQL (ISO/ANSI)

– SQL1 (SQL 86)
– SQL2 (SQL92, SQL99)
– SQL3

•SQL – język deklaratywny, zorientowany na przetwarzanie

zbiorów

•Nie rozróżnia DUŻYCH i małych liter
•Nie są ważne białe znaki (spacje, tabulatory, koniec

wiersza, …)

•Instrukcja kończy się średnikiem

;

2013-01-10

Bazy danych / Krzysztof Molenda / WSEI w Krakowie

143

background image

2

Podział instrukcji języka SQL

DDL [ang. Data Definition Language] –

– instrukcje definiowania struktury danych:

•CREATE, DROP, ALTER

DML [ang. Data Manipulation Language] -

– instrukcje manipulacji na danych:

• SELECT, INSERT, DELETE, MERGE, UPDATE

DCL [ang. Data Control Language] -

– instrukcje kontroli dostępu do danych:

•GRANT, REVOKE, DENY, COMMIT, ROLLBACK

Instrukcje DDL

CREATE TABLE

-

utworzenie nowej tabeli

CREATE INDEX

-

utworzenie indeksu

CREATE VIEW

-

utworzenie perspektywy
(nazwanego zapytania)

ALTER TABLE

-

zmiana formatu tabeli
(dodanie, usunięcie, zmiana pól
tabeli)

DROP TABLE

-

usuniecie tabeli z bazy danych

DROP INDEX

-

usuniecie indeksu z bazy danych

DROP VIEW

-

usuniecie perspektywy

background image

3

Tworzenie tabel

CREATE TABLE

nazwa_tabeli

struktura_tabeli

nazwa_tabeli

= unikalna nazwa (identyfikator języka)

struktura_tabeli

= lista definicji atrybutów

• lista

= pozycje w nawiasach okrągłych, oddzielone przecinkami

• definicja atrybutu

=

– nazwa atrybutu
– typ pola, dziedzina
– ograniczenie integralnościowe (opcjonalnie  język integralności danych)
– opcjonalnie wartość domyślna (DEFAULT)

Przykład:

CREATE TABLE studenci (

nr_indeksu INT NOT NULL PRIMARY KEY,
imie VARCHAR(50),
nazwisko VARCHAR(50)

);

2013-01-10

Bazy danych / Krzysztof Molenda / WSEI w Krakowie

146

Typy danych

Typy danych (nazwy, znaczenie, liczba) zależą od implementacji DBMS.
Konieczne zapoznanie się z dokumentacją DBMS.
• Napisy

– CHAR(n), CHARACTER(n) – teksty o stałej długości n
– VARCHAR(n) – teksty o zmiennej długości nie przekraczającej n

• Liczby

– Całkowite: INT, INTEGER, SMALLINT, …
– Zmiennoprzecinkowe: REAL, DOUBLE PRECISION, NUMERIC(m, n),

DECIMAL(m, n)

• Data i czas

– DATE, TIME, TIMESTAMP, INTERVAL

• Ciągi binarne

– BIT(n), BIT VARYING(n), …

• Inne

– BLOB, TEXT, IMAGE, MONEY, …

• Można definiować własne typy danych
• Autoinkrementacja – typ całkowity z wymuszeniem/rejestrowaniem

jednoznacznej wartości dla wiersza tabeli

2013-01-10

Bazy danych / Krzysztof Molenda / WSEI w Krakowie

147

background image

4

Ograniczenia integralnościowe

Integralność

(spójność) danych – baza danych zawsze opisuje

rzeczywistość.

Więzy integralności

= warunki poprawności danych

– Więzy kluczy
– Więzy referencji
– Więzy dziedziny

Więzy klucza

– określają który atrybut (które atrybuty – w przypadku klucza

złożonego) są kluczem głównym,

– wymuszają unikalność wartości klucza,
– wymuszają brak wartości NULL w kluczu,
– pozwalają utworzyć indeks dla atrybutów klucza,

2013-01-10

Bazy danych / Krzysztof Molenda / WSEI w Krakowie

148

Ograniczenia integralnościowe (1)

Ograniczenia integralnościowe (użycie zależne od DBMS)

– PRIMARY KEY

– klucz podstawowy

– FOREIGN KEY

– klucz obcy

– NULL, NOT NULL

– wartość pusta/niepusta

– CHECK

– sprawdzenie wartości atrybutu

– UNIQUE

– wartość unikalna

Przykład:

CREATE TABLE studenci (

nr_indeksu INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
imie VARCHAR(50) CHECK (imie LIKE '[A-Z]%'),
nazwisko VARCHAR(50) NOT NULL CHECK (nazwisko LIKE '[A-Z]%'),
rodzaj VARCHAR(7) CHECK(rodzaj IN ('dzienny', 'zaoczny')) DEFAULT 'dzienny',
rok_studiow INT CHECK(rok_studiow>=1 AND rok_studiow<=5 ) DEFAULT 1

);

• Sprawdzenie, czy

imie

oraz

nazwisko

zaczynają się od dużej litery; czy

rok_studiow

jest liczbą z zakresu 1..5, …

• Do tak utworzonej tabeli nie można wstawić żadnej wartości, która nie spełnia

nałożonych przez CHECK ograniczeń

2013-01-10

Bazy danych / Krzysztof Molenda / WSEI w Krakowie

150

background image

5

Ograniczenia integralnościowe (2)

• Ograniczenia możemy nazywać i nimi możemy zarządzać
• Czasami musimy wprowadzać ograniczenia dopiero po utworzeniu tabeli

Przykład:

CREATE TABLE studenci (

nr_indeksu INT NOT,
imie VARCHAR(50) CHECK (imie LIKE '[A-Z]%'),
nazwisko VARCHAR(50) CHECK (nazwisko LIKE '[A-Z]%') NOT NULL,
rodzaj VARCHAR(7) CHECK(rodzaj IN ('dzienny', 'zaoczny')) DEFAULT 'dzienny',
rok_studiow INT CHECK(rok_studiow>=1 AND rok_studiow<=5 ) DEFAULT 1,
CONSTRAINT nr_indeksuPK PRIMARY KEY (nr_indeksu)

);
CREATE TABLE promotorzy (

id_promotora INT NOT NULL PRIMARY KEY AUTO_INCREMENT
nazwisko VARCHAR(50) NOT NULL

);
ALTER TABLE studenci

ADD CONSTRAINT opiekuje_sie FOREIGN KEY (id_promotora)
REFERENCES promotorzy(id_promotora);

2013-01-10

Bazy danych / Krzysztof Molenda / WSEI w Krakowie

151

Ograniczenia integralnościowe (3)

• Ważna kolejność wykonywania instrukcji
• CHECK może dotyczyć całej relacji

Przykład:

CREATE TABLE promotorzy (

id_promotora INT NOT NULL PRIMARY KEY AUTO_INCREMENT
nazwisko VARCHAR(50) NOT NULL

);
CREATE TABLE studenci (

nr_indeksu INT NOT PRIMARY KEY,
imie VARCHAR(50) CHECK (imie LIKE '[A-Z]%'),
nazwisko VARCHAR(50) CHECK (nazwisko LIKE '[A-Z]%') NOT NULL,
rodzaj VARCHAR(7) CHECK(rodzaj IN ('dzienny', 'zaoczny')) DEFAULT 'dzienny',
rok_studiow INT CHECK(rok_studiow>=1 AND rok_studiow<=5 ) DEFAULT 1,

id_promotora INT REFERENCES promotorzy(id_promotora),
data_przyjecia DATE NOT NULL,
data_odejscia DATE,
CHECK (data_przyjecia < data_odejscia)

);

2013-01-10

Bazy danych / Krzysztof Molenda / WSEI w Krakowie

152

background image

6

Modyfikacje tabeli

DROP TABLE

nazwa_tabeli

; – usuwanie relacji

– DROP TABLE studenci;

Uwaga: Należy uprzednio upewnić się, czy do tabeli nie ma referencji z
jakichś innych tabel – wówczas tabeli nie da się usunąć bez uprzedniego
usunięcia tamtych.

ALTER TABLE

nazwa_tabeli

specyfikacja_struktury

; - modyfikacja

struktury

– ALTER TABLE promotorzy ADD COLUMN imie VARCHAR(50);
– ALTER TABLE promotorzy ALTER COLUMN imie VARCHAR(30);
– ALTER TABLE promotorzy DROP COLUMN imie;
– ALTER TABLE studenci ADD CONSTRAINT zapisany_na … ;
– ALTER TABLE studenci DROP CONSTRAINT zapisany_na;

2013-01-10

Bazy danych / Krzysztof Molenda / WSEI w Krakowie

153

Instrukcje DML

SELECT

- wybieranie danych (zapytanie)

SELECT INTO

- zapisanie wyników zapytania do tablicy

INSERT INTO

- dodawanie rekordów do tablicy

UPDATE

- modyfikowanie danych

DELETE

- usunięcie danych

UNION

- suma tabel

INTERSECT

1)

- część wspólna tabel (iloczyn, przecięcie)

MINUS

1)

- różnica tabel

1)

nie wszędzie zaimplementowane

background image

7

Wprowadzanie danych do tabel

INSERT INTO

nazwa_tabeli [lista_atrybutów]

VALUES

lista_wartości ;

– lista

= pozycje w nawiasach okrągłych, oddzielone przecinkami

– lista atrybutów

– opcjonalnie

– lista wartości

– jeśli brak listy atrybutów kolejność zamieszczenia wartości istotna

– Jeśli brak wartości dla atrybutu wymaganego, to przyjmowana wartość DEFAULT
– Jeśli nie spełnione reguły integralnościowe, to dane nie są wprowadzone


Przykład:

INSERT INTO studenci (imie, nazwisko, rok_studiow) VALUES (‘Krzysztof’,

‘Molenda’, 2);

– wynik: dodano (21, ‘Krzysztof’, ‘Molenda’, ‘dzienny’, 2)

INSERT INTO studenci (imie, nazwisko) VALUES (‘Krzysztof’, ‘Molenda’);

– wynik: dodano (21, ‘Krzysztof’, ‘Molenda’, ‘dzienny’, 1)

INSERT INTO studenci VALUES (‘Krzysztof’, ‘Molenda’);

– wynik: dodano (21, ‘Krzysztof’, ‘Molenda’, ‘dzienny’, 1)

INSERT INTO studenci (imie, rok_studiow) VALUES (‘Krzysztof’, 2);

wynik: nie dodano

INSERT INTO absolwenci

SELECT imie, nazwisko FROM studenci WHERE data_odejscia IS NOT NULL;

2013-01-10

Bazy danych / Krzysztof Molenda / WSEI w Krakowie

155

Modyfikowanie i usuwanie danych

UPDATE

nazwa_tabeli

SET

nazwa_atrybutu

= nowa_wartość,

[

nazwa_atrybutu

= nowa_wartość, ...]

[WHERE

warunek

]


DELETE FROM

nazwa_tabeli

WHERE

kryteria

Przykład:

UPDATE studenci SET rok_studiow = rok_studiow + 1;
UPDATE studenci SET rok_studiow = -1 WHERE data_odejscia IS NOT NULL;

DELETE FROM studenci WHERE rok_studiow =-1;

2013-01-10

Bazy danych / Krzysztof Molenda / WSEI w Krakowie

156

background image

8

Wybieranie danych

– SELECT (1)

2013-01-10

Bazy danych / Krzysztof Molenda / WSEI w Krakowie

157

SELECT…

-

które pola

FROM

-

z której (których) tabeli (tabel)

WHERE...

-

jakie kryterium selekcji

GROUP BY... -

grupowanie

HAVING...

-

ograniczenie wybranych

rekordów w grupowaniu

ORDER BY... -

porządkowanie

klauzule – dodatkowe

określenie jak
wykonać zapytanie

Wybieranie danych

– SELECT (2)

SELECT {predykat}

[ * | tabela.* | {tabela.} pole1 {AS alias1}{,{tabela.}pole2 {AS alias2} {,...}}]

FROM

wyrażenie_tabelowe {, ...} {IN zewnętrzna_baza_danych}

{WHERE... }

{GROUP BY... }

{HAVING... }

{ORDER BY... }

Istotna jest kolejność słów kluczowych

Przykład:

SELECT * FROM studenci WHERE rok = 3 AND rodzaj= ‘zaoczny’;
SELECT * FROM studenci WHERE rok = 1 ORDER BY srednia DESC, nazwisko ASC;
SELECT DISTINCT rok_studiow AS rocznik FROM studenci;

• Gwiazdka * oznacza wszystko

2013-01-10

Bazy danych / Krzysztof Molenda / WSEI w Krakowie

158

background image

9

Nazwa zastępcza - ALIAS

ALIAS (synonim)

• Zastąpienie nazwy pola

• Zastąpienie nazwy tabeli

• Skrót upraszczający opis wyrażeń

SELECT nazwisko, imie,

wynagrodzenie AS pobory

FROM pracownicy

WHERE

pobory

> 3000;


SELECT nazwisko, imie

FROM

pracownicy AS pr

WHERE

pr.

pensja > 3000 AND

pr.

data<2-02-2000;

SELECT -

przykłady

• Stałe w zapytaniu:

– SELECT nazwisko, imie, 100, ‘lat’ FROM osoby

• Wyrażenia w zapytaniu

– SELECT towar, ilosc, cena AS netto, cena*1.22 AS brutto, ilosc*cena FROM

pozycje_faktury

• Konkatenacja (inne funkcje):

– SELECT nazwisko || ‘ ‘ || substr( imie, 1, 1 ) || ‘.’ FROM studenci

2013-01-10

Bazy danych / Krzysztof Molenda / WSEI w Krakowie

160

background image

10

FUNKCJE SQL

Funkcje SQL – zależne od implementacji DBMS
• Znakowe:

– lower, upper, lpad, rpad, substr, replace, length, instr, …

• Liczbowe:

– round, trunc, ceil, floor, sign, mod, abs

• Działające na datach:

– sysdate, trunc, next_day, last_day, months_between, …

• Konwersji:

– to_char(liczba|data[,’format’]), to_date(ciąg_znaków[,’format’]),

to_number

• Inne

2013-01-10

Bazy danych / Krzysztof Molenda / WSEI w Krakowie

161

Operatory SQL

• Operatory arytmetyczne:

– * / + - (priorytety)

• Operator konkatenacji: ||
• Operatory relacyjne

– <, <=, >, >=, <>

• Operatory logiczne

– AND, OR, NOT

• Operatory SQL

– IS NULL, IS NOT NULL
– BEETWEN … AND …
– IN (zbiór)
– LIKE

• % - wiele znaków
• _ - jeden znak

2013-01-10

Bazy danych / Krzysztof Molenda / WSEI w Krakowie

162

background image

11

SELECT Miesiąc, SUM(Dochód)

FROM Zestaw
GROUP BY Miesiąc;

Agregacja i grupowanie

Agregacja - wyznaczenie

jednej z następujących
wartości dla zbioru
rekordów: sumy, średniej,
maksimum, minimum

• Funkcje agregujące:

– SUM

- suma

– COUNT

- liczba elementów

w grupie

– AVG

– średnia

arytmetyczna

– MAX

- wartości maksymalna

– MIN

- wartość minimalnej

– FIRST

- pierwszy z grupy

– LAST

- ostatni z grupy



Miesiąc

Dochód

Razem

Styczeń

1000

7300

Styczeń

2300

Styczeń

4000

Luty

1000

2300

Luty

1300

Marzec

1450

3850

Marzec

2300

Marzec

100

Przykłady

2013-01-10

Bazy danych / Krzysztof Molenda / WSEI w Krakowie

164

SELECT nr_faktury, count(*)

FROM pozycje
GOUP BY nr_faktury

Zliczanie

SELECT nr_czytelnika, count(data_zwr)

FROM wypozyczenia
GROUP BY nr_czytelnika

Zliczanie liczby wierszy z wartością niepustą

SELECT avg(wzrost)

FROM dzieci

Zliczanie średniej atrybutu z wartością niepustą

background image

12

Klauzula HAVING

2013-01-10

Bazy danych / Krzysztof Molenda / WSEI w Krakowie

165

•Klauzula WHERE – dotyczy wierszy
•Klauzula HAVING – dotyczy grup

SELECT cust_name,

sum

(total-nvl(vat,0)) AS netto

FROM customers AS c, orders AS o
WHERE order_date < sysdate-14
AND o.cust_id = c.cust_id
GROUP BY cust_name

HAVING sum

(total)>100

ORDER BY 2;

SELECT a, b

FROM tabela2
WHERE w IN(
SELECT MAX(w) FROM tabela
);

Wykorzystanie wyniku jednego zapytania jako parametru drugiego
zapytania

Tabela

Wynik1

Wynik

Zapytanie1

Zapytanie2

Tabela2

parametr

Zapytania zagnieżdżone

background image

13

Perspektywy (ang. VIEW)

2013-01-10

Bazy danych / Krzysztof Molenda

167

Zapamiętanie zapytania pod określoną nazwą (synonim zapytania)

Ukrycie złożonego zapytania – ułatwienie dla użytkownika

Wspomagają realizację łańcucha zapytań

Tabela

Wynik pośredni

Wynik

Zapytanie1

Zapytanie2

Zdefiniowanie widoku (perspektywy):

CREATE VIEW

Wpływy_mies

AS

SELECT miesiąc, SUM(wpływ) AS sumaW
FROM operacje
GROUP BY Miesiąc;

Użycie widoku:

SELECT * FROM

Wpływy_mies

WHERE miesiąc<12;

Podzapytania

jednowartościowe i równoległe

2013-01-10

Bazy danych / Krzysztof Molenda

168

SELECT *

FROM dzieci
WHERE wiek > (SELECT avg(wiek) FROM dzieci)

SELECT *

FROM dzieci
WHERE
wiek > (SELECT avg(wiek) FROM dzieci)
AND
waga > (SELECT avg(waga) FROM dzieci)

background image

14

Zapytania z wielu tabel

2013-01-10

Bazy danych / Krzysztof Molenda

169

Zapytania z wielu tabel dają możliwość realizacji:

- iloczynu kartezjańskiego

- złączeń (naturalnych, theta)

SELECT * FROM Pracownik, Prezent;

- iloczyn kartezjański


SELECT * FROM Pracownik, Instytut

WHERE Pracownik.Inst=Instytut.ID;

- złączenie naturalne


SELECT * FROM Pracownik

INNER JOIN Instytut ON
Pracownik.Inst=Instytut.ID;

- złączenie naturalne

Złączenia opcjonalne

2013-01-10

Bazy danych / Krzysztof Molenda

170

•Wartość NULL – oznaczenie że rekord nie jest związany

•Wykorzystanie słów kluczowych RIGHT, LEFT JOIN

SELECT * FROM Pracownik, Instytut

WHERE
(Pracownik.Inst = Instytut.ID)
OR
(Pracownik.Inst IS NULL);

- złączenie opcjonalne


SELECT * FROM Pracownik

LEFT JOIN Instytut ON
Instytut.ID = Pracownik.Inst;

- złączenie opcjonalne

background image

15

Dopełnienie zapytania

2013-01-10

Bazy danych / Krzysztof Molenda

171

Wybranie wpływów, które nie są maksymalne

SELECT * FROM wpływy

WHERE kwota NOT IN
( SELECT MAX(kwota) FROM wpływy );

SELECT atrybuty FROM tabela

WHERE atrybut

NOT IN

(

Zapytanie1

);

Zastosowanie w rekurencji, polega na utworzeniu
synonimu tabeli:

Tabela:

Pracownik ( id, nazwisko, imie, id_kierownika )

– związek rekurencyjny przez pola id = id_kierownika


SELECT nazwisko, kierownik.nazwisko

FROM pracownik, pracownik AS kierownik
WHERE pracownik.id_kierownika = kierownik.id;

SELECT atrybuty

FROM tabela, tabela AS synonim_tabeli

...

Samozłączenie

background image

16

Operacje teoriomnogościowe - SUMA

2013-01-10

Bazy danych / Krzysztof Molenda

173

SELECT nr_czytelnika, nr_ksiazki, data_wyp, null

FROM wypozyczenia

UNION

SELECT nr_czytelnika, nr_ksiazki, data_wyp, data_zwr
FROM zwroty

UNION/ UNION ALL

INTERSECT

MINUS

Przykłady (różne)

2013-01-10

Bazy danych / Krzysztof Molenda

174

UPDATE pracownicy

SET premia = premia+100
WHERE placa = (SELECT MAX(placa) FROM pracownicy);

UPDATE pracownicy

SET (premia, urlop) =
(SELECT AVG(premia), AVG(urlop) FROM pracownicy)
WHERE dzial = 2;

DELETE FROM dzieci

WHERE wiek > (SELECT AVG(wiek) FROM dzieci);

INSERT INTO stare_wypozyczenia

SELECT * FROM wypozyczenia
WHERE data_zwr > ‘10.03.1988’;


Wyszukiwarka

Podobne podstrony:
BazyDanych KM wykłady Normalizacja 1 2x1
przeglad do 50 000 km
przeglad-do-50-000-km
10 sql przeglad
przeglad do 50 000 km
Przedmiot PRI i jego diagnoza przegląd koncepcji temperamentu
Wykład KM 4
Bliźniuk G , interoperacyjność przegląd, marzec 2008
transakcyjny SQL
06 podstawy SQL 3id 6524 ppt

więcej podobnych podstron