PostgreSQL - klauzula WHERE

Klauzula PostgreSQL WHERE służy do określenia warunku podczas pobierania danych z jednej tabeli lub łączenia z wieloma tabelami.

Jeśli podany warunek jest spełniony, tylko wtedy zwraca określoną wartość z tabeli. Za pomocą klauzuli WHERE można odfiltrować wiersze, których nie chcesz uwzględniać w zestawie wyników.

Klauzula WHERE jest używana nie tylko w instrukcji SELECT, ale jest również używana w instrukcjach UPDATE, DELETE itp., Które będziemy badać w kolejnych rozdziałach.

Składnia

Podstawowa składnia instrukcji SELECT z klauzulą ​​WHERE jest następująca -

SELECT column1, column2, columnN
FROM table_name
WHERE [search_condition]

Warunek_wyszukiwania można określić za pomocą porównania lub operatorów logicznych. takie jak>, <, =, LIKE, NOT itd. Poniższe przykłady wyjaśniają tę koncepcję.

Przykład

Rozważ poniższą tabelę FIRMA zawierająca rekordy -

testdb# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

Oto proste przykłady pokazujące użycie operatorów logicznych PostgreSQL. Następująca instrukcja SELECT wyświetli listę wszystkich rekordów, w których WIEK jest większy lub równy 25AND wynagrodzenie jest większe lub równe 65000,00 -

testdb=# SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;

Powyższa instrukcja PostgreSQL da następujący wynik -

id | name  | age |  address   | salary
----+-------+-----+------------+--------
  4 | Mark  |  25 | Rich-Mond  |  65000
  5 | David |  27 | Texas      |  85000
(2 rows)

Poniższa instrukcja SELECT zawiera listę wszystkich rekordów, w których AGE jest większe lub równe 25 OR wynagrodzenie jest większe lub równe 65000,00 -

testdb=# SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000;

Powyższa instrukcja PostgreSQL da następujący wynik -

id | name  | age | address     | salary
----+-------+-----+-------------+--------
  1 | Paul  |  32 | California  |  20000
  2 | Allen |  25 | Texas       |  15000
  4 | Mark  |  25 | Rich-Mond   |  65000
  5 | David |  27 | Texas       |  85000
(4 rows)

Poniższa instrukcja SELECT zawiera listę wszystkich rekordów, w których AGE nie jest równe NULL, co oznacza wszystkie rekordy, ponieważ żaden z rekordów nie ma wartości AGE równej NULL -

testdb=#  SELECT * FROM COMPANY WHERE AGE IS NOT NULL;

Powyższa instrukcja PostgreSQL da następujący wynik -

id | name  | age | address    | salary
 ----+-------+-----+------------+--------
   1 | Paul  |  32 | California |  20000
   2 | Allen |  25 | Texas      |  15000
   3 | Teddy |  23 | Norway     |  20000
   4 | Mark  |  25 | Rich-Mond  |  65000
   5 | David |  27 | Texas      |  85000
   6 | Kim   |  22 | South-Hall |  45000
   7 | James |  24 | Houston    |  10000
(7 rows)

Poniższa instrukcja SELECT zawiera listę wszystkich rekordów, w których NAZWA zaczyna się od „Pa”, bez względu na to, co następuje po „Pa”.

testdb=# SELECT * FROM COMPANY WHERE NAME LIKE 'Pa%';

Powyższa instrukcja PostgreSQL da następujący wynik -

id | name | age |address    | salary
----+------+-----+-----------+--------
  1 | Paul |  32 | California|  20000

Poniższa instrukcja SELECT zawiera listę wszystkich rekordów, w których wartość AGE wynosi 25 lub 27 -

testdb=# SELECT * FROM COMPANY WHERE AGE IN ( 25, 27 );

Powyższa instrukcja PostgreSQL da następujący wynik -

id | name  | age | address    | salary
----+-------+-----+------------+--------
  2 | Allen |  25 | Texas      |  15000
  4 | Mark  |  25 | Rich-Mond  |  65000
  5 | David |  27 | Texas      |  85000
(3 rows)

Poniższa instrukcja SELECT zawiera listę wszystkich rekordów, w których wartość AGE nie wynosi ani 25, ani 27 -

testdb=# SELECT * FROM COMPANY WHERE AGE NOT IN ( 25, 27 );

Powyższa instrukcja PostgreSQL da następujący wynik -

id | name  | age | address    | salary
----+-------+-----+------------+--------
  1 | Paul  |  32 | California |  20000
  3 | Teddy |  23 | Norway     |  20000
  6 | Kim   |  22 | South-Hall |  45000
  7 | James |  24 | Houston    |  10000
(4 rows)

Poniższa instrukcja SELECT zawiera listę wszystkich rekordów, w których wartość WIEK mieści się między 25 a 27 -

testdb=# SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27;

Powyższa instrukcja PostgreSQL da następujący wynik -

id | name  | age | address    | salary
----+-------+-----+------------+--------
  2 | Allen |  25 | Texas      |  15000
  4 | Mark  |  25 | Rich-Mond  |  65000
  5 | David |  27 | Texas      |  85000
(3 rows)

Następująca instrukcja SELECT wykorzystuje podzapytanie SQL, w którym podzapytanie znajduje wszystkie rekordy z polem AGE o wartości SALARY> 65000 i późniejszą jest używana klauzula WHERE wraz z operatorem EXISTS w celu wyświetlenia wszystkich rekordów, w których w zwróconym wyniku występuje AGE z zapytania zewnętrznego przez zapytanie podrzędne -

testdb=# SELECT AGE FROM COMPANY
        WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000);

Powyższa instrukcja PostgreSQL da następujący wynik -

age
-----
  32
  25
  23
  25
  27
  22
  24
(7 rows)

Następująca instrukcja SELECT wykorzystuje podzapytanie SQL, w którym podzapytanie znajduje wszystkie rekordy z polem AGE mającym SALARY> 65000 i późniejszą klauzulę WHERE wraz z operatorem>, aby wyświetlić listę wszystkich rekordów, w których WIEK z zapytania zewnętrznego jest większy niż wiek w wynik zwrócony przez zapytanie podrzędne -

testdb=# SELECT * FROM COMPANY
        WHERE AGE > (SELECT AGE FROM COMPANY WHERE SALARY > 65000);

Powyższa instrukcja PostgreSQL da następujący wynik -

id | name | age | address    | salary
----+------+-----+------------+--------
  1 | Paul |  32 | California |  20000