Grupowanie danych SELECT department_id, AVG(salary)

advertisement
„Relacyjne Bazy Danych (Oracle)”
Prezentacja jest współfinansowana przez
Unię Europejską w ramach
Europejskiego Funduszu Społecznego w projekcie pt.
„Innowacyjna dydaktyka bez ograniczeń - zintegrowany rozwój Politechniki Łódzkiej zarządzanie Uczelnią, nowoczesna oferta edukacyjna i wzmacniania zdolności do
zatrudniania osób niepełnosprawnych”
Prezentacja dystrybuowana jest bezpłatnie
Projekt współfinansowany przez Unię Europejską
w ramach Europejskiego Funduszu Społecznego
Politechnika Łódzka, ul. Żeromskiego 116, 90-924 Łódź, tel. (042) 631 28 83
www.kapitalludzki.p.lodz.pl
1
SELECT
Projection
Selection
Table 1
Table 1
Join
Table 1
Table 2
2
SELECT


Kwerenda SELECT służy do pobierania
informacji z bazy danych spełniających podane
kryteria
SELECT ename,sal FROM emp

ename,sal – lista kolumn

* - wszystkie kolumny

emp – nazwa tabeli
3
Kwerendy

Kwerenda SELECT
4
Ograniczanie wierszy
PName
Price
Category
Manufacturer
Gizmo
$19.99
Gadgets
GizmoWorks
Powergizmo
$29.99
Gadgets
GizmoWorks
SingleTouch
$149.99
Photography
Canon
MultiTouch
$203.99
Household
Hitachi
PName
Price
Category
Manufacturer
Gizmo
$19.99
Gadgets
GizmoWorks
Powergizmo
$29.99
Gadgets
GizmoWorks
SELECT *
FROM
Product
WHERE category=‘Gadgets’
5
Ograniczanie wierszy
PName
Price
Category
Manufacturer
Gizmo
$19.99
Gadgets
GizmoWorks
Powergizmo
$29.99
Gadgets
GizmoWorks
SingleTouch
$149.99
Photography
Canon
MultiTouch
$203.99
Household
Hitachi
SELECT PName, Price, Manufacturer
FROM
Product
WHERE Price > 100
PName
Price
Manufacturer
SingleTouch
$149.99
Canon
MultiTouch
$203.99
Hitachi
6
Ograniczanie wierszy


Klauzula WHERE pozwala na ograniczanie
wyników zapytania do wierszy spełniających
kryteria
SELECT * FROM emp WHERE empno>7700
7
Ograniczanie wierszy

Klauzula WHERE



Klauzulę umieszczamy po klauzuli FROM
Warunek w klauzuli WHERE może składać się z
wielu części
SELECT * FROM emp WHERE empno>7700 AND
empno<7900
8
Wyrażenia arytmetyczne

SELECT last_name, salary, salary + 300
FROM employees;
9
Wyrażenia arytmetyczne

SELECT last_name, 12*salary*commission_pct
FROM employees;
10
Ograniczanie wierszy


Warunki można grupować używając nawiasów
SELECT * FROM emp WHERE (empno>7700
AND empno<7900) OR empno=7934;
11
Ograniczanie wierszy

Podstawowe operatory algebraiczne

„=” równy

„>” większy niż

„<” mniejszy niż

„>=” większy bądź równy

„<=” mniejszy bądź równy

„<>” różny
12
Ograniczanie wierszy

Inne operatory


BETWEEN – analogicznie do „>” AND „<”
SELECT * FROM emp WHERE sal BETWEEN
1500 AND 2000
13
Ograniczanie wierszy


Operator IN
SELECT * FROM emp WHERE sal IN
(1500,1600,3000,950);
14
Ograniczanie wierszy

Operator LIKE


Pozwala sprawdzić wzorzec wartości: „%” oznacza
dowolny ciąg znaków, „_” oznacza jeden znak
SELECT * FROM emp WHERE ename LIKE '%R'
15
Ograniczanie wierszy

Operator LIKE – przykłady

ename like '%ER'

ename LIKE '%E%'

ename LIKE '%E_'
16
Ograniczanie wierszy

Warunek wykorzystany po klauzuli WHERE jest
ewaluowany przez bazę danych, zwrócone
zostaną wiersze, dla których dany warunek jest
prawdziwy

Warunek nie musi zawierać nazw kolumn np:

SELECT * FROM emp WHERE 1=1

Warunek zawsze prawdziwy
17
Tabela DUAL


DUAL – metatabela w bazie danych Oracle
służąca do wykonywania prostych operacji
SELECT 2+2 FROM DUAL
18
Wartość specjalna NULL

NULL w danej kolumnie oznacza brak wartości


Wartość NULL nie oznacza ani pustego ciągu
znaków dla kolumn tekstowych ani wartości zero
dla kolumn liczbowych
NULL <> NULL
19
Ograniczanie kolumn


Listę zwróconych kolumn można ograniczyć
wpisując odpowiednie nazwy po słowie
kluczowym SELECT
SELECT ename,job,sal FROM emp WHERE
empno>7700;
20
Ograniczanie wyników

Operatory logiczne – pozwalają na łączenie
wyników wielu warunków

AND – oba warunki muszą być spełnione

OR – jeden z warunków musi być spełniony

NOT – operator jednoargumentowy – negowanie
listy wyników
21
SELECT DISTINCT


Klauzula DISTINCT pozwala na wybranie tylko
wierszy zawierających unikatową wartość
jednej lub więcej kolumn
SELECT DISTINCT job FROM emp;
22
SELECT DISTINCT


Klauzula DISTINCT zastosowana do wielu
kolumn
SELECT DISTINCT job,sal FROM emp;
23
Użycie operatora IS NULL
SELECT last_name, manager_id
FROM employees
WHERE manager_id IS NULL;
24
Aliasy

SELECT last_name "Name" , salary*12 AS "Annual Salary”
FROM employees;
25
Funkcje


Funkcje pozwalają na zmianę sposobu
prezentacji wyniku, lub wykonanie operacji na
jednej lub więcej kolumnach przed prezentacją
wyniku
SELECT ename,
LENGTH(job) FROM emp;
26
Funkcje


Funkcje można stosować do kolumn, większość
funkcji występuje tylko dla kolumn danego typu
Wywołanie funkcji na typie danych, dla którego
nie została ona określona powoduje błąd
27
Funkcje

Wybrane funkcje zdefiniowane dla ciągów
znaków

CONCAT (wartość1, wartość2)

SUBSTR(wartość, początek, koniec)

LENGTH(wartość)

LPAD(wartość,długość,znak)/RPAD(wartość,długość,znak)

UPPER(wartość)/LOWER(wartość)

REVERSE(wartość)

INITCAP(wartość)
28
Funkcje

SELECT last_name ||' is a '|| job_id AS "Employee Details”
FROM employees;
29
Funkcje

Wybrane funkcje dla wartości liczbowych

ROUND(wartość,liczba_znaków)

TRUNC(wartość,liczba_znaków)

MOD(wartość,dzielnik)

SIN(wartość)/COS(wartość)/SINH(wartość)/COSH(wartość)

POWER(wartość,potega)
30
Funkcje

round(125.315) = 125

round(125.315, 0) = 125

round(125.315, 1) =125.3

round(125.315, 2) =125.32

round(125.315, 3) =125.315

round(-125.315, 2) =-125.32
31
Funkcje


Wykorzystanie funkcji przy klauzuli WHERE
SELECT * FROM emp WHERE
MOD(sal,200)=0;
32
Sortowanie wyników

Klauzula ORDER BY

Klauzulę umieszczamy po klauzuli WHERE
33
Sortowanie wyników



Można wykorzystać kilka kolumn do sortowania
Można sortować rosnąco lub malejąco
(ASC/DESC)
SELECT * FROM emp WHERE sal>2000
ORDER BY sal ASC,ename DESC;
34
Agregacje



Agregowanie wyników pozwala na analizę
wybranych kolumn z tabeli oraz
zaprezentowanie wyniku danej funkcji w postaci
jednej kolumny
Proste agregacje pozwalają np. na:

Obliczenie średniej wartości danej kolumny

Obliczenie wartości minimalnej/maksymalnej

Policzenie liczby wierszy
Funkcje grupujące ignorują wartości null w
kolumnie.
35
Agregacje
36
COUNT(*)



Agregacja COUNT(*) zwraca liczbę wierszy
pasujących do danego zapytania
Agregacja ta może skanować daną tabelę, bądź
indeks, jej wykorzystanie na dużych tabelach
może być powolne
SELECT COUNT(*) FROM emp WHERE
sal>2000;
37
MIN(), MAX(), AVG()

Korzystając z agregacji MIN,MAX lub AVG
można policzyć minimalną, maksymalną bądź
średnią wartość danej kolumny pasującej do
zapytania
38
Grupowanie danych
39
Grupowanie danych
SELECT
column, group_function(column)
FROM
table
[WHERE
condition]
[GROUP BY
group_by_expression]
[ORDER BY
column];
40
Grupowanie danych
SELECT
department_id, AVG(salary)
FROM
employees
GROUP BY department_id ;
41
Grupowanie danych
SELECT
department_id dept_id, job_id, AVG(salary)
FROM
employees
GROUP BY department_id, job_id ;
42
Grupowanie danych
Działanie HAVING odrzuca grup niespełniające warunku
1. Wiersze są grupowane.
2. Funkcja grupująca jest zastosowana.
3. Grupy spełniające warunek z klauzuli HAVING są wyświetlane.
SELECT
column, group_function
FROM
table
[WHERE
condition]
[GROUP BY
group_by_expression]
[HAVING
group_condition]
[ORDER BY
column];
43
Grupowanie danych
SELECT department_id, MAX(salary)
FROM
employees
GROUP BY department_id
HAVING MAX(salary)>10000 ;
44
Funkcja NVL

Konwertuje null do wartości podanej

Dane mogą być liczbami, tekstem lub datami.

NVL(commission_pct,0)

NVL(job_id,‘Bez pracy')
45
Funkcja NVL

SELECT ename, sal, NVL(comm, 0),
(sal*12) + (sal*12*NVL(comm, 0)) AN_SAL
FROM emp;
46
Użycie wyrażenia CASE

Dają możliwość użycia konstrukcji typu IF-THEN-ELSE w
poleceniu SQL
CASE expr WHEN
[WHEN
WHEN
ELSE
END
comparison_expr1 THEN return_expr1
comparison_expr2 THEN return_expr2
comparison_exprn THEN return_exprn
else_expr]
47
Użycie wyrażenia CASE
SELECT last_name, job_id, salary,
CASE job_id WHEN 'IT_PROG'
THEN 1.10*salary
WHEN 'ST_CLERK'
THEN 1.15*salary
WHEN 'SA_REP'
THEN 1.20*salary
ELSE
"REVISED_SALARY"
salary END
FROM emp;
48
Łączenie tabel
49
Uzyskiwanie danych z wielu tabel
Product
PName
Price
Category
Manufacturer
Gizmo
$19.99
Gadgets
GizmoWorks
Powergizmo
$29.99
Gadgets
GizmoWorks
SingleTouch
$149.99
Photography
Canon
MultiTouch
$203.99
Household
Hitachi
Company
CName
StockPrice
Country
GizmoWorks
25
USA
Canon
65
Japan
Hitachi
15
Japan
50
Uzyskiwanie danych z wielu tabel
Product
Company
PName
Price
Category
Manufacturer
Cname
StockPrice
Country
Gizmo
$19.99
Gadgets
GizmoWorks
GizmoWorks
25
USA
Powergizmo
$29.99
Gadgets
GizmoWorks
Canon
65
Japan
SingleTouch
$149.99
Photography
Canon
Hitachi
15
Japan
MultiTouch
$203.99
Household
Hitachi
SELECT PName, Price
FROM
Product, Company
WHERE Manufacturer=CName AND Country=‘Japan’
AND Price <= 200
PName
Price
SingleTouch
$149.99
51
Iloczyny kartezjańskie
52
Łączenia zgodne z SQL
• Cross – iloczyn kartezjański
• Natural - naturalne
• Klauzula Using
• Pełne lub dwustronne zewnętrzne
• Arbitralne warunki łączenia dla łączeń
zewnętrznych
53
Łączenie tabel
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column1 = table2.column2;
54
Łączenie tabel
SELECT *
FROM
employees, departments
WHERE
employees.department_id = departments.department_id;
55
Używanie aliasów tabel
SELECT *
FROM
employees, departments
WHERE
employees.department_id = departments.department_id;
SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM
employees e , departments d
WHERE
e.department_id = d.department_id;
56
Łączenia Naturalne
• Klauzula NATURAL JOIN bazuje na wszystkich kolumnach z
dwóch tabel, które mają tę samą nazwę.
• Wybiera wiersze z dwóch tabel tak, aby wartości w tych samych
kolumnach obu tabel były zgodne.
• Jeśli kolumny mające identyczne nazwy mają rożne typy
danych, wówczas zwracany jest błąd.
57
Łączenia Naturalne
SELECT department_id, department_name,
location_id, city
FROM
departments NATURAL JOIN locations ;
58
Tworzenie łączeń z klauzulą ON
• Warunek łączenia dla łączenia naturalnego w podstawowym przypadku jest
warunkiem równościowym dla wszystkich kolumn o tej samej nazwie.
• Aby określić arbitralny warunek lub określić kolumny do łączenia używa się
klauzuli ON.
SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM
employees e JOIN departments d
ON
(e.department_id = d.department_id);
59
Tworzenie łączeń z klauzulą ON
SELECT employee_id, city, department_name
FROM
employees e
JOIN
departments d
ON
d.department_id = e.department_id
JOIN
locations l
ON
d.location_id = l.location_id;
60
Dodatkowe warunki
SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM
employees e JOIN departments d
ON
(e.department_id = d.department_id)
AND
e.manager_id = 149 ;
61
„Relacyjne Bazy Danych (Oracle)”
Prezentacja jest współfinansowana przez
Unię Europejską w ramach
Europejskiego Funduszu Społecznego w projekcie pt.
„Innowacyjna dydaktyka bez ograniczeń - zintegrowany rozwój Politechniki Łódzkiej zarządzanie Uczelnią, nowoczesna oferta edukacyjna i wzmacniania zdolności do
zatrudniania osób niepełnosprawnych”
Prezentacja dystrybuowana jest bezpłatnie
Projekt współfinansowany przez Unię Europejską
w ramach Europejskiego Funduszu Społecznego
Politechnika Łódzka, ul. Żeromskiego 116, 90-924 Łódź, tel. (042) 631 28 83
www.kapitalludzki.p.lodz.pl
62
Download