Autor: Joanna Karwowska
SELECT [DISTINCT] <lista kolumn/wyrażeń> FROM <lista tablic> [WHERE <warunek>] [GROUP BY <lista kolumn>] [HAVING <warunek>] [ORDER BY <lista kolumn/numerów>] [ ] instrukcja może wystąpić, ale nie musi.
SELECT - określa, które kolumny z tablic podanych we frazie FROM mają zostać włączone do wyniku (projekcja). Dodatkowo, mogą zostać włączone wyrażenia. DISTINCT - powoduje wyeliminowanie duplikatów (wierszy powtarzających się). FROM - określa tablice, na jakich działa instrukcja SELECT. Jeśli jest kilka tablic, dokonywany jest produkt kartezjański tych tablic. WHERE - określa warunki wyboru wierszy z tablic wymienionych we frazie FROM (selekcja).
GROUP BY - powoduje wiązanie wierszy wynikowych w grupy o jednakowych wartościach we wskazanych kolumnach, a następnie redukowanie tych grup do pojedynczych wierszy. HAVING - określa warunki wyboru dla wierszy powstałych w wyniku działania frazy GROUP BY. ORDER BY - porządkuje wiersze wynikowe rosnąco lub malejąco według wartości wskazanych kolumn: ASC rosnąco (domyślne sortowanie) DESC - malejąco
Uwaga 1! Każda kolumna występująca we frazie GROUP BY musi wystąpić na liście wyboru instrukcji SELECT, i na odwrót. Uwaga 2! W warunku HAVING może wystąpić funkcja agregująca (ale nie w warunku WHERE!).
SELECT [DISTINCT] <lista kolumn/wyrażeń> FROM <nazwa tablicy> [ WHERE <warunek> ] Uwaga: <lista kolumn> może przybrać formę * (co oznacza wybór wszystkich kolumn).
Przykład 1 Pokaż identyfikatory i nazwiska wszystkich pracowników. SELECT nazwisko, pesel FROM pracownicy; Przykład 2 Pokaż nazwy wszystkich miast, skąd pochodzą pracownicy. SELECT DISTINCT miasto FROM pracownicy; Uwaga: Bez słowa DISTINCT nazwy miast mogłyby się powtarzać.
Przykład 3 Pokaż imiona i nazwiska pracowników, którzy pochodzą z Sopotu. SELECT imie, nazwisko FROM pracownicy WHERE miasto = Sopot ;
Przykład 4 Pokaż imiona i nazwiska i pensje wszystkich pracowników. SELECT imie, nazwisko, pensja FROM pracownicy, stanowiska WHERE stanowisko=stanowiska.id_stanowiska; Relacja: {klucz_obcy=nazwa_tabeli.klucz_podstawowy}
Bez frazy ORDER BY wyniki zapytania ukazują się w porządku nieokreślonym (w porządku wstawienia ich do tablicy). Przykład 5 Posortuj alfabetycznie (rosnąco) dane o pracownikach według pola nazwisko. SELECT nazwisko, imie, pesel FROM pracownicy ORDER BY nazwisko ASC;
Przykład 6 Policz ilość pracowników w każdym mieście. SELECT miasto, COUNT(*) FROM pracownicy GROUP BY miasto;
Operatory języka SQL występujące w wyrażeniach we frazie SELECT, WHERE i in.: Operatory arytmetyczne: ** ^ potęgowanie * / mnożenie, dzielenie + - dodawanie, odejmowanie Operatory logiczne: NOT AND OR Operatory porównania: = > < >= <= <> Operatory specjalne: IN BETWEEN LIKE Operatory porównania z wartością pustą: IS NULL IS NOT NULL
IN - sprawdza, czy wartość w kolumnie jest równa jednej z wartości określonej na liście wartości lub będących wynikiem instrukcji SELECT. Przykład: WHERE miasto = Gdansk OR miasto = Gdynia OR miasto = Sopot jest równoważne: WHERE miasto IN ( Gdansk, Gdynia, Sopot )
BETWEEN - sprawdza, czy wartość w kolumnie jest zawarta w przedziale wartości. Przykład: WHERE pensja>=3000 AND pensja<=5000 jest równoważne: WHERE pensja BETWEEN 3000 AND 5000
LIKE - porównuje zawartość kolumny znakowej z łańcuchem znaków, który może zawierać symbole wieloznaczne. Symbole wieloznaczne: _ (podkreślenie) - pasuje do dowolnego pojedynczego znaku, % (procent) - pasuje do dowolnej liczby dowolnych znaków. Przykład Pokaż wszystkich pracowników o nazwiskach zaczynających się na literę B. SELECT nazwisko FROM pracownicy WHERE nazwisko LIKE B% ;
COUNT()-zwraca liczbę wierszy wybranych w zapytaniu. AVG()-oblicza średnią arytmetyczną w kolumnie numerycznej. SUM()-sumuje wartości kolumn numerycznych. MIN()-znajduje wartość minimalną w kolumnie znakowej, numerycznej lub daty. MAX()-znajduje wartość maksymalną w kolumnie znakowej, numerycznej lub daty.
COUNT(*) - zwraca liczbę wierszy w tablicy wynikowej. COUNT(DISTINCT <nazwa kolumny>) - zwraca liczbę różnych wartości we wskazanej kolumnie. Przykład 1 Ilu pracowników pochodzi z Sopotu? SELECT COUNT(*) FROM pracownicy WHERE miasto = Sopot ; Przykład 2 Z ilu różnych miast pochodzą pracownicy? SELECT COUNT(DISTINCT miasto) FROM pracownicy;
Przykład 1 Podaj sumę zarobków wszystkich pracowników. SELECT SUM(pensja) FROM pracownicy, stanowiska WHERE stanowisko=stanowiska.id_stanowiska; Przykład 2 Zmodyfikuj poprzednie zapytanie. Zmień nazwę kolumny zawierającej efekt działania funkcji. SELECT SUM(pensja) AS Suma zarobków FROM pracownicy, stanowiska WHERE stanowisko=stanowiska.id_stanowiska;
Przykład 1 Podaj średnie wynagrodzenie wszystkich pracowników. SELECT AVG(pensja) FROM pracownicy, stanowiska WHERE stanowisko=stanowiska.id_stanowiska; Przykład 2 Zmodyfikuj poprzednie zapytanie. Zmień nazwę kolumny zawierającej efekt działania funkcji. SELECT AVG(pensja) AS Średnie wynagrodzenie FROM pracownicy, stanowiska WHERE stanowisko=stanowiska.id_stanowiska;
Przykład 1 Znajdź największą pensję pracownika. SELECT MAX(pensja) FROM pracownicy, stanowiska WHERE stanowisko=stanowiska.id_stanowiska; Przykład 2 Zmodyfikuj poprzednie zapytanie. Zmień nazwę kolumny zawierającej efekt działania funkcji. SELECT MAX(pensja) AS Najwyższewynagrodzenie FROM pracownicy, stanowiska WHERE stanowisko=stanowiska.id_stanowiska;
Przykład 1 Znajdź najmniejszą pensję pracownika. SELECT MIN(pensja) FROM pracownicy, stanowiska WHERE stanowisko=stanowiska.id_stanowiska; Przykład 2 Zmodyfikuj poprzednie zapytanie. Zmień nazwę kolumny zawierającej efekt działania funkcji. SELECT MIN(pensja) AS Minimalne wynagrodzenie FROM pracownicy, stanowiska WHERE stanowisko=stanowiska.id_stanowiska;