CodeGym /Kursy /SQL SELF /Wybór konkretnych kolumn: pobieranie danych po nazwach ko...

Wybór konkretnych kolumn: pobieranie danych po nazwach kolumn

SQL SELF
Poziom 2 , Lekcja 0
Dostępny

Kiedy pobieramy dane z bazy, rzadko interesują nas absolutnie wszystkie kolumny. Na przykład, w tabeli pracowników employees może być 15 kolumn: imię, nazwisko, data urodzenia, stanowisko, pensja, data zatrudnienia i tak dalej. A ty chcesz tylko poznać ich imiona i stanowiska. Logiczne, że pobieranie wszystkich danych — to bez sensu i nieefektywne. I tu właśnie wchodzi sztuka wybierania konkretnych kolumn.

Jeśli porównać to do czegoś, to tak jakbyś z koszyka z pomarańczami, jabłkami i bananami wyciągał tylko jabłka. Fajnie, nie? Tym się właśnie zajmiemy!

Składnia

Przypominamy, SQL został zaprojektowany maksymalnie user-friendly.

Po pierwsze, wielkość liter w zapytaniu nie ma znaczenia. Możesz napisać SELECT, Select albo select i wszystko zadziała. Po drugie, enterowanie i łamanie linii nie ma znaczenia. DBMS i tak zamieni zapytanie na jeden długi string, więc możesz pisać jak ci wygodnie.

Jak już pewnie się domyślasz, na słowach kluczowych SELECT i FROM się nie kończy. Inaczej nie byłoby tyle gadania o SQL. Rozszerzona wersja zapytania SQL wygląda tak:

SELECT kolumny
FROM tabela
WHERE warunek
GROUP BY kolumny
HAVING kolumny
ORDER BY sortowanie

Gdzie:

  • kolumny — to nazwy kolumn, które chcesz uzyskać.
  • tabela — nazwa tabeli, z której pobierasz dane.
  • warunek — warunek do filtrowania wierszy.
  • sortowanie — wiersze i kolejność sortowania.

Brzmi łatwo? Rozbijmy to na realnym przykładzie. Ale zacznijmy od czegoś prostszego.

Przykład bazowego zapytania

Załóżmy, że mamy tabelę students, gdzie są dane o studentach. Tak może wyglądać struktura tabeli:

id first_name last_name age grade
1 Alex Lin 20 A
2 Anna Song 22 B
3 Otto Art 19 A

Teraz chcemy poznać tylko nazwiska last_name i oceny grade wszystkich studentów.

Zapytanie będzie wyglądać tak:

SELECT last_name, grade
FROM students;

Wynik wykonania:

last_name grade
Lin A
Song B
Art A

Gratulacje, właśnie zaoszczędziłeś zasoby bazy danych i zrobiłeś wynik bardziej czytelnym!

Łączenie stringów

Samo wybieranie danych już umiesz, spróbujmy czegoś ciekawszego. W naszej tabeli imię i nazwisko są w osobnych kolumnach. Napiszmy zapytanie, gdzie będzie kolumna z pełnym imieniem studenta.

Żeby połączyć dwa stringi w PostgreSQL używa się operatora ||. Nasze zapytanie SELECT będzie wyglądać tak:

SELECT first_name || last_name, grade
FROM students;

Wynik wykonania:

first_name || last_name grade
AlexLin A
AnnaSong B
OttoArt A

Hmm. Chyba czegoś tu brakuje. Na przykład spacji między imieniem a nazwiskiem! Naprawmy to.

SELECT first_name || ' ' || last_name, grade
FROM students;

Wynik wykonania:

first_name || ' ' || last_name grade
Alex Lin A
Anna Song B
Otto Art A

Pięknie. Zawartość tabeli-wyniku mi się podoba, ale co z nagłówkiem? Chciałoby się tam widzieć full name, albo po prostu name, a nie first_name || ' ' || last_name. Tak nieładnie i niepraktycznie. Ale i na to jest sposób.

Wybieranie z użyciem aliasów

Zapytania SQL można zrobić bardziej czytelnymi dzięki aliasom. To po prostu sposób, żeby nadać kolumnie nowe imię w ramach zapytania. Aliasów używa się z kluczem AS (chociaż formalnie można go pominąć, ale dla czytelności lepiej nie).

Zobaczmy przykład:

SELECT first_name AS "Imię", last_name AS "Nazwisko", grade AS "Ocena"
FROM students;

Wynik wykonania:

Imię Nazwisko Ocena
Alex Lin A
Anna Song B
Otto Art A

Tutaj:

  1. Zmieniliśmy nazwy kolumn, żeby były bardziej zrozumiałe po polsku.
  2. Użyliśmy aliasów w zapytaniu, stosując AS.

Jeśli twój szef albo klient chce zobaczyć dane o użytkownikach i nie chcesz, żeby osiwiał patrząc na tabelę — aliasy to twój przyjaciel.

Teraz trochę ulepszmy nasze zapytanie o pełne imię.

SELECT first_name || ' ' || last_name  AS "Pełne imię", grade  AS "Ocena"
FROM students;

Wynik wykonania:

Pełne imię Ocena
Alex Lin A
Anna Song B
Otto Art A

Super. Tak jak chcieliśmy.

Po co wybierać tylko niektóre kolumny?

  1. Wydajność

Wyobraź sobie, że pracujesz z ogromną tabelą na miliony wierszy i setki kolumn. Pobieranie wszystkiego SELECT * może zająć minuty albo nawet godziny i zjeść mnóstwo zasobów serwera. A tak dostajesz tylko to, co trzeba.

  1. Czytelność

Kiedy pobierasz tylko potrzebne kolumny, wynik jest dużo łatwiejszy do ogarnięcia. Inaczej twój wynik będzie wyglądał jak próba przeczytania długiego feeda newsów w piątek wieczorem.

  1. Minimalizacja błędów

Im mniej danych obrabiasz w zapytaniu, tym mniejsze szanse, że coś pójdzie nie tak. Zwłaszcza jeśli potem dalej pracujesz z tymi danymi.

O czym warto pamiętać?

Aliasowanie tabel

Inny sposób na radzenie sobie z długimi nazwami tabel — to używanie aliasów tabel. Powinny przypominać oryginalną nazwę tabeli albo być logicznie związane z jej zawartością.

SELECT sa05.first_name, sa05.course_id
FROM students_archive_2005 AS sa05

Ta metoda jest szczególnie przydatna, jeśli masz długie nazwy tabel jak university_students_enrollments_records — możesz użyć usr albo us

Typowe błędy przy wyborze konkretnych kolumn

  1. Błędy w nazwach kolumn. Jeśli napiszesz nazwę kolumny z błędem, dostaniesz komunikat o błędzie typu: ERROR: column "lastname" does not exist. Sprawdź poprawność nazw kolumn.

  2. Konfliktujące nazwy. Gdy w zapytaniu bierze udział kilka tabel, zawsze podawaj, do której tabeli należy pole. Na przykład, students.first_name.

  3. Używanie SELECT * — to pułapka dla początkujących. Tak, to działa i jest wygodne, ale w dużych projektach to zła praktyka! Zawsze wybieraj tylko te kolumny, które naprawdę są ci potrzebne.

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION