Data: 8.12.2025

Wybieranie kolumn i filtrowanie wierszy w PostgreSQL
Spis treści
- Wybieranie kolumn i filtrowanie wierszy w PostgreSQL
Z artykułu dowiesz się, jak pisać zapytania SQL, wybierać kolumny oraz filtrować wiersze w bazie PostgreSQL.
Wybieranie kolumn i filtrowanie wierszy w PostgreSQL
Jeśli dopiero zaczynasz pracę z bazami danych, na początku będziesz głównie szukać konkretnych informacji w bazie. Dlatego wybieranie kolumn i filtrowanie wierszy w PostgreSQL to temat, z którym spotkasz się najczęściej.
W tym poradniku pokażę Ci, jak korzystać z poleceń, takich jak SELECT, FROM i WHERE oraz używać operatorów porównania.
Klauzula FROM w PostgreSQL – wybieranie tabel
W klauzuli FROM wskazujemy tabelę, z której chcemy odczytać informacje.
SELECT *FROM Person.Person;W przykładzie odczytujemy wszystkie kolumny i wszystkie rekordy z tabeli Person.Person.
Jeśli w zapytaniu najpierw wpiszesz nazwę tabeli w klauzuli FROM, a dopiero później uzupełniasz listę kolumn w klauzuli SELECT, edytor SQL może podpowiadać nazwy dostępnych kolumn. Dzięki temu wybieranie kolumn jest szybsze niż ich
pisanie zanim określisz źródło danych, z którego kolumny mają pochodzić.
Większość zapytań zawiera klauzulę FROM. Nie jest ona jednak obowiązkowa. W zapytaniu możemy
użyć jedynie polecenia SELECT, jeśli wykonujemy wyrażenie, dla którego nie ma potrzeby
odwoływania się do tabeli w bazie danych.
Poniższe wyrażenie wykona się i zwróci czwórkę jako wynik dodawania dwóch cyfr.
SELECT 2 + 2;Klauzula SELECT w PostgreSQL – wybieranie kolumn
Kolumny wybieramy za pomocą klauzuli SELECT. W klauzuli SELECT możemy umieścić:
-
gwiazdkę (*) – zostaną wybrane wszystkie kolumny z tabeli
SELECT *FROM Person.Person; -
listę nazw kolumn oddzielonych przecinkami – zostaną wybrane tylko kolumny umieszczone na liście. Po nazwie ostatniej kolumny nie umieszczamy przecinka.
SELECT FirstName, LastNameFROM Person.Person; -
wywołania funkcji – umożliwiają przetwarzanie danych, wykonywanie obliczeń matematycznych czy manipulację tekstem. Wynik działania funkcji zwracany jest jako nowa kolumna, której możemy nadać nazwę tymczasową za pomocą aliasu. Słowo
ASprzed aliasem nie jest obowiązkowe.W przykładzie:
- wybieramy z bazy kolumnę LastName (nazwisko)
- za pomocą funkcji
UPPERzmieniamy litery na wielkie w kolumnie LastName. Kolumnę, która powstanie w wyniku działania funkcji nazywamy „nazwisko”
SELECT LastName,UPPER(LastName) AS nazwiskoFROM Person.Person;Wynik:
lastname nazwisko 1 Sánchez SÁNCHEZ 2 Duffy DUFFY 3 Tamburello TAMBURELLO
W ramach instrukcji SELECT aliasów kolumn możemy używać tylko w klauzulach ORDER BY i GROUP BY. W
pozostałych klauzulach używamy nazw kolumn z tabeli lub funkcji, za pomocą których tworzone są nowe kolumny.
Słowo kluczowe DISTINCT w PostgreSQL – eliminowanie duplikatów
Słowo kluczowe DISTINCT służy do usuwania duplikatów z wyników zapytania.
Zwraca tylko unikalne kombinacje wartości dla wszystkich kolumn
występujących po słowie DISTINCT.
Jeśli wybierzesz kilka kolumn, unikalność dotyczy całego zestawu, a nie pojedynczych pól.
W poniższym przykładzie wybieramy wszystkie rekordy.
SELECT FirstName, LastNameFROM Person.Person;Wynik:
| firstname | lastname | |
|---|---|---|
| 1 | Syed | Abbas |
| 2 | Catherine | Abel |
| 3 | Kim | Abercrombie |
| 4 | Kim | Abercrombie |
| 5 | Kim | Abercrombie |
| 6 | Sam | Abolrous |
W poniższym przykładzie za pomocą słowa kluczowego DISTINCT usuwamy duplikaty w zestawie kolumn FirstName i LastName.
SELECT DISTINCT FirstName, LastNameFROM Person.Person;Wynik:
| firstname | lastname | |
|---|---|---|
| 1 | Syed | Abbas |
| 2 | Catherine | Abel |
| 3 | Kim | Abercrombie |
| 4 | Sam | Abolrous |
Klauzula WHERE i operatory porównania w PostgreSQL
Aby odfiltrować konkretne wiersze z tabeli, używamy klauzuli WHERE. Warunki logiczne budujemy najczęściej przy użyciu standardowych operatorów porównania.
Poniżej znajduje się lista najczęściej używanych operatorów w PostgreSQL.
-
Równy (
=) – zwraca prawdę, jeśli porównywane wartości są identyczne. W przykładzie wybieramy tylko rekordy, w przypadku których nazwisko to „Miller”.SELECT *FROM Person.PersonWHERE LastName = 'Miller'; -
Różny (
<>lub!=) – zwraca prawdę, jeśli porównywane wartości są różne. W przykładzie wybieramy wszystkich klientów, dla których nazwisko różni się od „Miller”.SELECT *FROM Person.PersonWHERE LastName <> 'Miller'; -
Mniejszy niż (
<) – zwraca prawdę, jeśli wartość po lewej stronie operatora jest mniejsza od wartości po stronie prawej. Wybieramy te rekordy, w przypadku których wartość w kolumnie EmailPromotion jest mniejsza od 1.SELECT *FROM Person.PersonWHERE EmailPromotion < 1; -
Mniejszy lub równy (
<=) – zwraca prawdę, jeśli wartość po lewej stronie operatora jest mniejsza lub równa wartości po stronie prawej. Wybieramy te rekordy, w przypadku których wartość w kolumnie EmailPromotion jest mniejsza lub równa 1.SELECT *FROM Person.PersonWHERE EmailPromotion <= 1; -
Większy niż (
>) – zwraca prawdę, jeśli wartość po lewej stronie operatora jest większa od wartości po stronie prawej. Wybieramy te rekordy, w przypadku których wartość w kolumnie EmailPromotion jest większa od zera.SELECT *FROM Person.PersonWHERE EmailPromotion > 0; -
Większy lub równy (
>=) – zwraca prawdę, jeśli wartość po lewej stronie operatora jest większa lub równa wartości po stronie prawej. Wybieramy te rekordy, w przypadku których wartość w kolumnie EmailPromotion jest większa lub równa zero.SELECT *FROM Person.PersonWHERE EmailPromotion >= 0;
Stronicowanie wyników zapytań SQL
Stronicowanie (ang. pagination) to metoda dzielenia wyników zapytania na mniejsze fragmenty („strony”).
W PostgreSQL stronicowanie najczęściej realizujemy za pomocą klauzul LIMIT oraz OFFSET, często w połączeniu z sortowaniem (klauzula ORDER BY).
Mechanizmy te pozwalają zarówno ograniczyć liczbę zwracanych wierszy, jak i wskazać wiersz początkowy dla danej strony wyników.
Klauzula LIMIT w PostgreSQL
W PostgreSQL klauzula LIMIT służy do pobrania określonej liczby rekordów.
Bez wcześniejszego sortowania danych, użycie klauzuli LIMIT zwraca rekordy w dowolnej kolejności, która wynika zazwyczaj z fizycznego ułożenia danych na dysku.
Poniższe zapytanie zwróci 3 rekordy z tabeli, według dowolnej kolejności.
SELECT FIRST_NAME, LAST_NAME, HOME_PHONEFROM EMPLOYEESLIMIT 3;Klauzula ORDER BY powoduje posortowanie rekordów.
W przykładzie sortujemy rekordy według nazwiska (LAST_NAME) malejąco, co nadaje wynikom ściśle określoną kolejność. Dopiero na tak uporządkowanym zbiorze wykonywana jest klauzula LIMIT, która odcina wynik do pierwszych trzech wierszy.
SELECT FIRST_NAME, LAST_NAME, HOME_PHONEFROM EMPLOYEESORDER BY LAST_NAME DESCLIMIT 3;Klauzula FETCH FIRST n ROWS ONLY
Klauzula FETCH FIRST number ROWS ONLY, tak samo jak klauzula LIMIT, pozwala ograniczać liczbę wierszy zwracanych przez zapytanie.
Poniższe zapytanie zwraca 3 rekordy według domyślnej kolejności, która najczęściej wynika z fizycznego ułożenia danych na dysku.
SELECT ORDER_ID, ORDER_DATEFROM ORDERSFETCH FIRST 3 ROWS ONLY;W poniższym zapytaniu rekordy są posortowane według kolumny Order_date (Data zamówienia). Otrzymamy wynik składający się z pierwszych trzech zamówień.
SELECT ORDER_ID, ORDER_DATEFROM ORDERSORDER BY ORDER_DATEFETCH FIRST 3 ROWS ONLY;
Klauzula FETCH FIRST n ROWS WITH TIES
Klauzula FETCH FIRST n ROWS WITH TIES wyświetla n początkowych rekordów oraz dodatkowe, które są równoważne ostatniemu
rekordowi.
Poniższe zapytanie ma zwrócić 3 pierwsze zamówienia. Jeśli jednak na granicy odcięcia, czyli na kolejnych pozycjach po trzeciej znajdują się zamówienia z taką samą datą zamówienia, jak zamówienie z trzeciej pozycji, zostaną one też uwzględnione w wyniku zapytania.
SELECT ORDER_ID, ORDER_DATEFROM ORDERSORDER BY ORDER_DATEFETCH FIRST 3 ROWS WITH TIES;
Filtr OFFSET-FETCH
Filtr OFFSET-FETCH jest rozszerzeniem klauzuli ORDER BY. W klauzuli OFFSET możemy wskazać, ile początkowych wierszy chcemy pominąć, natomiast w klauzuli FETCH określamy, ile wierszy następujących po opuszczonych wierszach, pobieramy.
W przykładzie sortujemy dane według kolumny Employee_ID (ID pracownika), następnie pomijamy 2 pierwsze rekordy i wyświetlamy 3 kolejne.
SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, HOME_PHONEFROM EMPLOYEESORDER BY EMPLOYEE_IDOFFSET 2 ROWS FETCH NEXT 3 ROWS ONLY;Opanowanie poleceń SELECT, FROM oraz WHERE to pierwszy ważny krok w pracy z bazami. Język PostgreSQL oferuje znacznie więcej możliwości, takich jak łączenie tabel, czy grupowanie danych.
Jeśli chcesz uporządkować swoją wiedzę i płynnie przejść do bardziej zaawansowanych zagadnień pod okiem eksperta, sprawdź nasz kurs PostgreSQL od podstaw.
