background image

Laboratorium 

 

Informatyka II: Bazy danych

 

 

 

- 1 - 

 

1.  Tworzenie i usuwanie tabeli 

CREATE TABLE klient 

  klient_id serial NOT NULL, 
  imie character varying(16) NOT NULL, 
  nazwisko character varying(32) NOT NULL, 
  CONSTRAINT klient_pk PRIMARY KEY (klient_id) 
); 
 

 

 
CREATE TABLE zamowienie 

  zamowienie_id serial NOT NULL, 
  klient_id integer NOT NULL, 
  data date NOT NULL, 
  kwota numeric(9,2) NOT NULL, 
  CONSTRAINT zamowienie_pk PRIMARY KEY (zamowienie_id) 
); 
 

 

 
DROP TABLE klient; 
 

2.  Modyfikacja tabeli 

 

CREATE TABLE klient  

  klient_id serial NOT NULL, 
  imie character varying(16) NOT NULL 
  ); 
 

 

2.1. Dodanie kolumny 

ALTER TABLE klient ADD COLUMN kod char(5); 
 

2.2. Zmiana nazwy kolumny 

ALTER TABLE klient RENAME COLUMN kod TO kod_pocztowy; 

 

2.3. Zmiana typu kolumny 

ALTER TABLE klient ALTER COLUMN kod_pocztowy TYPE char(6); 

background image

Laboratorium 

 

Informatyka II: Bazy danych

 

 

 

- 2 - 

 

 

 

 

2.4. Ustawienie wartości domyślnej kolumny 

ALTER TABLE klient ALTER COLUMN kod_pocztowy SET DEFAULT '00000'; 
 

2.5. Usunięcie wartości domyślnej dla kolumny 

ALTER TABLE klient ALTER COLUMN kod_pocztowy DROP DEFAULT; 
 

2.6. Dodanie klucza głównego tabeli 

ALTER TABLE klient ADD CONSTRAINT klient_pk PRIMARY KEY (klient_id); 
 

 

 

2.7. Dodanie klucza obcego tabeli 

ALTER TABLE zamowienie ADD CONSTRAINT klient_fk FOREIGN KEY (klient_id) REFERENCES 
klient(klient_id); 
 

 

 

wówczas tabela zamowienie będzie miała definicję  

 

CREATE TABLE zamowienie 

  zamowienie_id serial NOT NULL, 
  klient_id integer NOT NULL, 
  data date NOT NULL, 
  kwota numeric(9,2) NOT NULL, 
  CONSTRAINT zamowienie_pk PRIMARY KEY (zamowienie_id), 
  CONSTRAINT klient_fk FOREIGN KEY (klient_id) REFERENCES klient(klient_id) 
); 

 
 
 

2.8. Usunięcie klucza obcego 

ALTER TABLE zamowienie DROP CONSTRAINT klient_fk; 
 
 

2.9. Usunięcie klucza głównego  

ALTER TABLE zamowienie DROP CONSTRAINT zamowienie_pk; 

 

2.10. Usunięcie kolumny 

background image

Laboratorium 

 

Informatyka II: Bazy danych

 

 

 

- 3 - 

 

ALTER TABLE zamowienie DROP COLUMN kwota; 

 

3.  Wprowadzanie danych do tabel 

 

3.1. Wprowadzanie danych dla pojedynczego rekordu 

INSERT INTO klient (klient_id, imie, kod_pocztowy) VALUES (DEFAULT, 'Jan', '21-122'); 
 

 

 

3.2. Wprowadzanie danych dla kilku rekordów 

INSERT INTO klient (klient_id, imie, kod_pocztowy) VALUES  
(DEFAULT, 'Piotr', '12345'), 
(DEFAULT, 'Ewa', '12345'), 
(DEFAULT, 'Jakub', '11111'); 
 

 

 

3.3. Wprowadzanie danych dla kilku rekordów i wybranych kolumn 

INSERT INTO klient (imie, kod_pocztowy) VALUES  
('Jan', '21122'), 
('Olga', '67098'), 
('Maja', '55002'); 

 

3.4. Usuwanie wybranych rekordów 

DELETE FROM klient WHERE imie='Piotr'; 
 

3.5. Usunięcie wszystkich rekordów z tabeli  

DELETE FROM klient; 
 
 
 

4.  Pobieranie danych z tabel 

 

CREATE TABLE osoba 

osoba_id SERIAL, 
imie VARCHAR(20), 
nazwisko VARCHAR(35), 

background image

Laboratorium 

 

Informatyka II: Bazy danych

 

 

 

- 4 - 

 

rok_urodz SMALLINT, 
miejsce_urodz VARCHAR (35), 
CONSTRAINT osoba_pk PRIMARY KEY (osoba_id) 
); 
 
INSERT INTO osoba (imie, nazwisko, rok_urodz, miejsce_urodz) VALUES 
('Adam', 'Kowalski', 1964, 'Bydgoszcz'),  
('Adam', 'Nowak', 1972, 'Szczecin'), 
('Andrzej', 'Kowalski', 1986, 'Nidzica'), 
 ('Arkadiusz', 'Malinowski', 1986, 'Wrocław'), 
('Andrzej', 'Malinowski', 1989, 'Wrocław'),  
('Krzysztof', 'Nowicki', 1986, 'Bydgoszcz'), 
('Kacper', 'Adamczyk', 1971, 'Wrocław'),  
('Kamil', 'Andrzejczak', 1971, 'Szczecin'), 
('Krzysztof', 'Kowalski', 1984, 'Cieszyn'),  
('Kamil', 'Borowski', 1975, 'Kudowa Zdrój'), 
('Piotr', 'Nowicki', 1977, 'Szczecin'); 
 

 

 

CREATE TABLE towar 

  towar_id serial NOT NULL, 
  nazwa character varying(35), 
  cena numeric(9,2), 
  CONSTRAINT "towar_PK" PRIMARY KEY (towar_id) 
); 
INSERT INTO towar (towar_id, nazwa, cena) VALUES 
(DEFAULT, 'towar 1', 100.99), 
(DEFAULT, 'towar 2', 50.00), 
(DEFAULT, 'towar 3', 1029.00); 
 

background image

Laboratorium 

 

Informatyka II: Bazy danych

 

 

 

- 5 - 

 

 

 
CREATE TABLE zamowienie 

zamowienie_id serial, 
osoba_id integer, 
towar_id integer, 
data date, 
ilosc_szt smallint, 
CONSTRAINT zamowienie_PK PRIMARY KEY (zamowienie_id), 
CONSTRAINT zamowienie_osoba_FK FOREIGN KEY (osoba_id) REFERENCES osoba(osoba_id), 
CONSTRAINT zamowienie_towar_FK FOREIGN KEY (towar_id) REFERENCES towar(towar_id) 
);  
INSERT INTO zamowienie (zamowienie_id, osoba_id, towar_id, data, ilosc_szt) VALUES 
(DEFAULT,1,1, '2009-10-10',1),  
(DEFAULT,2,1,'2009-10-10', 2),  
(DEFAULT,2,2, '2009-11-10',5),  
(DEFAULT,2,2, '2009-11-09',5),  
(DEFAULT,2,3, '2009-10-10',2), (DEFAULT,5,3, '2009-01-10',3), 
(DEFAULT,5,3, '2009-08-10',1), (DEFAULT, 6,1, '2009-05-10',1), (DEFAULT,3,1, '2009-10-10',1), 
(DEFAULT,1,1, '2009-10-10',1); 

 

 

 
 
 

Składnia polecenia SELECT 
SELECT kolumna1, kolumna2, ..., kolumnaN  
FROM nazwa_tabeli 
[WHERE warunek] 
[ORDER BY kolumna1, kolumna2, ..., kolumnaN [ASC|DESC]]; 

background image

Laboratorium 

 

Informatyka II: Bazy danych

 

 

 

- 6 - 

 

 

4.1. Wyświetlenie całej zawartości tabeli 

SELECT * FROM osoba; 
 

 

 

4.2. Wyświetlenie całej zawartości tabeli posortowanej wg wybranych kolumn  

SELECT * FROM osoba ORDER BY nazwisko, imie; 

 

 

 
 
 
 
 
 
 
 

 

4.3. Wyświetlenie określonych kolumn tabeli posortowanej wg wybranych kolumn 

SELECT imie,nazwisko FROM osoba ORDER BY nazwisko; 

 

background image

Laboratorium 

 

Informatyka II: Bazy danych

 

 

 

- 7 - 

 

 

 

SELECT nazwisko,imie FROM osoba ORDER BY nazwisko; 

 

 

 

4.4. Wyświetlenie określonych kolumn tabeli wraz ze zmianą nazw wyświetlanych kolumn 

SELECT imie AS "Imię",nazwisko AS "Nazwisko", rok_urodz AS "Rok urodzenia",  
miejsce_urodz AS "Miejsce urodzenia"  FROM osoba ORDER BY nazwisko; 

 

 

 
 

background image

Laboratorium 

 

Informatyka II: Bazy danych

 

 

 

- 8 - 

 

4.5. Wyświetlenie wybranych rekordów tabeli spełniających warunek równości 

SELECT * FROM osoba WHERE nazwisko='Kowalski'; 

 

 

 

4.6. Wyświetlenie wybranych rekordów tabeli spełniających warunek większości 

SELECT * FROM osoba WHERE rok_urodz > 1985; 

 

 

 

4.7. Wyświetlenie wybranych rekordów tabeli spełniających dwa warunki 

SELECT * FROM osoba WHERE osoba_id >= 3 AND osoba_id <= 6; 

 

 

 
 
 

4.8. Wyświetlenie wybranych rekordów tabeli spełniających warunek „BETWEEN” 

SELECT * FROM osoba WHERE osoba_id  BETWEEN 1 AND 6; 

 

 

 

4.9. Wyświetlenie wybranych rekordów tabeli spełniających warunek „IN” 

SELECT * FROM osoba WHERE osoba_id IN (3,5,7); 

background image

Laboratorium 

 

Informatyka II: Bazy danych

 

 

 

- 9 - 

 

 

 

 

4.10. Wyświetlenie wybranych rekordów tabeli spełniających warunek „NOT IN” 

SELECT * FROM osoba WHERE osoba_id NOT IN (3,5,7); 
 Powyższe polecenie jest równoważne:  
SELECT * FROM osoba WHERE osoba_id <>3 AND osoba_id<>5 AND osoba_id<>7; 

 

 

 

4.11. Wyświetlenie wybranych rekordów tabeli spełniających warunek „LIKE” 

SELECT * FROM osoba WHERE imie LIKE 'Ka%'; 

 

 

 

4.12. Wyświetlenie wybranych rekordów tabeli spełniających kilka warunków 

SELECT * FROM osoba WHERE imie LIKE 'A%' AND rok_urodz>1970 AND miejsce_urodz IN 
('Wrocław', 'Szczecin'); 

 

 

 

4.13. Selektywne wyświetlanie rekordów oraz kolumn „SELECT DISTINCT” 

SELECT DISTINCT nazwisko FROM osoba ORDER BY nazwisko; 

 

background image

Laboratorium 

 

Informatyka II: Bazy danych

 

 

 

- 10 - 

 

 

 

4.14. Selektywne wyświetlenie określonej liczby kolejnych pierwszych rekordów tabeli „LIMIT” 

SELECT * FROM osoba ORDER BY rok_urodz DESC LIMIT 3; 

 

 

 

4.15. Selektywne wyświetlenie określonej liczby kolejnych pierwszych rekordów tabeli „LIMIT” oraz 

„OFFSET” 

SELECT * FROM osoba ORDER BY osoba_id LIMIT 3 OFFSET 3; 

 

 

 
 
 
 

4.16. Wyświetlanie połączonych danych z 2 tabel  

SELECT zamowienie_id, imie, nazwisko, data 
FROM osoba, zamowienie 
WHERE zamowienie.osoba_id=osoba.osoba_id; 

 

background image

Laboratorium 

 

Informatyka II: Bazy danych

 

 

 

- 11 - 

 

 

 

co jest równorzędne z poleceniem 
 
SELECT zamowienie_id, imie, nazwisko, data 
FROM zamowienie INNER JOIN osoba 
ON zamowienie.osoba_id=osoba.osoba_id; 
 

4.17. Wyświetlanie połączonych danych z 3 tabel 

SELECT zamowienie_id AS "nr zamówienia", data, imie, nazwisko, nazwa, cena AS "cena 
jednostkowa", ilosc_szt AS "ilość sztuk"  
FROM osoba, zamowienie, towar 
WHERE zamowienie.osoba_id=osoba.osoba_id AND zamowienie.towar_id=towar.towar_id 
ORDER BY data DESC; 

 

 

5.  Widoki  

5.1. Tworzenie widoku o nazwie zamowienie_osoba1 

CREATE VIEW zamowienie_osoba1 
AS SELECT * FROM zamowienie WHERE osoba_id=1; 

 

5.2. Pobieranie danych z widoku zamowienie_osoba1 

SELECT * FROM zamowienie_osoba1; 

background image

Laboratorium 

 

Informatyka II: Bazy danych

 

 

 

- 12 - 

 

 

 

5.3. Usuwanie widoku zamowienie_osoba1 

DROP VIEW zamowienie_osoba1; 
 

5.4. Widoki przechowują dynamicznie dane o rekordach w tabeli 

5.4.1. Dodaj nowy rekord do tabeli z zamówieniem osoby o id = 1 
5.4.2. Pobierz dane z widoku zamowienie_osoba1 

 

6.  Agregacja danych 

6.1. Obliczenie ilości rekordów w tabeli zamówienieI

 
SELECT COUNT (*) FROM zamowienie; 

 

 

6.1.1. Obliczenie ilości rekordów w tabeli zamówienie i przedstawienie ich z odpowiednim 

nagłówkiem:  

 
SELECT COUNT (*) AS "liczba zamówień" FROM zamowienie;  

 

 

6.2. Obliczenie ilości rekordów tabeli zamówienie spełniających warunek: 

 
SELECT COUNT (*) AS "liczba zamówień powyżej 2" FROM zamowienie 
WHERE ilosc_szt>2; 

 

6.3. Obliczenie wartości średniej z kolumny wartość

 
SELECT AVG (wartosc) AS "Średnia wartość zamówienia" FROM zamowienie; 

background image

Laboratorium 

 

Informatyka II: Bazy danych

 

 

 

- 13 - 

 

 

 

6.4. Obliczenie wartości minimalnej kolumny wartość: 

 

SELECT MIN (wartosc) AS "Minimalna wartość zamówienia" FROM zamowienie; 

 

 

6.5. Obliczenie wartości maksymalnej kolumny wartość

 
SELECT MAX (wartosc) AS "Maksymalna wartość zamówienia" FROM zamowienie; 

 

 

6.6. Obliczenie sumy wartości umieszczonych w kolumnie wartość: 

 

SELECT SUM (wartosc) AS "Sumaryczna wartość zamówień" FROM zamowienie; 

 

 

6.7. Zestawienie wartości średniej, minimalnej, maksymalnej, oraz sumy wartości zleceń wg kolumny 

wartość z tabeli zamowienie (statystyka wszystkich zamówień) 

SELECT AVG (wartosc) AS " Średnia wartość zamówienia ",  
MIN (wartosc) AS " Minimalna wartość zamówienia ", 
MAX (wartosc) AS " Maksymalna wartość zamówienia ",  
SUM (wartosc) AS "Sumaryczna wartość zamówień"  
FROM zamowienie; 

 

 
 
 
 
 

7.  Grupowanie danych i agregacja danych 

 

background image

Laboratorium 

 

Informatyka II: Bazy danych

 

 

 

- 14 - 

 

7.1. Zestawienie wartości średnich zamówień wg klientów. Grupowanie wyników zapytania dla tabeli 

zamowienie wg kolumny osoba_id   
 

SELECT osoba_id AS "Identyfikator klienta" , AVG (wartosc) AS "Średnia wartość zamówienia" 
FROM zamowienie 
GROUP BY osoba_id; 

 

 

7.2. Zestawienie wartości średnich zamówień wg klientów. Połączenie wyników zapytania dla dwóch 

tabel zamowienie oraz osoba, w celu wyświetlenia imienia oraz nazwiska klienta w miejscu 
identyfikatora . Grupowanie wyników zapytania dla tabel zamowienie
 oraz osoba wg kolumny 
imie, nazwisko 
z tabeli osoba. 

 
SELECT nazwisko, imie, AVG (wartosc) AS " Średnia wartość zamówienia" 
FROM zamowienie INNER JOIN osoba 
ON zamowienie.osoba_id=osoba.osoba_id 
GROUP BY nazwisko, imie 
ORDER BY AVG (wartosc) DESC; 

 

 
 

7.3. Zestawienie wartości statystyki zamówień (wartości średnie, min., max, suma zamówień) wg 

klientów. Połączenie wyników zapytania dla dwóch tabel zamowienie oraz osoba, w celu 
wyświetlenia imienia oraz nazwiska klienta w miejscu identyfikatora . Grupowanie wyników 
zapytania dla tabel zamowienie
 oraz osoba wg kolumn imie, nazwisko z tabeli osoba. 

 

SELECT nazwisko, imie, AVG (wartosc) AS " Średnia wartość zamówienia ",  
MIN (wartosc) AS "Minimalna wartość zamówienia", 
MAX (wartosc) AS "Maksymalna wartość zamówienia",  
SUM (wartosc) AS "Sumaryczna wartość zamówienia"  
FROM zamowienie INNER JOIN osoba 
ON zamowienie.osoba_id=osoba.osoba_id 
GROUP BY nazwisko, imie 
ORDER BY AVG (wartosc) DESC;  

background image

Laboratorium 

 

Informatyka II: Bazy danych

 

 

 

- 15 - 

 

 

 

7.4. Utworzenie widoku zawierającego wyniki zapytania z agregacją oraz grupowaniem danych na 

podstawie zapytania z pkt 7.3  

 
CREATE VIEW statystyka_zamowien 
AS SELECT nazwisko, imie, AVG (wartosc) AS " Średnia wartość zamówienia ",  
MIN (wartosc) AS "Minimalna wartość zamówienia", 
MAX (wartosc) AS "Maksymalna wartość zamówienia",  
SUM (wartosc) AS "Sumaryczna wartość zamówienia"  
FROM zamowienie INNER JOIN osoba 
ON zamowienie.osoba_id=osoba.osoba_id 
GROUP BY nazwisko, imie 
ORDER BY AVG (wartosc) DESC; 

Wyświetlenie widoku statystyka_zamowien 

SELECT * FROM statystyka_zamowien; 

 

umożliwia prostsze zdefiniowanie polecenia do prezentacji wyników statystycznej analizy zamówień 
których dane zostały zapisane w tabeli zamowienie