BAZY DANYCH SQL


SQL
I. Wyszukiwanie
OPERATORY: =,<,>,NOT(BETWEEN,IN, LIKE, IS NULL),!= (różne)
FUNKCJE: UPPER(nazwisko)='MA%', LOWER(nazwisko)='%JA', funkcje trymujące
SELECT * FROM nazwa_tabeli;
*) KLIENT
1) NUMER
2) NAZWISKO
3) IMIE
4) TELEFON
5) WIEK
6) PLEC
7) WZROST
8) WAGA
9) ZAWOD
*) OPLATA
1) NUMER
2) KWOTA
3) DATA_WPLATY
SELECT * FROM klient;
1. Rzutowanie:
SELECT imie,nazwisko,wiek FROM klient;
2. Selekcja:
SELECT FROM
WHERE
SELECT * FROM klient
WHERE plec='M' AND wiek>40;
SELECT * FROM klient
WHERE wiek BETWEEN 18 AND 80;
SELECT * FROM klient
WHERE wiek IN (160,168,172);
SELECT * FROM klient
WHERE zawod IN ('Adwokat','Sędzia');
SELECT * FROM klient
WHERE nazwisko LIKE '%SKI';
LIKE 'MA%';
% - zastępuje dowolny ciąg znaków
_ - zastępuje jeden znak
2
3. Porządkowanie:
SELECT * FROM klient
ORDER BY nazwisko; (lub zamiast nazwy pola numer kolumny)
SELECT * FORM klient
ORDER BY nazwisko DESC;
ORDER BY nazwisko,imie - występuje zawsze jako ostatni punkt składni przy poleceniach złożonych
FUNKCJE STATYSTYCZNE:
COUNT(*) - zlicza ilość rekordów
SUM(wyr_num) - suma
AVG(wyr_num) - średnia arytmetyczna
MAX(wyr_num,wyr_datowe,wyr_tekstowe) - maksymalna wartość
MIN(wyr_num,wyr_datowe,wyr_tekstowe) minimalna wartość
SELECT COUNT(*) FROM klient
WHERE plec='M';
SELECT AVG(wiek) FROM klient;
SELECT SUM(kwota) FROM oplata;
SELECT MAX(kwota),MIN(kwota) FROM oplata;
4. Grupowanie:
SELECT COUNT(*),plec FROM klient
GROUP BY plec;
SELECT COUNT(*),wiek FROM klient
GROUP BY wiek;
SELECT zawod,MAX(wiek),MIN(wiek),COUNT(8) FROM klient
GROUP BY zawod
ORDER BY zawod;
SELECT zawod FROM klient
GROUP BY zawod;
SELECT COUNT(DISTINCT zawod) FROM klient; DISTINCT - bez powtórzeń
SELECT DISTINCT nazwisko FROM klient;
SELECT COUNT(*),zawod FROM klient
GROUP BY zawod
HAVING COUNT(*)>5;
SELECT zawod,AVG(wiek) FROM klient
GROUP BY zawod
HAVING AVG(wiek)<40;
HAVING jak WHERE tylko, że dla warunek dla wybranej grupy.
3
II. Podzapytania
SELECT * FROM klient
WHERE wiek=(SELECT MIN(wiek) FROM klient);
W podzapytaniach musi być zgodność typów, oraz może być dowolna ilość zagnieżdżeń.
OPERATORY PODZAPYTAC: EXISTS, NOT EXISTS, ALL, ANY
SELECT * FROM klient
WHERE wiek>ALL; (>ANY)
SELECT atrybuty
FROM tabele
WHERE atrybut IN/NOT IN ();
SELECT DISTINCT nazwa_klienta FROM pożyczkobiorcy
WHERE nazwa_klienta IN (SELECT nazwa_klienta FROM depozytorzy);
SELECT DISTINCT nazwa_klienta FROM pożyczkobiorcy
WHERE nazwa_klienta NOT IN ("Kowalski","Nowak");
PORÓWNYWANIE:
WHERE pole operator SOME/ALL podzapytanie
SELECT nazwa_filii FROM filie
WHERE aktywa>SOME (SELECT aktywa FROM filie WHERE miasto="Kraków");
SELECT nazwa_filii FROM filie
WHERE aktywa>ALL (SELECT aktywa FROM filie WHERE miasto="Kraków");
TESTOWANIE:
Testowanie czy wynik zapytania zawiera jakiekolwiek rekordy: EXISTS,NOT EXISTS
SELECT nazwa_klienta FROM pożyczkobiorcy
WHERE EXISTS (SELECT * FROM depozytorzy
WHERE depozytorzy.nazwa_klienta=pożyczkobiorcy.nazwa_klienta);
Testowanie na obecność powtarzających się rekordów: WHERE UNIQUE/ UNIQUE NOT
W klauzuli FROM możemy używać podzapytań, jednak należy wówczas nadać wynikowi takiego podzapytania
nową nazwę, można także zmienić nazwy atrybutów:
SELECT nazwa_filii,średni_bilans
FROM (SELECT nazwa_filii,AVG(bilans) FROM depozytorzy
GROUP BY nazwa_filii)
AS wynik(nazwa_filii,średni_bilans)
WHERE średni_bilans>1200;
ZACZENIA:
SELECT * FROM klient,oplata; - nie robić iloczyn kartezjański
SELECT nazwisko,imie FROM klient,oplata
WHER klient.numer=oplata.numer;
ALIASY
SELECT nazwisko,imie FROM klient AS K,oplata AS O
WHERE K.numer=O.numer;
4
Pozostałe funkcje takie jak GROUP BY,ORDER BY także funkcjonują w stosunku do tabel połączonych
SELECT nazwisko,imieFROM klient AS K,oplata AS O
WHERE K.numer=O.numer AND
data_wplaty LIKE '%10%';
II. DEKLAROWANIE
CREATE TABLE nazwa_tabeli
(NUMER NUMBER(5),NAZWISKO VARCHAR(15), ..........);
Perspektywa - wirtualna tabela bazująca na definicji.
CREATE VIEW nazwa_perspektywy AS
SELECT pola_które_chcemy_widzieć;
COMMIT - zatwierdz transakcję
ROLLBACK - anulowanie transakcji
III. INNE FUNKCJE
UNION - służy do sumowania dwóch zbiorów rekordów. Automatycznie eliminuje duplikaty. Jeżeli chcemy
zachować wszystkie duplikaty musimy użyć UNION ALL zamiast UNION.
SELECT nazwa_klienta FROM pożyczkobiorcy
UNION
SELECT nazwa_klienta FROM depozytorzy;
INTERSECT - iloczyn dwóch zbiorów rekordów;
EXCEPT - różnica zbiorów;
MODYFIKACJA BAZY
- USUWANIE
DELETE FORM r WHERE p
DELETE FROM pożyczki
WHERE wartość BETWEEN 1200 AND 1500;
- WSTAWIANIE
INSERT INTO tabela
VALUES(wart1,wart2...);
INSERT INTO konta(nazwa_filii,nr_konta,bilans)
VALUES("Kraków","A1234567",1200);
INSERT INTO konta
VALUES(null,"A1234567",1200);
-ODŚWIEŻANIE
UPDATE tabela
SET pole=wyrażenie
WHERE warunek (można pominąć)
UPDATE konta
SET bilans=bilans*1.06
WHERE bilans>10000


Wyszukiwarka