Miesięczne archiwum: Październik 2016

SQL COUNT() function

SQL COUNT()


    


DEFINICJA

Funkcja COUNT() zwraca liczbę wierszy, zgodnie z zadanymi kryteriami w nawiasie. Za pomocą tej funkcjo zliczymy np. ilość rekordów w tabeli, ilość wartości w danej kolumni (bez wartości NULL) lub ilość wartości w kolumnie bez duplikatów.

SQL COUNT() składnia. Ilość rekordów w tabeli.

SELECT
    COUNT(*)
FROM
    nazwa_tabeli

SQL COUNT() składnia. Ilość wartości w danej kolumnie.

SELECT
    COUNT(nazwa_kolumny)
FROM
    nazwa_tabeli

 

SQL COUNT() składnia. Ilość wartości w tabeli bez duplików.

SELECT
    COUNT(DISTINCT nazwa_kolumny)
FROM
    nazwa_tabeli


Przykład zastosowania COUNT() (baza Adventureworks)

Oblicz ilu pracowników to kobiety.

SELECT
    COUNT(gender) AS PracownicyKobiety
FROM
    HumanResources.Employee    
WHERE
    Gender = 'F'   


Przykład zastosowania COUNT() (baza Northwind)

Pokaż ilość pracowników z tabeli Employees.

SELECT
    COUNT(*) AS LiczbaPracowników
FROM
    employees


    

SQL GETDATE()

SQL GETDATE()


    


DEFINICJA

Funkcja GETDATE() zwraca aktualną datę w postaci datetime2(7)

SQL GETDATE() składnia

SELECT
     GETDATE() AS [Aktualna data i godzina]

Wynik powyższego zapytania    
x—————————————x
|  Aktualna data i godzina    |
x—————————————x
|  2016-10-30 06:47:54.860  |
x—————————————x 


   

SQL DATE()

SQL DATE()


    


DEFINICJA

Określnie czasu może być zapisane w różnych formatach np. 2016-01-01 (sama data), 2016-01-01 06:56:17.412 (data i godzina) itd. Funkcja DATE() "wyciąga" samą datę z wyrażenia opisującego konkretny moment w czasie (wyrażenie opisujące czas).
Uwaga funkcja DATE() nie występuje we wszystkich środowiskach bazodanowych np. nie jest rozpoznawalna w SQL SERVER-ze i przy próbie jej zastosowania otrzymamy komunikat "'DATE' is not a recognized built-in function name.".

SQL DATE() składnia

SELECT
     nazwy_kolumy(kolumn)
    ,DATE(kolumna_która_zawiera_wyrażenie_opisujące_czas)
FROM
    nazwa_tabeli


   

SQL SELECT TOP

SQL SELECT TOP


    


DEFINICJA

Polecenie SELECT TOP służy do filtrowania wyników zapytania. Po słówku TOP wpisujemy wartość liczbową określającą ile pierwszych rekordów zwróconych przez zapytanie chcemy wyświetlić.

SQL SELECT TOP składnia

SELECT TOP wartość_liczbowa_ilość_rekordów_do_wyświetlenia
    nazwy_kolumy(kolumn)
FROM
    nazwa_tabeli
ORDER BY
    nazwa_kolumny1 ASC , nazwa_kolumny2 DESC


Przykład zastosowania SELECT TOP (baza Adventureworks)

Wyświetl wszyskie osoby (tylko kolumny: Nazwisko, Imię, Email) z bazy wraz z ich adresami email. Wyniki posortuj wg nazwiska (malejąco) a następnie wg adresu email (rosnąco). Wyświetl pierwszych 10 rekordów zwróconych przez zapytanie.

SELECT TOP 10
     P.LastName
    ,P.FirstName
    ,E.EmailAddress
FROM
    Person.Person P
        JOIN Person.EmailAddress E ON (P.BusinessEntityID = E.BusinessEntityID)    
ORDER BY
    LastName DESC, EmailAddress   

 


 Przykład zastosowania SELECT TOP (baza Northwind)

Wyświetl wszystkie produkty (tylko kolumny: ID, Nazwa Produktu, Kategoria Produktu) wraz z ich kategoriami. Wyniki posortuj wg nazwy produktu (rosnąco) a następnie wg nazwy kategorii (malejąco). Wyświetl pierwszych 100 rekordów zwróconych przez zapytanie.

SELECT TOP 100
     P.ProductID
    ,P.ProductName
    ,C.CategoryName
FROM
    Products P JOIN Categories C ON (P.CategoryID = C.CategoryID)
ORDER BY
    ProductName ASC, CategoryName DESC   

system wyświetlił tylko 77 rekordów, bo tylko tyle zwróciło zapytanie mimo, że polecenie TOP miało wartość 100 


   

SQL CASE

SQL CASE


    


DEFINICJA

Funkcje CASE służy do zastępowania, w wynikach zapytania, wartości "oryginalnych" w kolumnach innymi wartościami w zależonści od zdefiniowanych przez nas warunków.

SQL CASE składnia

CASE
    WHEN warunek1 THEN nowa_wartość_dla_rekodów_spełniająych_ten_warunek
    WHEN warunek2 THEN nowa_wartość_dla_rekodów_spełniająych_ten_warunek   
    WHEN warunek3 THEN nowa_wartość_dla_rekodów_spełniająych_ten_warunek
    ELSE nowa_wartość_dla_rekodów_nie_spełniająych_powyższych_warunków
END   


Przykład zastosowania CASE (baza Adventureworks)

Wyświetl wszystkie osoby z bazy wraz z "rodzajem powiązania" z firmą. Wyświetl pełną nazwę typu osoby.

SELECT
    LastName
    ,Firstname
    ,CASE
        WHEN PersonType = 'EM' THEN 'Employee'
        WHEN PersonType = 'SC' THEN 'Store Contact'
        WHEN PersonType = 'IN' THEN 'Individual (retail) customer'
        WHEN PersonType = 'SP' THEN 'Sales person'
        WHEN PersonType = 'VC' THEN 'Vendor contact'
        WHEN PersonType = 'GC' THEN 'General contact'
        ELSE 'b.d.'    
     END AS [Typ osoby]
FROM    
    Person.Person

 


 Przykład zastosowania CASE (baza Northwind)

Wyświetl tytuly grzecznościowe pracowników i zamień je na polskie nazwy.

SELECT
    LastName AS Nazwisko
    ,FirstName AS Imię
    ,CASE
        WHEN TitleOfCourtesy = 'Mr.' THEN 'Pan'
        WHEN TitleOfCourtesy = 'Mrs.' THEN 'Pani'
        WHEN TitleOfCourtesy = 'Ms.' THEN 'Panna'
        WHEN TitleOfCourtesy = 'Dr.' THEN 'Doktor'
        ELSE 'b.d.'
    END AS TytułGrzecznościowy
FROM    
    Employees


   

SQL ORDER BY

SQL ORDER BY


    


DEFINICJA

Polecenie ORDER BY służy do sortowanie wyników zapytania. Sortować możemy malejąco (wartości od największej do najmniejszej, czyli wartości maleją) i rosnąco (wartości od najmniejszej do największej, czyli wartości rosną). Przy sortowaniu możemy korzystać z aliasów nadanych kolumnom. Sortowanie może odbywać się po większej ilości kolumn, wtedy poszczególne nazwy kolumn (bądź aliasy) rozdzielamy przecinkami. Jeżeli nie wskażemy kierunku sortowania to domyślnie sortowanie jest rosnące, skrót ASC (patrz składnia poniżej). Jeśli chcemy sortować daną kolumnę malejąco musimy jawnie to wpisać, skrót DESC (patrz składnia poniżej).

SQL ORDER BY składnia

SELECT
    nazwy_kolumy(kolumn)
FROM
    nazwa_tabeli
ORDER BY
    nazwa_kolumny1 ASC , nazwa_kolumny2 DESC


Przykład zastosowania ORDER BY (baza Adventureworks)

Wyświetl wszyskie osoby (tylko kolumny: Nazwisko, Imię, Email) z bazy wraz z ich adresami email. Wyniki posortuj wg nazwiska (malejąco) a następnie wg adresu email (rosnąco).

SELECT
     P.LastName
    ,P.FirstName
    ,E.EmailAddress
FROM
    Person.Person P
        JOIN Person.EmailAddress E ON (P.BusinessEntityID = E.BusinessEntityID)    
ORDER BY
    LastName DESC, EmailAddress   

 


 Przykład zastosowania ORDER BY (baza Northwind)

Wyświetl wszystkie produkty (tylko kolumny: ID, Nazwa Produktu, Kategoria Produktu) wraz z ich kategoriami. Wyniki posortuj wg nazwy produktu (rosnąco) a następnie wg nazwy kategorii (malejąco).

SELECT
     P.ProductID
    ,P.ProductName
    ,C.CategoryName
FROM
    Products P JOIN Categories C ON (P.CategoryID = C.CategoryID)
ORDER BY
    ProductName ASC, CategoryName DESC   


   

SQL FULL OUTER JOIN

SQL FULL OUTER JOIN


    


DEFINICJA

FULL OUTER JOIN służy także do łączenia tabel. Dla lepszego zobrazowania procesu łączenia FULL OUTER JOIN wyobraźmy sobie sytuację gdzie mamy dwie tabele (patrz na poniższą grafikę): tabela 1 (zwana dalej t1) po lewej stronie i tabela 2 (zwana dalej t2) po prawej stronie. Każda z tabel posiada pole (klucz) wg którego będziemy łączyć obie tabele: t1.klucz i t2.klucz (pamiętamy, że pola te muszą być tego samego typu). W przypadku zastosowania FULL OUTER JOIN przy złączeniu system zachowa się w poniższy sposób. W sytuacji kiedy po obu stronach znajdzie "dopasowanie", po obu stronach wpisze odpowiednie wartości, które są w tabelach 1 i 2. W przypadku kiedy w którejkolwiek ze stron nie znajdzie "dopasowania" w to miejsce wpisze wartość NULL, oznaczającą brak dopasowania, brak wartości. Złączenie tabel następują po słówku FROM.
Po złączeniu mamy dwie możliwości. Jeżeli chcemy uzyskać wszystkie z częścią wspólną (grafika poniżej) to korzystamy ze składni:

SQL FULL OUTER JOIN grafika

SQL FULL OUTER JOIN składnia

SELECT
    nazwa_kolumny(kolumn)
FROM
    tabela1 FULL OUTER JOIN tabela2 ON (tabela1.klucz = tabela2.klucz)

a jeśli chcemy uzyskać wszysktie wartości z obu tabel bez tych które stanowią część wspólną (grafika poniżej) to oprócz złączenia LEFT OUTER JOIN musimy wpisać dodatkowy warunke w klauzuli WHERE.

SQL FULL OUTER JOIN składnia

SELECT
    nazwa_kolumny(kolumn)
FROM
    tabela1 FULL OUTER JOIN tabela2 ON (tabela1.klucz = tabela2.klucz)
WHERE
    tabela1.klucz IS NULL
    AND
    tabela2.klucz IS NULL


   

 

SQL RIGHT JOIN

SQL RIGHT JOIN


    


DEFINICJA

RIGHT JOIN służy także do łączenia tabel. Dla lepszego zobrazowania procesu łączenia RIGHT JOIN wyobraźmy sobie sytuację gdzie mamy dwie tabele: tabela 1 (zwana dalej t1) po lewej stronie i tabela 2 (zwana dalej t2) po prawej stronie. Każda z tabel posiada pole (klucz) wg którego będziemy łączyć obie tabele: t1.klucz i t2.klucz (pamiętamy, że pola te muszą być tego samego typu). W przypadku zastosowania RIGHT JOIN przy złączeniu system weźmie wszystkie wartości z t2.klucz (tabela po prawej stronie polecenia RIGHT JOIN) i będzie próbował dopasować takie same wartości z t1.klucz (tabela po lewej stronie polecenie RIGHT JOIN). Jeśli ich nie znajdzie po lewej stronie (czyli po stronie t1) wpisze wartość NULL, oznaczającą brak dopasowania, brak wartości po stronie t1. Złączenie tabel następują po słówku FROM. W przypadku znalezienia dopasowania wartości po obu stronach (obu tabel) RIGHT JOIN i INNER JOIN powinny zwrócić takie same wyniki.
Po złączeniu mamy dwie możliwości. Jeżeli chcemy uzyskać wszystkie wartości z tabeli 2 + część wspólną (grafika poniżej) to korzystamy ze składni:

SQL RIGHT JOIN grafika

SQL RIGHT JOIN składnia

SELECT
    nazwa_kolumny(kolumn)
FROM
    tabela1 RIGHT JOIN tabela2 ON (tabela1.klucz = tabela2.klucz)

a jeśli chcemy uzyskać wszysktie wartości z tabeli 2 ale bez tych które stanowią część wspólną to oprócz złączenia RIGHT LEFT musimy szukać tych które po stronie tabeli 1 mają wartość NULL, czyli

SQL RIGHT JOIN składnia

SELECT
    nazwa_kolumny(kolumn)
FROM
    tabela1 RIGHT JOIN tabela2 ON (tabela1.klucz = tabela2.klucz)
WHERE
    tabela2.klucz IS NULL


    

 

SQL LEFT JOIN

SQL LEFT JOIN


    


DEFINICJA

LEFT JOIN służy także do łączenia tabel. Dla lepszego zobrazowania procesu łączenia LEFT JOIN wyobraźmy sobie sytuację gdzie mamy dwie tabele: tabela 1 (zwana dalej t1) po lewej stronie i tabela 2 (zwana dalej t2) po prawej stronie. Każda z tabel posiada pole (klucz) wg którego będziemy łączyć obie tabele: t1.klucz i t2.klucz (pamiętamy, że pola te muszą być tego samego typu). W przypadku zastosowania LEFT JOIN przy złączeniu system weźmie wszystkie wartości z t1.klucz (tabela po lewej stronie polecenia LEFT JOIN) i będzie próbował dopasować takie same wartości z t2.klucz (tabela po prawej stronie polecenia LEFT JOIN). Jeśli ich nie znajdzie po prawej stronie (czyli po stronie t2) wpisze w to miejsce wartość NULL, oznaczającą brak dopasowania, brak wartości po stronie t2. LEFT JOIN używamy po słówku FROM. LEFT JOIN stosuje się w sytuacji kiedy nie jesteśmy pewni czy łącząc dwie tabele wyszukamy połączenie dla wszytkich rekordów po obu stronach. Jeżeli jesteśmy pewni, że to połączenie będzie, to stosujemy raczej INNER JOIN. W przypadku znalezienia dopasowania wartości po obu stronach (obu tabel) LEFT JOIN i INNER JOIN powinny zwrócić takie same wyniki.
Po złączeniu mamy dwie możliwości. Jeżeli chcemy uzyskać wszystkie wartości z tabeli 1 + część wspólną (grafika poniżej) to korzystamy ze składni:

SQL LEFT JOIN grafika

SQL LEFT JOIN składnia

SELECT
    nazwa_kolumny(kolumn)
FROM
    tabela1 LEFT  JOIN tabela2 ON (tabela1.klucz = tabela2.klucz)

a jeśli chcemy uzyskać wszysktie wartości z tabeli 1 ale bez tych które stanowią część wspólną to oprócz złączenia JOIN LEFT musimy szukać tych które po stronie tabeli 2 mają wartość NULL, czyli

SQL LEFT JOIN składnia

SELECT
    nazwa_kolumny(kolumn)
FROM
    tabela1 LEFT  JOIN tabela2 ON (tabela1.klucz = tabela2.klucz)
WHERE
    tabela2.klucz IS NULL


 

    

 

SQL JOIN

SQL JOIN


    


DEFINICJA

JOIN służy do łączenia tabel. JOIN to inaczej INNER JOIN czyli złączenie wewnętrzne (zawężające) które zwraca część wspólną dwóch łączonych zbiorów/tabel. Parametry do złączenia podajemy w nawiasie po słówku ON. Łączenie następuje wg kolumn które wskazujemy po jednej stronie i po drugiej stronie. Typu danych po obu stronach muszą być takie same. Napisałem wcześniej że łącznie JOIN (INNER JOIN) jest zawężające, dlaczego? Ponieważ przy złączeniu JOIN (INNER JOIN) wybierzemy tylko część wspólną obu zbiorów (tabel). Jeżeli w którejkowiek tabeli do złączenia (w kolumnach złączenia) nie znajdą się identyczne wartości to rekord ten nie będzie brany pod uwagę przy wyniku zapytania. W wynikach znajdą się tylko te rekordy które w kolumnach złączenia w obu tabelach mają identyczne wartości.

SQL JOIN grafika

SQL JOIN składnia

SELECT
    nazwy_kolumy(kolumn)
FROM
    tabela1 JOIN tabela2 ON (tabela1.kolumna2 = tabela2.kolumna1)


Przykład zastosowania JOIN (baza Adventureworks)

Wyświetl wszyskie osoby (tylko kolumny: Nazwisko, Imię, Email) z bazy wraz z ich adresami email.

SELECT
     P.LastName
    ,P.FirstName
    ,E.EmailAddress
FROM
    Person.Person P
        JOIN Person.EmailAddress E ON (P.BusinessEntityID = E.BusinessEntityID)   

 


 Przykład zastosowania JOIN (baza Northwind)

Wyświetl wszystkie produkty (tylko kolumny: ID, Nazwa Produktu, Kategoria Produktu) wraz z ich kategoriami.

SELECT
     P.ProductID
    ,P.ProductName
    ,C.CategoryName
FROM
    Products P JOIN Categories C ON (P.CategoryID = C.CategoryID)