Data: 8.12.2025

Wybieranie kolumn i filtrowanie wierszy w PostgreSQL

Wybieranie kolumn i filtrowanie wierszy w PostgreSQL

Spis treści

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, FROMWHERE 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, LastName
    FROM 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 AS przed aliasem nie jest obowiązkowe.

    W przykładzie:

    • wybieramy z bazy kolumnę LastName (nazwisko)
    • za pomocą funkcji UPPER zmieniamy litery na wielkie w kolumnie LastName. Kolumnę, która powstanie w wyniku działania funkcji nazywamy „nazwisko”
    SELECT LastName,
    UPPER(LastName) AS nazwisko
    FROM Person.Person;

    Wynik:

    lastnamenazwisko
    1SánchezSÁNCHEZ
    2DuffyDUFFY
    3TamburelloTAMBURELLO

W ramach instrukcji SELECT aliasów kolumn możemy używać tylko w klauzulach ORDER BYGROUP 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, LastName
FROM Person.Person;

Wynik:

firstnamelastname
1SyedAbbas
2CatherineAbel
3KimAbercrombie
4KimAbercrombie
5KimAbercrombie
6SamAbolrous

W poniższym przykładzie za pomocą słowa kluczowego DISTINCT usuwamy duplikaty w zestawie kolumn FirstName i LastName.

SELECT DISTINCT FirstName, LastName
FROM Person.Person;

Wynik:

firstnamelastname
1SyedAbbas
2CatherineAbel
3KimAbercrombie
4SamAbolrous

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.Person
    WHERE 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.Person
    WHERE 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.Person
    WHERE 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.Person
    WHERE 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.Person
    WHERE 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.Person
    WHERE 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_PHONE
FROM EMPLOYEES
LIMIT 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_PHONE
FROM EMPLOYEES
ORDER BY LAST_NAME DESC
LIMIT 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_DATE
FROM ORDERS
FETCH 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_DATE
FROM ORDERS
ORDER BY ORDER_DATE
FETCH FIRST 3 ROWS ONLY;

Title

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_DATE
FROM ORDERS
ORDER BY ORDER_DATE
FETCH FIRST 3 ROWS WITH TIES;

Title

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_PHONE
FROM EMPLOYEES
ORDER BY EMPLOYEE_ID
OFFSET 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.

Ewa Barbara Lelusz
Ewa Barbara Lelusz
Analityk biznesowy
Udostępnij wpis:udostępnij Facebookudostępnij Linkedinudostępnij e-mail

Polecane