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:
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:
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:
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;
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
-
- Napisz w SQL-u instrukcję, która pobiera identyfikatory wszystkich języków (Language) z tabeli countrylanguage.
- 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.
- Napisz w SQL-u instrukcję pobierającą wszystkie kolumny z tabeli city ograniczone do 100 pierwszych rekordów.