SELECT – Definiowanie wyniku

SELECT jest to instrukcja używana do pobierania danych i występuje najczęściej  z klauzulą FROM wskazującą na źródło danych. Należy pamiętać, że dane które otrzymuje się w wyniku tej instrukcji są nieposortowane (o sortowaniu będziemy mówić na innej lekcji).

SPACJE I ZNAKI ENTER

Odstępy w zapytaniach w SQL są pomijane przez silnik bazodanowy. Dlatego też możliwym jest rozłożenie jednej instrukcji na kilka wierszy. Pozwala to na większą czytelność kodu. Dla serwera MySQL znakiem końca polecenia jest średnik. Należy też uważać na przecinki.

Składnia SELECT

SELECT column1, column2, column3…
FROM table_name;

Wykonajmy parę zapytań na bazie danych world database, którą możesz pobrać ze strony https://dev.mysql.com/doc/index-other.html.

SELECT – Wyodrębnianie pojedynczych kolumn

ZAPYTANIE:

SELECT Name
FROM city;

WYNIK:

ANALIZA

Polecenie SELECT wymaga podania przynajmniej dwóch informacji — co chcemy pobrać i skąd. Użyte zapytanie pobiera jedną kolumnę o nazwie Name z tabeli city z bazy danych world. Nazwa kolumny jest wyszczególniona od razu po słowie kluczowym SELECT, po nim następuje słowo kluczowe FROM za którym jest nazwa tabeli z której ekstrahujemy dane.

Zauważ, że na końcu zapytania jest jeszcze informacja z ilością zwróconych wierszy

SELECT – Wyodrębnianie wielu kolumn

ZAPTYTANIE:

SELECT Name, CountryCode
FROM city;

WYNIK:

SELECT – POBIERANIE WIELU KOLUMN

ANALIZA

Powyższe zapytanie tworzymy analogicznie do poprzedniego z tą różnicą, że po słowie kluczowym SELECT wymieniamy kolumny po przecinku. Pamiętaj, że po ostatniej kolumnie nie może być przecinka, gdyż otrzymasz komunikat o błędzie.

SELECT – Wyodrębnianie wszystkich kolumn

ZAPYTANIE:

SELECT * 
FROM city;

WYNIK:

SELECT – POBIERANIE WSZYSKICH KOLUMN

ANALIZA

W zapytaniu zamiast wpisywać nazwy kolumn użyłam symbolu wieloznacznego jakim jest *. Gwiazdka spowodowała wybranie wszystkich kolumn z tabeli. Z uwagi na wydajność i obciążenie SZBD powinno się wybierać jedynie te atrybuty (kolumny) które są niezbędne do wykonania zapytania, dlatego też używanie gwiazdki w nadmiarze nie jest dobrym pomysłem.

DISTINCT – Wyodrębnianie unikatowych wierszy

ZAPYTANIE:

SELECT CountryCode
FROM city;

WYNIK:

ANALIZA

W wyniku wywołania SELECT na tabeli city otrzymano wszystkie wiersze pasujące do wzorca. Załóżmy, że chcemy jedynie otrzymać listę wszystkich kodów kraju, lecz nie każdego wystąpienia tego kodu. W takiej sytuacji należy użyć słowa DISTINCT po słowie SELECT.

ZAPYTANIE:

SELECT DISTINCT CountryCode 
FROM city;

WYNIK:

Użycie słowa DISTINCT (z ang. odrębny) jest sygnałem dla SZBD, by wybrał jedynie te wiersze, które różnią się od siebie.

Rozważmy inną sytuację. Jeśli wybierzemy:

ZAPYTANIE:

SELECT DISTINCT CountryCode, Name
FROM city;

WYNIK:

SELECT DISTINCT

Słowo DISTINCT dotyczy wszystkich zwracanych kolumn, a nie tylko tej, która jest wyszczególniona po nim. Dlatego w powyższym przykładzie otrzymaliśmy unikatowe wiersze dla każdego kodu. Np. dla kodu AFG są 4 możliwe kombinacje.

Limit zwracanych wierszy

MySql i MariaDb posiadają mechanizm, dzięki któremu można ograniczyć listę wyświetlanych na ekranie wierszy.

ZAPYTANIE:

SELECT Name 
FROM city 
LIMIT 10;

WYNIK:

ANALIZA

Powyższe zapytanie zwróci tylko pierwszych 10 rekordów z tabeli city zaczynając od pierwszego wiersza. Gdybyśmy chcieli w odpowiedzi uzyskać 10 wierszy ale licząc od drugiego należy użyć dodatkowo słowa OFFSET. Jest tu jednak pewna pułapka. Otóż w SQL pierwszy zwracany wiersz ma numer…. 0, trzeba pamiętać o tym przesunięciu, dlatego jeśli chcemy mieć dane od 2 miejsca należy użyć składni:

SELECT Name 
FROM city 
LIMIT 10 OFFSET 1;

WYNIK SELECT LIMIT OFFSET

W MS SQL odpowiednikiem LIMIT jest TOP

Podsumowanie:

Omówiona została instrukcja SELECT oraz przykłady jej użycia. Wpis opracowałam na podstawie książki

Teraz dla utrwalenia proponuję wykonać działania.

Zadania

    1. Napisz w SQL-u instrukcję, która pobiera identyfikatory wszystkich języków (Language) z tabeli countrylanguage.
    2. Tabela countrylanguage zawiera wszystkie identyfikatory krajów (CountryCode) przy czym niektóre wielokrotnie. Napisz w SQL-u instrukcję, która pobierze listę identyfikatorów krajów (CountryCode). Instrukcja ma zwracać jedynie listę unikatowych wystąpienia identyfikatora.
    3. Napisz w SQL-u instrukcję pobierającą wszystkie kolumny z tabeli city ograniczone do 100 pierwszych rekordów.

  1.  

Opracowano na podstawie książki: