background image

Bazy Danych

Europejska Wyższa Szkoła Informatyczno-
Ekonomiczna
Mgr inż. Piotr Greniewski

Wykład 5: Podstawy SQL – część 2

background image

 Copyright by Piotr Greniewski

2

Spis treści

Bazy danych wstęp

Geneza relacyjnych baz danych

Podstawy relacyjnych baz danych

Podstawy-SQL-1

Podstawy-SQL-2

Podstawy-SQL-3

Operacje na danych

Transakcje i blokady

Normalizacja

background image

 Copyright by Piotr Greniewski

3

Funkcje skalarne i arytmetyczne

Podsumowanie

Funkcje arytmetyczne mogą być używane w 
klauzuli SELECT oraz WHERE.

Kolumny wyliczone mogą być nazwane przez 
zastosowanie klauzuli AS.

Funkcje skalarne mogą być używane do 
zmiany reprezentacji danych.

Funkcje skalarne mogą być używane do 
wydobycia lat, miesięcy oraz dni z różnych 
formatów daty.

Wyrażenie CASE pozwala na wybór wartości 
dla kolumny w zależności od zdefiniowanego 
warunku.

background image

 Copyright by Piotr Greniewski

4

Funkcje kolumnowe i grupujące

Funkcje kolumnowe

Istnieją następujące funkcje kolumnowe, które 
mogą być używane w klauzulach SELECT i 
HAVING:

SUM – funkcja oblicza sumę wartości w określonych 
kolumnach;

AVG – oblicza średnią wartość w kolumnie;

MIN- znajduje minimalną wartość w kolumnie;

MAX – znajduje maksymalną wartość w kolumnie;

COUNT – służy do zliczania wystąpień pewnej 
wartości w wierszach.

background image

 Copyright by Piotr Greniewski

5

Funkcje kolumnowe i grupujące

Funkcje kolumnowe

Zapytanie wyświetlające całkowitą sumę 
pensji wszystkich pracowników, średnią 
pensję, minimalną i maksymalną pensję oraz 
ilość pracowników.

SELECT     SUM (p.pensja) AS Pensja,
     

       AVG (p.pensja) AS Srednia,
        MIN (p.pensja) AS Pensja_min,
       MAX (p.pensja) AS Pensja_max
       COUNT (*) AS Ilosc

FROM pracownicy p;

6.1

background image

 Copyright by Piotr Greniewski

6

Funkcje kolumnowe i grupujące

Funkcje kolumnowe

Funkcja COUNT może być używana do zliczania 
wierszy zawierających powtarzającą się wartość.

Zapytanie zlicza liczbę działów i stanowisk w firmie.

SELECT   COUNT ( DISTINC p.dzial ) AS ilosc_dzialow,

     COUNT ( DISTINC p.stanowisko) AS 

ilosc_stanowisk
FROM pracownicy p;

6.2

background image

 Copyright by Piotr Greniewski

7

Funkcje kolumnowe i grupujące

Funkcje kolumnowe

Stosowanie funkcji kolumnowych można przeprowadzić 
również na pewnym podzbiorze wierszy, stosując 
klauzulę WHERE

.

SELECT     SUM (p.pensja) AS pensja,
     

      AVG (p.pensja) AS srednia,
      MIN (p.pensja) AS pensja_min,
      MAX (p.pensja) AS pensja_max
      COUNT (*) AS ilosc

FROM pracownicy p
WHERE p.dzial = ‘obsluga klienta’;

6.3

background image

 Copyright by Piotr Greniewski

8

Funkcje kolumnowe i grupujące

Klauzula GROUP BY

Klauzula GROUP BY grupuje wiersze o tej 
samej wartości wyszczególnionych kolumn. 
Funkcje agregujące w klauzuli SELECT operują 
na każdej grupie osobno.

SELECT     p.stanowisko, SUM (p.pensja) AS pensja,
     

      AVG (p.pensja) AS srednia,
      MIN (p.pensja) AS pensja_min,
      MAX (p.pensja) AS pensja_max
      COUNT (*) AS ilosc

FROM 

pracownicy p

GROUP BY p.stanowisko
ORDER BY p.stanowisko;

6.5

background image

 Copyright by Piotr Greniewski

9

Funkcje kolumnowe i grupujące

Klauzula HAVING

Klauzulę HAVING używamy razem z klauzulą GROUP BY 
w celu ograniczenia wyświetlanych grup. Warunek 
szukania musi zawierać funkcję agregującą. Po 
zgrupowaniu wierszy przez klauzulę GROUP BY, klauzula 
HAVING wyświetla tylko te wiersze spośród 
zgrupowanych, które spełniają warunki wyszczególnione 
w klauzuli HAVING.

SELECT     p.nazwisko, SUM (w.cena)
FROM 

pracownicy p, wypozyczenia w

WHERE p.nr_p = w.prac_wyd
GROUP BY p.nazwisko
HAVING SUM (w.cena) > 400
ORDER BY p.nazwisko;

6.7

background image

 Copyright by Piotr Greniewski

10

Funkcje kolumnowe i grupujące

Podsumowanie

Funkcje kolumnowe mogą być użyte tylko w 
klauzulach SELECT i HAVING.

Klauzula SELECT może zawierać tylko funkcje 
kolumnowe oraz kolumny wskazywane w 
klauzuli ORDER BY.

Klauzula HAVING może zawierać dowolne 
funkcje kolumnowe operujące na dowolnych 
kolumnach tabeli. Te kolumny nie muszą być 
wyspecyfikowane w klauzuli SELECT.

background image

 Copyright by Piotr Greniewski

11

Klauzula UNION

Łączenie wielu wyników zapytania

Klauzula UNION łączy dwa lub więcej polecenia 
SELECT w jedną tabelę wynikową. 

Klauzule SELECT muszą zwracać tę samą liczbę 
kolumn.

 Kolumny pokrywające muszą mieć tę samą szerokość i 
typ danych. 

Nazwy kolumn mogą być różne.

Klauzula UNION łączy dwa ( lub więcej) zestawy 
wyników w jeden i jednocześnie usuwa duplikaty.

background image

 Copyright by Piotr Greniewski

12

Klauzula UNION

Łączenie wielu wyników zapytania

Zapytanie zwraca dane o imieniu i nazwisku 
wszystkich klientów i pracowników, których 
nazwiska kończą się na „ski”. Ponieważ duplikaty 
są usuwane tylko jedna osoba o nazwisku Jan 
Kowalski będzie na liście.

SELECT     imie, nazwisko
FROM 

klienci

WHERE nazwisko LIKE ‘%ski’
UNION
SELECT     
imie, nazwisko
FROM 

pracownicy

WHERE nazwisko LIKE ‘%ski’;

7.2

background image

 Copyright by Piotr Greniewski

13

Klauzula UNION

Łączenie wielu wyników zapytania

Klauzula UNION wyświetla wyniki uporządkowane 
rosnąco. Jeśli chcemy zmienić porządek sortowania 
musimy klauzulę ORDER BY umieścić na końcu.

SELECT     imie, nazwisko
FROM 

klienci

WHERE nazwisko LIKE ‘%SKI’
UNION
SELECT     
imie, nazwisko
FROM 

pracownicy

WHERE nazwisko LIKE ‘%SKI’
ORDER BY nazwisko DESC;

7.3

background image

 Copyright by Piotr Greniewski

14

Klauzula UNION

Klauzula UNION ALL

Różnica pomiędzy klauzulą UNION a UNION ALL 
polega na tym, że wynik łączenia zapytań klauzulą 
UNION ALL zawiera powtarzające się wiersze.

Klauzula UNION ALL działa szybciej niż UNION. 

SELECT     imie, nazwisko
FROM 

klienci

WHERE nazwisko LIKE ‘%ski’
UNION ALL
SELECT     
imie, nazwisko
FROM 

pracownicy

WHERE nazwisko LIKE ‘%ski’
ORDER BY nazwisko DESC;

7.3

background image

 Copyright by Piotr Greniewski

15

Klauzula UNION

Podsumowanie

Wyniki zapytania SELECT z tą samą liczbą kolumn, 
będących tego samego typu danych, mogą być łączone 
przy pomocy klauzuli UNION.

Klauzula UNION sortuje dane wynikowe i usuwa 
duplikaty.

Klauzula UNION ALL działa szybciej niż UNION.

Użyj klauzuli UNION ALL gdy jesteś pewien, że łączone 
wyniki nie zawierają duplikatów

background image

 Copyright by Piotr Greniewski

16

Pod-zapytania

Używanie pod-zapytań

Chcemy wyszukać pracowników, którzy otrzymują 
wynagrodzenie w kwocie wyższej niż średnia. Sprawdzamy 
najpierw jaka jest średnia pensja w naszym przedsiębiorstwie.

SELECT     AVG (p.pensja)
FROM 

pracownicy p;

-----------------------------------------
Wynik wynosi 1530;

8.1

Teraz szukamy pracowników zarabiających powyżej 
średniej.

SELECT     p.imie, p.nazwisko, p.dzial, p.stanowisko
FROM 

pracownicy p;

WHERE p.pensja > 1530;

8.1

background image

 Copyright by Piotr Greniewski

17

Pod-zapytania

Używanie pod-zapytań

Można to zrobić przy użyciu jednego pod-zapytania

SELECT     p.imie, p.nazwisko, p.dzial, p.stanowisko
FROM 

pracownicy p

WHERE p.pensja > (SELECT     AVG (p.pensja)

      FROM 

pracownicy p);

8.1

background image

 Copyright by Piotr Greniewski

18

Pod-zapytania

Używanie słowa kluczowego NOT IN

Słowo kluczowe NOT IN pozwala na zidentyfikowanie wszystkich 
elementów w zbiorze A, które nie występują w zbiorze B.

 

Tomasz Adamczak

Warszawa

Paweł

Fiodorowicz Warszawa

Anna

Kowalska

Wrocław

Piotr 

Malczyk 

Warszawa

Tomasz

Adamczak

Warszawa

Aniela

Dalgiewicz

Wrocław

Krzyszto

f

Dobrowols

ki

Wrocław

Anna

Kowalska 

Wrocław

NOT 

IN

ZBIÓR A

ZBIÓR B

Paweł

Fiodorowic

z

Warszawa

Piotr 

Malczyk 

Warszawa

A NOT IN 

B

background image

 Copyright by Piotr Greniewski

19

Pod-zapytania

Używanie słowa kluczowego NOT IN

Poniższe zapytanie wyświetla listę samochodów, których do tej 
pory nie wypożyczył żaden klient. Zapytanie wybiera te 
samochody, które nie znajdują się w tabeli wypożyczenia.

SELECT     s.nr_samochodu, s.marka, s.typ
FROM 

samochody s

WHERE s.nr_samochodu
NOT IN
    ( SELECT w.nr_samochodu
      FROM wypozyczenia w);

8.3

background image

 Copyright by Piotr Greniewski

20

Pod-zapytania

Używanie słowa kluczowego ALL

Zapytanie będzie wykonywane w dwóch krokach. Najpierw wykonywane 
jest pod-zapytanie, które znajduje średnią pensję w każdym dziale. 
Następnie każda pensja pracownika, porównywana jest z listą średnich 
pensji. Wyświetleni zostaną pracownicy, których pensja jest wyższa od 
wszystkich średnich pensji obliczonych w pod-zapytaniu.

SELECT     p.imie, p.nazwisko, p.dzial, p.stanowisko, 

p.pensja
FROM 

pracownicy p

WHERE
p.pensja > ALL ( SELECT AVG (p.pensja)

              FROM pracownicy p
             GROUP BY p.dzial);

8.3


Document Outline