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 DESC - malejąco
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}
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 MATCHES Operatory porównania z wartością pustą: IS NULL IS NOT NULL
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ższe wynagrodzenie 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;
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% ;
CONTAINS - sprawdza, czy wartość w kolumnie znakowej zawiera wskazany łańcuch. Przykład: Pokaż wszystkich pracowników, których nazwisko zawiera łańcuch ore : SELECT nazwisko FROM pracownicy WHERE nazwisko CONTAINS ore ; Uwaga: Łańcuch użyty w operatorze CONTAINS może zawierać znaki specjalne oznaczające OR i AND.
Bez frazy ORDER BY wyniki zapytania ukazują się w porządku nieokreślonym (w porządku wstawienia ich do tablicy). ORDER BY <nazwa kolumny/numer> [ASC/DESC] Uwagi: 1.Numer kolumny we frazie ORDER BY oznacza pozycję kolumny na liście wyboru instrukcji SELECT. Trzeba go użyć, jeśli porządkujemy wg wartości wyrażenia. 2. Domyślnie przyjmowany jest porządek rosnący (ASC). Przykład 1 Pokaż alfabetycznie dane o pracownikach (nazwisko, imie, pesel). SELECT nazwisko, imie, pesel FROM pracownicy ORDER BY nazwisko ASC;
GROUP BY <nazwa kolumny> [HAVING <warunek>] Fraza ta powoduje powiązanie ze sobą wierszy wynikowych z instrukcji SELECT w grupy wierszy, w których wskazane we frazie GROUP BY kolumny mają tę samą wartość. Następnie każda grupa jest redukowana do pojedynczego wiersza. W tym wierszu występują kolumny z frazy GROUP BY oraz ew. kolumny będące wynikiem funkcji agregujących. Funkcje te wówczas działają na każdej grupie osobno. Następnie eliminowane są wiersze nie spełniające warunku HAVING.
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!). Przykład Policz ilość pracowników w każdym mieście. SELECT miasto, COUNT(*) FROM pracownicy GROUP BY miasto;