A�wiczenie 1

Relacyjne bazy danych

Relacyjna baza danych jest to zbiA?r dwuwymiarowych tabel. Z modelem relacyjnym powiA�zane sA� nastA�pujA�ce pojA�cia:

  • tabela,
  • kolumna,
  • wiersz,
  • pole.

Model relacyjny opiera siA� na pojA�ciach zaczerpniA�tych z algebry. PojA�cia te to:

  • relacja,
  • operator dziaA�ajA�cy na relacjach i dajA�cy w wyniku relacje.

Relacje przedstawiane sA� w postaci tabel, zaA� wybieranie danych z tabel to wynik dziaA�ania operatorA?w relacyjnych na tych tabelach.

Relacyjna baza danych ma nastA�pujA�ce wA�asnoA�ci:

  • baza jest widziana przez uA?ytkownika jako zbiA?r tabel,
  • nazwy tabel w bazie muszA� byA� unikalne,
  • tabele skA�adajA� siA� wierszy i kolumn,
  • jA�zykiem sA�uA?A�cym do operowania na bazie danych jest jA�zyk nieproceduralny oparty na algebrze relacji.

SQL

Podstawowe polecenie do pobierania danych z bazy

SELECT

SkA�adnia podstawowa tego polecenia to

SELECT kolumna_1, kolumna_2, ... kolumna_n FROM Tabela

Opcjonalnie w celu pobrania zawartoA�ci wszystkich kolumn moA?na stosowaA�

SELECT * FROM Tabela

PrzykA�ad

SELECT * FROM osoba
SELECT nazwisko FROM osoba
SELECT imie, nazwisko FROM osoba

Eliminacja wierszy powtarzajA�cych siA�

DISTINCT
SELECT DISTINCT nazwisko FROM osoba

W klauzuli SELECT mogA� teA? byA� uA?yte:

  • wyraA?enia arytmetyczne,
  • aliasy (nazwy zastA�pcze) kolumn,
  • konkatenacja
  • literaA�y.

WyraA?enia arytmetyczne

W wyraA?eniu arytmetycznym mogA� wystA�powaA� nazwy kolumn, staA�e wartoA�ci liczbowe oraz operatory arytmetyczne:

+ dodawanie

odejmowanie

* mnoA?enie

/ dzielenie

% modulo

SELECT pensja/10000 FROM zatrudnienie
SELECT pensja/pensja FROM zatrudnienie

Aliasy kolumn

DomyA�lne nagA�A?wki kolumn moA?emy zastA�piA� innymi nazwami, ktA?re bA�dA� bardziej znaczA�ce.

SELECT pensja-(pensja*0.4) AS "zostaA�o po podatku" FROM zatrudnienie

Operator konkatenacji (A�A�czenia) i LiteraA�y

Operator konkatenacji + pozwala na A�A�czenie kolumny z kolumnA�, literaA�em, wyraA?eniem arytmetycznym lub wartoA�ciA� staA�A�. Argumenty sA� A�A�czone i tworzA� jedna kolumnA� wynikowA�.

SELECT 'imiA� ' + imie + ' Nzawisko ' + nazwisko AS ":)" FROM osoba

Sortowanie

Dane zwracane przez zapytanie moA?emy sortowaA� wedA�ug wybranej przez nas kolumny rosnA�co lub malejA�co.

ORDER BY kolumna [DESC lub ASC] A� Sortowanie

DESC A� malejA�co

ASC – rosnA�co

PrzykA�ad

SELECT osoba.imie, osoba.nazwisko FROM osoba ORDER BY osoba.imie
  • domyA�lne sortowanie jest ASC
SELECT osoba.imie, osoba.nazwisko FROM osoba ORDER BY osoba.imie ASC, osoba.nazwisko DESC
  • sortowanie po dwA?ch kolumnach jednoczeA�nie

Klauzula WHERE

Klauzula WHERE odpowiada operacji selekcji.

Klauzula ta specyfikuje kryteria doboru wierszy. Klauzula WHERE, o ile jest, musi wystA�powaA� bezpoA�rednio po klauzuli FROM.

Operatory w klauzuli WHERE mogA� byA� dwojakiego rodzaju:

  • operatory logiczne,
  • operatory SQL.

PrzykA�ad

SELECT imie, nazwisko FROM osoba WHERE imie='Adam'

Zadanie

wybraA� wiersze z tabeli osoby z osobami o imieniu Izaak

Warunki logiczne po sA�owie kluczowym WHERE moA?na A�A�czyA� za pomA�cA� operatorA?w logicznych

  • AND
  • OR

PrzykA�ad

SELECT imie, nazwisko FROM osoba WHERE imie='Adam' OR imie='Izaak'

Zadanie

wybraA� z tabeli osoby o imieniu Helena i Jacek

Poza operatorem porA?wnania A� = A� moA?emy uA?ywaA� operatorA?w porA?wnania

> – wiA�kszy

>= – wiA�kszy rA?wny

< – mniejszy

<= – mniejszy rA?wny

<> – rA?A?ne

= – rA?wne

PrzykA�ad

SELECT nr_osoby, imie, nazwisko FROM osoba WHERE nr_osoby>500

kolumna na, ktA?rej dokonujemy selekcji nie musi byA� zwracana przez SELECTA

PrzykA�ad

SELECT imie, nazwisko FROM osoba WHERE nr_osoby>500

Rozszerzenie moA?liwoA�ci WHERE

BETWEEN A� pomiA�dzy

SELECT imie, nazwisko FROM osoba WHERE nr_osoby BETWEEN 100 and 300

IN A� w liA�cie

SELECT imie, nazwisko FROM osoba WHERE nr_osoby IN (100, 300, 400, 500)

LIKE A� podobny do

NOT LIKE A� niepodobny do

z operatorem LIKE wystA�pujA� znaki specjalne pozwalajA�ce zastA�piA� poszczegA?lne litery lub ciA�gi znakA?w

% – zastA�puje dowolny ciA�g znakA?w

PrzykA�ad

SELECT imie, nazwisko FROM osoba WHERE imie LIKE 'A%'

zwrA?ci wszystkie osoby o imieniu rozpoczynajA�cym siA� od litery A

SELECT imie, nazwisko FROM osoba WHERE imie LIKE '%a%'

zwrA?ci wszystkie osoby o imieniu zawierajA�cym literA� a

SELECT imie, nazwisko FROM osoba WHERE imie NOT LIKE '%a%'

zwrA?ci wszystkie osoby ktA?rych imiA� nie zawiera litery a

_ – zastA�puje pojedynczy znak

PrzykA�ad

SELECT imie, nazwisko FROM osoba WHERE imie LIKE 'Ada_'

[b-d] lub [bcd] A�znaki z przedziaA�u

PrzykA�ad

SELECT imie, nazwisko FROM osoba WHERE imie LIKE '[b-g]%'

zwrA?ci wszystkie osoby o imieniu rozpoczynajA�cym siA� literami z przedziaA�u od b do g

[^a] – nie zawierajA�cy znakA?w lub przedziaA�u

PrzykA�ad

SELECT imie, nazwisko FROM osoba WHERE imie LIKE '[^b-g]%'

poszukiwanie znaki specjalne umieszczamy wewnA�trz nawiasA?w []

[_] – poszukiwana spacja dolna

[%] – poszukiwany procent

[[] – poszukiwane otwarcie nawiasu

Zadania

Baza WSTEP

wstep

  1. WybraA� z tabeli A�osobaA� o numerach mniejszych od 200
  2. WybraA� osoby o numerach mniejszych od 200 i wiA�kszych od 500 z tabeli A�osobaA�
  3. WybraA� osoby z przedziaA�u 201 do 499 z tabeli A�osobaA�
  4. WybraA� osoby o numerach 152, 163,203,444,600 z tabeli A�osobaA�
  5. WybraA� niepowtarzajA�ce siA� imiona osA?b z tabeli A�osobaA�
  6. WybraA� niepowtarzajA�ce siA� imiona posortowane w odwrotnej kolejnoA�ci (od z do a)
  7. WybraA� z tabeli A�osobaA� osoby o nr_osoby mniejszy od nr_powiatu
  8. WybraA� z tabeli A�zatrudnienieA� pensje pomniejszonA� o skA�adkA� na ubezpieczenie zdrowotne (8,5 %)
  9. WybraA� nazwy wszystkich dziaA�A?w z opisem z tabeli A�dzialA�
  10. WybraA� nazwy wszystkich stanowisk z opisem z tabeli A�stanowiskaA�
  11. WybraA� nazwy powiatA?w z tabeli A�powiatA� ktA?rych nr_powiatu jest z przedziaA�u 101 200
  12. WybraA� wszystkie nazwy wojewA?dztw z tabeli A�wojewodztwoA�
  13. WybraA� osoby o imieniu rozpoczynajA�cym siA� literA� H
  14. WybraA� osoby ktA?rych imiA� nie zawiera liter g, k, l
  15. WybraA� osoby ktA?rych nazwiska zawierajA� litery z przedziaA�u r-z
  16. WybraA� osoby ktA?rych nazwiska nie zawierajA� liter n, j, e
  17. WybraA� osoby o imieniu rozpoczynajA�cym siA� literA� A�rA� z numerami powyA?ej 300
  18. WybraA� osoby ktA?rych imiA� nie zawiera liter p, r,s a nazwisko zawiera literA� a
  19. WybraA� osoby ktA?rych nazwiska zawierajA� litery z przedziaA�u k-z i numerze osoby z przedziaA�u 200-400
  20. WybraA� osoby ktA?rych nazwiska nie zawierajA� liter n, j, e a imiona nie rozpoczynajA� siA� literA� p
  21. WybraA� osoby z 5-cio literowymi imionami.