You are on page 1of 12

Język SQL - Structured Query Language

SQL - Structured Query Language to język który jest wykorzystywany do wyświetlania,


wstawiania i modyfikowania danych w bazie danych. Początki tego języka sięgają 1974 roku
wtedy powstawała pierwsza relacyjna baza danych w firmie IBM. Obecnie różne bazy danych
np. oracle, mysql, sybase i inne korzystają z SQL-a ale mimo przyjętego standardu sql-a,
używany przez te firmy SQL różni się nieznacznie.

Oracle - tabela bazodanowa

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

Imie Nazwisko Data_urodzenia Miejsce_urodzenia Liczba_dzieci


----- -------- ---------------- -------------------- --------------
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
Piotr Lewandowski 22-09-1997 Katowice 6

-) tabela KONTRAHENCI

Nazwa_firmy Adres_ulica Adres_kod Adres_miejscowość


-------------- ------------- ------------- ---------------------
Firma1 Kownackiego 1 00-119 Warszawa
AAA3 consulting Wieloskowski 5/3 02-111 Katowice
Bbb2 company Lwowian 44/46 00-001 Kraków
Firma2 Wielkiego 8 30-001 Ustroń

Polecenie SELECT ORACLE

SELECT - podstawowym i najczęściej używanym poleceniem w SQL jest polecenie


SELECT, służy ono do wyświetlania danych z tabeli.Możemy wyświetlać dane z całej tabeli
lub z wybranej części tabeli np. wybranych kolumn, wybranych wierszy.Do zademonstrowania
jak działa polecenie select wykorzystamy tabelę PRACOWNICY

Imie Nazwisko Data_urodzenia Miejsce_urodzenia Liczba_dzieci


----- -------- ---------------- -------------------- --------------
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
Piotr Lewandowski 22-09-1997 Katowice 6

zapytanie SELECT wygląda jak poniżej

SELECT nazwa_kolumny1, nazwa_kolumny2 from PRACOWNICY;

1
przykład 1
chcemy wyświetlić wszystkie nazwiska z tabeli PRACOWNICY

odpowiedź 1

w tym celu tworzymy następujące zapytanie select:

select nazwisko from PRACOWNICY;

w wyniku tego zapytania otrzymamy następujący wynik:

Nazwisko
----------
Kowalski
Wiącek
Piątek
Lewandowski

przykład 2
chcemy wyświetlić wszystkie dane z tabeli PRACOWNICY

odpowiedź 2

select * from PRACOWNICY;

w wyniku tego zapytania otrzymamy następujący wynik:

Imie Nazwisko Data_urodzenia Miejsce_urodzenia Liczba_dzieci


----- -------- ---------------- -------------------- --------------
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
Piotr Lewandowski 22-09-1997 Katowice 6

Polecenie SELECT DISTINCT

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

SELECT DISTINCT nazwa_kolumny from NAZWA_TABELI;

przykład 1:

chcemy wyświetlić wszystkie imiona (niepowtarzające się) z tabeli PRACOWNICY

odpowiedź 1:

żeby wykonać to zadanie wykonamy następujące zapytanie

SELECT DISTINCT Imie from PRACOWNICY;

2
w wyniku uruchomienia tego zapytania otrzymamy następujący wynik:

Imie
------
Piotr
Marzena
Dominik

SELECT COUNT - zliczanie wierszy w SQL ORACLE

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

SELECT count(*) from NAZWA_TABELI;

Przykład 1 chcemy zliczyć wszystkie wiersze w tabeli PRACOWNICY

Odpowiedź 1

select count(*) from PRACOWNICY;


w wyniku tgo zapytania dla naszej tabeli otrzymamy wynik jak poniżej

count(*)
4
czyli w tej tabeli mamy 4 wiersze czyli wszystko się zgadza

Przykład 2 chcemy zliczyć wszystkie wartości w kolumnie Imie w tabeli PRACOWNICY

Odpowiedź 2

select count(Imie) from PRACOWNICY;

wynik jak poniżej:

count(Imie)
4

Przykład 3 chcemy zliczyć unikalne wpisy w kolumnie Imie

Odpowiedź 3

select count(distinct Imie) from PRACOWNICY;

w tym przypadku otrzymamy wynik:

count(distinct Imie)
3

i tutaj dostaliśmy wartość 3 ponieważ mamy zduplikowane imie Piotr

Funkcja grupująca GROUP BY w ORACLE sql


3
SELECT GROUP BY - group by służy do grupowania danych, przydatna jest wtedy kiedy
chcemy np. pogrupować i posumować lub zliczyć dane

SELECT nazwa_kolumny, nazwa_loumny2 from NAZWA_TABELI

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;

wynik zapytania jak poniżej

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

select imie, count(Liczba_dzieci) from PRACOWNICY


group by imie;

w wyniku zapytania otrzymamy:

Imie count(Liczba_dzieci)
--------- -------------
Piotr 2
Marzena 1
Dominik 1

CZY widzisz różnicę miedzy tymi select-ami?

dla Piotr count(Liczba_dzieci)=2 ponieważ sa dwa wiersze gdzie imie jest Piotr
dla Piotr sum(Liczba_dzieci)=9 ponieważ 3+6 =9

SELECT GROUP BY HAVING SQL Oracle

SELECT GROUP BY HAVING - grupowanie danych a potem ustawienie warunku na wynik


grupowania, np. chcemy zliczać dane w grupach

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;

wynik zapytania jak poniżej

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;

w wyniku zapytania otrzymamy:

Imie count(Liczba_dzieci)
--------- -------------
Marzena 1
Dominik 1

Sortowanie danych SELECT ORDER BY w Oracle SQL

Polecenie SELECT ORDER BY - służy do sortowania wyników zapytania, sortowanie może


odbywać się rosnąco lub malejąco, na wybranej kolumnie lub wybranych kolumnach

SELECT NAZWA_KOLUMNY, NAZWA_KOLUMNY2, .... FROM NAZWA_TABELI

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;

w wyniku tego zapytania otrzymamy:

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

select Miejsce_urodzenia from PRACOWNICY


order by Miejsce_urodzenia DESC;

wynik zapytania:

Miejsce_urodzenia
---------------
Warszawa
Kraków
Katowice
Gdańsk

Przykład 3

Chcemy wyświetlić Miejsce_urodzenia z tabeli PRACOWNICY posortowane alfabetycznie,


ale używając ASC

Odpowiedź 3
select Miejsce_urodzenia from PRACOWNICY
order by Miejsce_urodzenia ASC;

w wyniku tego zapytania otrzymamy:

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;

w wyniku tego zapytania otrzymamy następujący wynik

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:

Imie Nazwisko Data_urodzenia Miejsce_urodzenia Liczba_dzieci


---- ---------- ----------- ------------ -------------
Dominik Piątek 01-01-2000 Gdańsk 1
Marzena Wiącek 12-09-1973 Kraków 2
Piotr Kowalski 23-05-1970 Warszawa 3
Piotr Lewandowski 22-09-1997 Katowice 6

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

select imie, nazwisko from PRACOWNICY


order by 2 DESC;

wynik:

Imie Nazwisko
---- ----------
Marzena Wiącek
Dominik Piątek
Piotr Lewandowski
Piotr Kowalski

Funkcje SQL w bazie ORACLE

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

select sum(Liczba_dzieci) from PRACOWNICY;

w wyniku tego zapytania otrzymamy

sum(Liczba_dzieci)
12

ponieważ 3+2+1+6 =12

Przykład 2
w tym przykładzie wyświetlimy tylko 3 pierwsze litery z kolumny Miejsce_urodzenia z tabeli
PRACOWNICY

Odpowiedź 2

select substr(Miejsce_urodzenia,1,3) from PRACOWNICY;

wynik tego zapytania będzie następujący

Miejsce_urodzenia
-------------
War
Kra
Gda
Kat

Przykład 3
w tym przykładzie wyświetlimy średnią ilość dzieci w tabeli pracownicy

Odpowiedź 3

select avg(Liczba_dzieci) from PRACOWNICY;

wynik jak poniżej:

avg(Liczba_dzieci)
3

wynik ten otrzymaliśmy ponieważ 3+2+1+6=12 12/4 =3

Przykład 4
chcemy wyświetlić maxymalną ilość dzieci z tabeli PRACOWNICY

Odpowiedź 4

select max(Liczba_dzieci) from PRACOWNICY;

wynik zapytania:

max(Liczba_dzieci)
6

8
Przykład 5
chcemy wyświetlić minimalną ilość dzieci z tabeli PRACOWNICY

Odpowiedź 5

select min(Liczba_dzieci) from PRACOWNICY;

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

select '+' ltrim(' to jest przykład ') '+' from dual;

wynik:

+to jest przykład +

czyli widzimy że spacje po lewej stronie zostały usunięte, analogicznie działa polecenie rtrim
tylko po prawej stronie

Oracle łączenie tabel SQL JOIN

SQL JOIN - łączenie tabel w Oracle

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

tab_id imie nazwisko


----------- -------- -------------
1 piotr fraczek
2 wiktor bielak
3 oleg wiktorow

tabela: tab2

9
tab1_id pensja premia
----------- ----------- -----------
1 4560 100
2 1000 100
3 450 200

select a.imie, a.nazwisko , b.pensja, b.premia


from tab1 a, tab2 b
where a.tab_id=b.tab1_id;

w wyniku tego zapytania otrzymamy:

imie nazwisko pensja premia


------- ----------- ---------- -----------
piotr fraczek 4560 100
wiktor bielak 1000 100
oleg wiktorow 450 200

to jest najbardziej prosty przykład połączenia 2 tabel, możemy łączyć oczywiście kilka tabel

SQL CONCATENATE - łączenie stringu z wartościami oracle

ORACLE SQL CONCATENATE - konkatenacja służy do łączenia stringu np. z wartościami


z tabeli

Przykład 1

Chcemy wstawić dodatkowy opis do zwracanych wyników zapytania, do tego celu


zastosujemy właśnie konkatenacje, w oracle database możemy zrobić przez znak 2 pipe ||

chcemy otrzymać wynik jak poniżej

Imie pracownika: Piotr, Nazwisko pracownika: Kowalski


itd

Odpowiedź 1

select 'Imie pracownika: '||imie||', Nazwisko pracownika:'||nazwisko from pracownicy;

wynik będzie jak poniżej:

'Imie pracownika: '||imie||', Nazwisko pracownika: '||nazwisko

Imie pracownika: Piotr, Nazwisko pracownika: Kowalski


Imie pracownika: Marzena, Nazwisko pracownika: Wiącek
Imie pracownika: Dominik, Nazwisko pracownika: Piątek
Imie pracownika: Piotr, Nazwisko pracownika: Lewandowski

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

do tego celu robimy następujący select

select Nazwa_firmy||';'||adres_ulica||';'||adres_kod||';'||adres_miejscowość from


KONTRAHENCI;

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 ;

ORACLE SQL ALIAS - aliasy w zapytaniach select

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

bez tego aliasu wynik byłby jak poniżej

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

You might also like