Bazy danych - Zaawansowane polecenia SQL

1. Eliminowanie powtarzających się rekordów (DISTINCT):

SELECT DISTINCT nazwa_kolumny FROM nazwa_tabeli;

2. Pokazywanie wartości atrybutu, które nie zostały określone (IS NULL):

SELECT nazwa_kolumny FROM nazwa_tabeli WHERE nazwa_kolumny2 IS NULL;

3. Sprawdzenie, czy wprowadzona wartość atrybutu nie jest pusta (IS NOT NULL):

SELECT nazwa_kolumny FROM nazwa_tabeli WHERE nazwa_kolumny2 IS NOT NULL;

4. Wyświetlanie czegoś i odpowiadającym im wartości (wartości wyświetlane są pod określoną nazwą):

SELECT nazwa_kolumny, wartość AS "nazwa_aliasu" FROM nazwa_tabeli;

5.Wyświetlanie dwóch kolumn jeśli brak wartości w drugiej kolumnie - wyświetli 0;

SELECT  nazwa_kolumny, NVL(nazwa_kolumny2 ,0) nazwa_kolumny2 FROM Samochody;

Zamiast NVL można użyć w MySQL - IFNULL()

6. Funkcje znakowe:
  • UPPER - zamiana wszystkich liter napisu na wielkie
SELECT nazwa_kolumny FROM nazwa_tabeli WHERE UPPER(nazwa_kolumny);
  • LOWER - zamiana wszystkich liter napisu na małe 
SELECT nazwa_kolumny FROM nazwa_tabeli WHERE LOWER(nazwa_kolumny);
  • INITCAP - zamiana pierwszej litery w każdym wyrazie na wielką
SELECT INITCAP(nazwa_kolumny) FROM nazwa_tabeli;
  • LPAD(wartość, n, 'ciąg') - uzupełnienie komórki z lewej strony podanym ciągiem, aż do długości n (np. LPAD(godziny,5, '0') FROM nazwa_tabeli --> otrzymamy: 00245) 
  • RPAD(wartość, n, 'ciąg') - uzupełnienie komórki z prawej strony podanym ciągiem, aż do długości n (czyli otrzymalibyśmy 24500
  • LTRIM/RTRIM - usunięcie z lewej/prawej strony napisu pewnej liczby określonych znaków
  • CONTAT (łączenie tekstu) 
np. SELECT CONTAT(imie,' ', nazwisko, 'ma adres', email) FROM handlowcy;
  • SUBSTR - wyznaczanie z wejściowego napisu podłańcucha znaków (przydatne do tworzenia np. inicjałów) 
SELECT SUBSTR(nazwa_kolumny,<długość podłańcucha>,<pozycja początkowa, od którego znaku?>);
  • LENGTH - oblicza długość łańcucha znaków podanego jako argument
SELECT nazwa_kolumny FROM nazwa_tabeli WHERE LENGH(nazwa_kolumny)=<jakaś liczba>;
  • INSTR - wskazuje początkową pozycje podłańcucha w łańcuchu wejściowym 
SELECT nazwa_kolumny FROM nazwa_tabeli WHERE INSTR(nazwa_kolumny,'<pierwsza litera w napisie>')=<liczba>; 

7. Funkcje numeryczne:
  • AVG - obliczanie średniej wartości ze wszystkich wartości z danej kolumny 
SELECT AVG(nazwa_kolumny) AS nazwa_aliasu FROM nazwa_tabeli;
  • SUM - zwraca sumę wszystkich podliczonych wszystkich rekordów w danej kolumnie
SELECT SUM(nazwa_kolumny) AS nazwa_aliasu FROM nazwa_tabeli;
  • MAX/MIN - pokaże wartość maksymalną/minimalną, jaka występuje w rekordach w danej kolumnie
SELECT MAX(nazwa_kolumny) AS nazwa_aliasu FROM nazwa_tabeli;
  • ROUND - zaokrąglanie liczb, do określonej liczby po przecinku
SELECT ROUND(liczba do zaokrąglenia, do ilu ma miejsc po przecinku zaokrąglić);
  • MOD - pokazuje resztę z dzielenia dwóch liczb (NIE WYNIK DZIELENIA!)
SELECT MOD(dzielna, dzielnik); 
  • DAYOFWEEK - po wprowadzeniu przez użytkownika jakiejś daty w formacie ("RRRR-MM-DD") dowiadujemy się jaki to jest dzień tygodnia (Zwraca liczbę od 1 do 7).
SELECT DAYOFWEEK("RRRR-MM-DD");
  • CASE - dla każdego wiersza zwracanego w wyniku zapytania sprawdza warunek logiczny i w zależności od wyniku wypisuje komunikat podany po słowie kluczowym THEN.
SELECT nazwa_kolumny, nazwa_kolumny2,
CASE 
           WHEN nazwa_kolumny2 <warunek> THEN '<jakiś tekst>'
           WHEN nazwa_kolumny2 <warunek> THEN '<jakiś tekst2>'
           ELSE '<jakiś tekst3>
END 
FROM nazwa_tabeli;

Warunek to np. większe od 0, mniejsze, równe itd. 
  • CURDATE - zwraca obecną datę 
SELECT CURDATE();
  • NOW - zwraca obecną datę i godzinę
SELECT NOW();
  • DAYNAME - po wprowadzeniu przez użytkownika jakiejś daty w formacie ("RRRR-MM-DD") dowiadujemy się jaki to był dzień (nazwę dnia tygodnia)
SELECT DAYNAME("RRRR-MM-DD"); 
  • MONTH - zwraca numer miesiąca podany w dacie w formacie ("RRRR-MM-DD")
SELECT MONTH("RRRR-MM-DD");

8. CONTAT_WS - funkcja umożliwiająca łączenie z separatorem. Pierwszym argumentem funkcji jest znak, który będzie używany jako separator.  Drugim argumentem są wyrażenia będące łączone.

SELECT CONTAT_WS("separator","<pierwsze słowo>","<drugie słowo>" ...) AS nazwa_aliasu;