Podstawy języka SQL
mgr inż. Joanna Wiśniewska
Instytut Systemów Informatycznych
mgr inż. Joanna Wiśniewska ISI WCY
Polecenie SELECT
Składnia:
SELECT nazwaKol, nazwaKol, …
FROM nazwaTabeli;
* - wszystkie kolumny
mgr inż. Joanna Wiśniewska ISI WCY
Przykład
(tabela Pracownicy)
Pesel
Imię
Nazwisko
Miasto
Ulica
Nr domu
9787598
7
Adam
Kowalski
Warszawa
Miła
34
5680000
6
Michał
Nowak
Kraków
Wesoła
23
3459999
0
Alicja
Wojciechowska
Kielce
Centralna
56
mgr inż. Joanna Wiśniewska ISI WCY
Przykład
SELECT Imię, Nazwisko, Miasto FROM
Pracownicy;
Imię
Nazwisko
Miasto
Adam
Kowalski
Warszawa
Michał
Nowak
Kraków
Alicja
Wojciechowsk
a
Kielce
mgr inż. Joanna Wiśniewska ISI WCY
Wybór warunkowy WHERE
SELECT nazwaKol FROM nazwaTab
WHERE warunekLogiczny;
NrID
Pensja
Zyski
Stanowisko
456
7500
1500
kierownik
328
6500
1500
kierownik
345
6000
1500
kierownik
753
5000
1250
kierownik
678
3000
500
ochrona
234
2500
200
ochrona
674
2000
100
ochrona
325
1800
1000
ekspedient
982
1500
800
ekspedient
tabela Stanowiska
mgr inż. Joanna Wiśniewska ISI WCY
Przykład
SELECT NrID FROM Stanowiska
WHERE Pensja >= 5000;
NrID
456
328
345
753
mgr inż. Joanna Wiśniewska ISI WCY
Przykład 2
SELECT NrID FROM Stanowiska
WHERE Stanowisko = ‘ochrona’;
NrID
678
234
674
mgr inż. Joanna Wiśniewska ISI WCY
Operatory AND i OR
Aby wyświetlić kierowników zarabiających
ponad 5500:
SELECT NrID FROM Stanowiska WHERE
(Pensja > 5500) AND (Stanowisko =
‘kierownik’);
Aby wyświetlić ekspedientów lub osoby
z zyskiem poniżej 700:
SELECT NrID FROM Stanowiska WHERE
(Zysk < 700) OR (Stanowisko =
‘ekspedient’);
mgr inż. Joanna Wiśniewska ISI WCY
Łączenie operatorów
SELECT NrID FROM Stanowiska
WHERE Stanowisko=‘kierownik’
AND Pensja=6000 OR Zyski=1500;
[(…AND …) OR …]
SELECT NrID FROM Stanowiska
WHERE Stanowisko=‘kierownik’
AND (Pensja=6000 OR
Zyski=1500);
mgr inż. Joanna Wiśniewska ISI WCY
Operatory IN i BETWEEN
Lista numerów kierowników i
ekspedientów: SELECT NrID FROM
Stanowiska WHERE Stanowisko IN
(‘kierownik’, ‘ekspedient’);
Pracownicy zarabiający pomiędzy 2000 a
6000: SELECT NrID FROM Stanowiska
WHERE Pensja BETWEEN 2000 AND 6000;
Można też używać: NOT IN i NOT
BETWEEN.
mgr inż. Joanna Wiśniewska ISI WCY
Operator LIKE
Jeżeli chcemy znaleźć pracowników,
których stanowisko zaczyna się na
literę „k”: SELECT NrID FROM
Stanowiska WHERE Stanowisko LIKE
‘k%’;
…LIKE ‘%a’;
…LIKE ‘%c%’;
Można też używać: NOT LIKE.
mgr inż. Joanna Wiśniewska ISI WCY
„Dzikie karty”
Match
expression
Description
Returns
'Mc%'
Search for every name that begins with the letters
Mc
McEvoy
'%er'
Search for every name that ends with er
Brier, Miller,
Weaver,
Rayner
'%en%'
Search for every name containing the letters en.
Pettengill, Lencki,
Cohen
'_ish'
Search for every four-letter name ending in ish.
Fish
'Br[iy][ae]r'
Search for Brier, Bryer, Briar, or Bryar.
Brier
'[M-Z]owell'
Search for all names ending with owell that begin
with a single letter in the range M to Z.
Powell
'M[^c]%'
Search for all names beginning with M' that do not
have c as the second letter
Moore, Mulley,
Miller,
Masalsky
mgr inż. Joanna Wiśniewska ISI WCY
Dane pochodzące z wielu tabel
Autorzy
# idA
* Imie
* Nazwisko
AutKs
→ idA
→ idK
Książki
# idK
* Tytuł
1
N
1
N
mgr inż. Joanna Wiśniewska ISI WCY
Aliasy AS
Popularną techniką jest tworzenie
aliasów nazw tabel – zwłaszcza, gdy
stosujemy podzapytania lub
operujemy na wielu tabelach, np.
SELECT a.nazwisko FROM Autorzy AS
a WHERE a.idA=AutKs.idA;
mgr inż. Joanna Wiśniewska ISI WCY
Złączenia
JOIN (tzw. equijoin), UNION
INNER (default) i OUTER JOIN
OUTER JOIN może być lewo- lub
prawo-stronny (LEFT, RIGHT)
Składnia:
SELECT nazwyKol FROM nazwaTab
LEFT OUTER JOIN nazwaTab ON
warunek;
mgr inż. Joanna Wiśniewska ISI WCY
UNION
SELECT IDPosiadacza FROM Towary
UNION SELECT IDKupującego FROM
Zamówienia [WHERE …] – numery ID
osób zostaną wyświetlone w jednej
kolumnie (typy łączonych kolumn
muszą więc być takie same)
Instrukcję UNION można zastosować
np. do połączenia całych dwóch tabel
(o ile pozwalają na to typy danych)
mgr inż. Joanna Wiśniewska ISI WCY
INNER JOIN (default)
SELECT Klienci.nazwisko, Sprzedaż.IDK,
Sprzedaż.ilość FROM Klienci JOIN
Sprzedaż ON Klienci.IDK=Sprzedaż.IDK
Klienci
IDK
nazwisko
1
Kowalski
2
Nowak
3
Krajewski
4
Majewski
Sprzedaż
IDK
IDP
ilość
1
2
15
1
3
5
4
1
37
3
5
11
4
2
1003
nazwisk
o
IDK
ilość
Kowalski
1
15
Kowalski
1
5
Majewski
4
37
Krajewski
3
11
Majewski
4
1003
mgr inż. Joanna Wiśniewska ISI WCY
LEFT/RIGHT OUTER JOIN
SELECT Klienci.nazwisko, Sprzedaż.IDK,
Sprzedaż.ilość FROM Klienci LEFT OUTER
JOIN Sprzedaż ON Klienci.IDK=Sprzedaż.IDK
Klienci
IDK
nazwisko
1
Kowalski
2
Nowak
3
Krajewski
4
Majewski
Sprzedaż
IDK
IDP
ilość
1
2
15
1
3
5
4
1
37
3
5
11
4
2
1003
nazwisko
IDK
ilość
Kowalski
1
15
Kowalski
1
5
Majewski
4
37
Krajewski
3
11
Majewski
4
1003
Nowak
null
null
mgr inż. Joanna Wiśniewska ISI WCY
DISTINCT i ORDER BY
DISTINCT – eliminacja duplikatów
(stosujemy przed nazwą kolumny)
ORDER BY – sortowanie
wyświetlanych danych po zadanej
kolumnie (ASC↑, DESC↓)
SELECT DISTINCT Nazwisko, Imie
FROM Posiadacze, Zamowienia
WHERE idSprzedawcy=idPosiadacza
ORDER BY Nazwisko DESC;
mgr inż. Joanna Wiśniewska ISI WCY
Funkcje agregujące
Dotyczą wierszy zawierających wartości
liczbowe:
SUM()
AVG()
MAX()
MIN()
COUNT(*) – zwraca ilość wierszy
spełniających określony warunek
mgr inż. Joanna Wiśniewska ISI WCY
Przykłady
SELECT SUM(Pensja) {AVG(Pensja)}
FROM Stanowiska;
SELECT MIN(Zyski) {MAX(Zyski)}
FROM Stanowiska WHERE Stanowisko
= ‘kierownik’;
SELECT COUNT(*) FROM Stanowiska
WHERE Stanowisko = ‘ochrona’;
mgr inż. Joanna Wiśniewska ISI WCY
GROUP BY i HAVING
GROUP BY – grupuje zwracane
rekordy wg podanej kolumny, np.
SELECT idPosiadacza, Rzecz FROM
Antyki GROUP BY idKupującego;
HAVING – „mający”, np. SELECT
idPosiadacza, Rzecz FROM Antyki
GROUP BY idKupującego HAVING
Cena >1000;
mgr inż. Joanna Wiśniewska ISI WCY
Inne „pomocne” operatory
EXISTS (zwraca 0 lub 1), np. SELECT
Imie, Nazwisko FROM PosiadaczeA
WHERE EXISTS (SELECT * FROM
Antyki WHERE Rzecz=‘stół’);
ALL, ANY
FIRST – SELECT FIRST * FROM
PosiadaczeA ORDER BY Nazwisko;
TOP – SELECT TOP 5 * FROM
PosiadaczeA ORDER BY Nazwisko;
mgr inż. Joanna Wiśniewska ISI WCY
Niektóre funkcje matematyczne
ABS(X) – moduł z X,
CEIL(X) – zaokrąglenie w górę dziesiętnego X-a,
FLOOR(X) – zaokrąglenie w dół dziesiętnego X-a,
GREATEST(X,Y) – zwraca największą z tych dwóch
wartości,
LEAST(X,Y) - zwraca mniejszą z tych dwóch wartości,
MOD(X,Y) – zwraca resztę z dzielenia X przez Y,
POWER(X,Y) – zwraca X do potęgi Y,
ROUND(X,Y) – zaokrągla X do Y miejsc po przecinku
(gdy Y jest pominięte, zaokrąglenie następuje do
najbliższej liczby całkowitej),
SIGN(X) – zwraca minus gdy X<O lub plus w innym
wypadku,
SQRT(X) – zwraca pierwiastek kwadratowy z X.
mgr inż. Joanna Wiśniewska ISI WCY
Operacje na tabelach
CREATE TABLE nazwa (nazwy i typy kolumn);
ALTER TABLE nazwa ADD (nazwa i typ
kolumny);
INSERT INTO nazwaTab VALUES (…);
DELETE FROM nazwaTab WHERE
warunekLogiczny;
UPDATE nazwaTab SET nazwaKol=…
WHERE warunekLogiczny;
DROP TABLE nazwaTab;