Professional Documents
Culture Documents
Tabela bazodanowa jest to obiekt bazy danych w którym są przechowywane dane np. dane
personalne pracowników, dane kontrahentów itd. Poniżej przedstawione są dwie tabele które
będą używane do omawiania języka SQL.
-) tabela PRACOWNICY
-) tabela KONTRAHENCI
1
przykład 1
chcemy wyświetlić wszystkie nazwiska z tabeli PRACOWNICY
odpowiedź 1
Nazwisko
----------
Kowalski
Wiącek
Piątek
Lewandowski
przykład 2
chcemy wyświetlić wszystkie dane z tabeli PRACOWNICY
odpowiedź 2
Select distinct używamy jeżeli chcemy wyświetlić dane niepowtarzające się tj. bez
duplikatów, najbardziej będzie to widoczne na przykładzie: w tabeli PRACOWNICY w
kolumnie Imie mamy 4 rekordy Piotr, Marzena, Dominik, Piotr dwa z nich są identyczne,
żeby wyświetlić dane bez duplikatów tj. powtarzające się dane wyświetlić tylko raz,
używamy select distinct
przykład 1:
odpowiedź 1:
2
w wyniku uruchomienia tego zapytania otrzymamy następujący wynik:
Imie
------
Piotr
Marzena
Dominik
Polecenie SELECT COUNT służy do zliczania wierszy w tabeli, możemy zliczać wszystkie
wiersze z tabeli lub wybrane wiersze w tym celu tworzymy zapytanie z warunkiem lub
warunkami po klauzuli WHERE
Odpowiedź 1
count(*)
4
czyli w tej tabeli mamy 4 wiersze czyli wszystko się zgadza
Odpowiedź 2
count(Imie)
4
Odpowiedź 3
count(distinct Imie)
3
GROUP BY nazwa_kolumny;
Przykład 1
chcemy zsumować liczbę dzieci grupując po imieniach - w tym przypadku przykład jest
czysto fikcyjny żeby pokazać tylko mechanizm
Odpowiedź 1
select imie, sum(Liczba_dzieci) from PRACOWNICY
group by imie;
Imie sum(Liczba_dzieci)
--------- -------------
Piotr 9
Marzena 2
Dominik 1
Przykład 2
chcemy zliczyć liczba imion, ile razy dane imie występuje w tabeli PRACOWNICY
Odpowiedź 2
Imie count(Liczba_dzieci)
--------- -------------
Piotr 2
Marzena 1
Dominik 1
dla Piotr count(Liczba_dzieci)=2 ponieważ sa dwa wiersze gdzie imie jest Piotr
dla Piotr sum(Liczba_dzieci)=9 ponieważ 3+6 =9
Przykład 1
chcemy zliczyć sumę dzieci grupując po imieniu tak jak w przykładzie 1 ( SELECT GROUP
4
BY ) a następnie wyświetlić tylko te rekordy gdzie suma dzieci jest większa od 1 czyli 2 i
więcej
Odpowiedź 1
select imie, sum(Liczba_dzieci) from PRACOWNICY
group by imie
having sum(Liczba_dzieci)>1;
Imie sum(Liczba_dzieci)
--------- -------------
Piotr 9
Marzena 2
Przykład 2
chcemy zliczyć liczba imion, ile razy dane imie występuje w tabeli PRACOWNICY tak jak w
przykładzie 2 ( SELECT GROUP BY ) a następnie wyświetlić tylko te rekordy gdzie liczba
dzieci jest mniejsza niż 2 czyli 1 i mniej
Odpowiedź 2
select imie, count(Liczba_dzieci) from PRACOWNICY
group by imie
having count(Liczba_dzieci)<2;
Imie count(Liczba_dzieci)
--------- -------------
Marzena 1
Dominik 1
ORDER BY NAZWA_KOLUMNY;
Przykład 1
Chcemy wyświetlić Miejsce_urodzenia z tabeli PRACOWNICY posortowane alfabetycznie
Odpowiedź 1
select Miejsce_urodzenia from PRACOWNICY
order by Miejsce_urodzenia;
Miejsce_urodzenia
---------------
Gdańsk
5
Katowice
Kraków
Warszawa
Przykład 2
to samo co w przykładzie 1 ale sortujemy malejąco
Odpowiedź 2
wynik zapytania:
Miejsce_urodzenia
---------------
Warszawa
Kraków
Katowice
Gdańsk
Przykład 3
Odpowiedź 3
select Miejsce_urodzenia from PRACOWNICY
order by Miejsce_urodzenia ASC;
Miejsce_urodzenia
---------------
Gdańsk
Katowice
Kraków
Warszawa
podsumowanie:
przykład 1 i 3 daja ten sam rezultat, ponieważ jeżeli nie wpiszemy w jaki sposób chcemy
sortować tj. malejąco DESC, czy rosnąco ASC to defaultową wartością jest ASC (rosnąco),
dobrym zwyczajem jest jednak wpisywanie, żeby uniknąć domysłów
Przykład 4
wyświetlić wszystkie dane z tabeli PRACOWNICY posortowane malejąco po liczba_dzieci
Odpowiedź 4
select * from PRACOWNICY
order by liczba_dzieci DESC;
6
Imie Nazwisko Data_urodzenia Miejsce_urodzenia Liczba_dzieci
---- ---------- ----------- ------------ -------------
Piotr Lewandowski 22-09-1997 Katowice 6
Piotr Kowalski 23-05-1970 Warszawa 3
Marzena Wiącek 12-09-1973 Kraków 2
Dominik Piątek 01-01-2000 Gdańsk 1
Przykład 5
wyświetlić wszystkie dane z tabeli PRACOWNICY posortowane rosnąco po imie a następnie
po Liczba_dzieci
Odpowiedź 5
select * from PRACOWNICY
order by Imie, liczba_dzieci ASC;
wynik:
Przykład 6
wyświetlić imię i nazwisko z tabeli PRACOWNICY posortowane po nazwisku malejąco, ale
po order by nie wymieniamy nazwy kolumny tylko piszemy cyfrę która to kolumna,
kolejność kolumn widać w zapytaniu selekt
Odpowiedź 6
wynik:
Imie Nazwisko
---- ----------
Marzena Wiącek
Dominik Piątek
Piotr Lewandowski
Piotr Kowalski
W Oracle SQL mamy wiele różnych funkcji które możemy używać w zapytaniach SELECT
Już we wcześniejszych przykładach używaliśmy funkcji takich jak sum, count itp, teraz
omówimy dokładnie podstawowe funkcje
Przykład 1
zsumować wszystkie dzieci pracowników z tabeli PRACOWNICY
7
Odpowiedź 1
sum(Liczba_dzieci)
12
Przykład 2
w tym przykładzie wyświetlimy tylko 3 pierwsze litery z kolumny Miejsce_urodzenia z tabeli
PRACOWNICY
Odpowiedź 2
Miejsce_urodzenia
-------------
War
Kra
Gda
Kat
Przykład 3
w tym przykładzie wyświetlimy średnią ilość dzieci w tabeli pracownicy
Odpowiedź 3
avg(Liczba_dzieci)
3
Przykład 4
chcemy wyświetlić maxymalną ilość dzieci z tabeli PRACOWNICY
Odpowiedź 4
wynik zapytania:
max(Liczba_dzieci)
6
8
Przykład 5
chcemy wyświetlić minimalną ilość dzieci z tabeli PRACOWNICY
Odpowiedź 5
wynik zapytania:
min(Liczba_dzieci)
1
Przykład 6
funkcja ltrim, rtrim - funkcje te służa do usuwania np. spacji przed lub za danym ciągiem
znaków
ten przykład pokażę na tabeli wirtualnej dual
Odpowiedź 6
wynik:
czyli widzimy że spacje po lewej stronie zostały usunięte, analogicznie działa polecenie rtrim
tylko po prawej stronie
Jak już wiemy w jaki sposób można wyświetlić dane z jednej tabeli to teraz pójdziemy krok
dalej i wyświetlimy dane z dwóch tabel, łączenia tabel dokonujemy w klauzuli where, jest
kilka sposobów łączenia tabel w bazie Oracle
Przykład 1
wyświetlić dane z dwóch tabel: tab1 i tab2
Odpowiedź 1
tabela: tab1
tabela: tab2
9
tab1_id pensja premia
----------- ----------- -----------
1 4560 100
2 1000 100
3 450 200
to jest najbardziej prosty przykład połączenia 2 tabel, możemy łączyć oczywiście kilka tabel
Przykład 1
Odpowiedź 1
Przykład2
chcemy zrobić raport naszych kontrahentów z tabeli kontrahenci, format jak poniżej
10
nazwa_firmy;adres_ulica;adres_kod;adres_miejscowość
Odpowiedź 2
taki sposób przedstawienia danych może się przydać np. do zapisania do pliku tekstowego a
następnie zaimportowania danych do excela, separatorem będzie ;
SQL ALIAS - aliasy w zapytaniach select służą do zastępowania mało czytelnych nazw
kolumn w wynikach zapytania select a także do zmiany nazw kolumn lub wyrażeń w
raportach wyników z zapytania select.
głównie używamy aliasów jeżeli chcemy np. zmienić nazwę kolumny w wyświetlanym
rezultacie (raporcie), czyli zmiana nazwy
przykład 1
proszę zliczyc liczbę dzieci z tabeli PRACOWNICY, a następnie kolumnę wyniku liczenia
nazwać 'Licz. dzieci'
odpowiedź 1
select count(*) "Licz. dzieci" from PRACOWNICY;
wynik
Licz. dzieci
12
count(*)
12
przykład 2
wyświetlić nazwy firmy z tabeli KONTRAHENCI i zrobic alias FIRMY
odpowiedź 2
select Nazwa_firmy FIRMY from KONTRAHENCI;
wynik
FIRMY
----
Firma1
AAA3 consulting
Bbb2 company
Firma2
przykład 3
11
wyświetlić imie i nazwisko z tabeli PRACOWNICY i zrobić odpowiednio aliasy IMIĘ ,
NAZWISKO
odpowiedź 3
select imie IMIE, nazwisko NAZWISKO from pracownicy;
wynik zapytania:
IMIE NAZWISKO
---- -----------
Piotr
Kowalski
Marzena
Wiącek
Piątek
Dominik
Lewandowski
Piotr
12