Skip to main content

2.6 Výberový dopyt – operátory selekcie

Selekcia údajov

Ako už vieme, selekcia údajov znamená filtrovanie riadkov, ktorým sa bude venovať SQL dopyt. Uskutočníme ju zadaním podmienky v klauzule WHERE.

Základné operátory porovnávania

V podmienke môžeme využívať bežné operátory, ako ich poznáme z programovacích jazykov: =, !=, <, >, <=, >=. No pozor, na rozdiel od C++ je operátorom porovnávania rovnosti jednoduchý operátor =. Na vyjadrenie nerovnosti môžeme napísať != alebo <>.

-- zamestnanci s platom aspoň 2000
SELECT
  CONCAT(first_name, ' ', last_name) AS zamestnanec,
  salary AS plat,
  department_id AS oddelenie
FROM employees
WHERE salary >= 2000;

Logické operátory

Využívať môžeme aj logické operátory, ako ich poznáme z programovacích jazykov, píšu sa slovne: AND, OR, NOT. V komplikovanejších výrazoch je potrebné myslieť na priority operátorov.

-- zoznam zamestnancov s platom od 2000 do 3000
SELECT
  CONCAT(first_name, ' ', last_name) AS zamestnanec,
  salary AS plat
FROM employees
WHERE 2000 <= salary AND salary <= 3000;

-- zoznam zamestnancov s menom John, James a Julia
SELECT
  CONCAT(first_name, ' ', last_name) AS zamestnanec
FROM employees
WHERE LOWER(first_name) = 'john' OR LOWER(first_name) = 'james' OR LOWER(first_name) = 'julia';

Špeciálne operátory porovnávania

Okrem toho môžeme využívať pokročilejšie výrazy, ktoré nám umožňujú efektívnejšie pracovať:

  • {výraz} BETWEEN {od} AND {do}: umožní definovať uzavretý interval hodnôt (vrátane krajných);
  • {výraz} IN({zoznam hodnôt}): umožní hľadať zhodu s ktoroukoľvek hodnotou z vymenovaného zoznamu;
  • {textový výraz} LIKE '{reťazec so zástupnými znakmi}': umožní hľadať približnú zhodu textu využitím zástupných znakov % (čokoľvek, teda ľubovoľný počet znakov, aj nulový) a _ (akýkoľvek znak, práve jeden).
-- zoznam zamestnancov s platom od 2000 do 3000
SELECT
  CONCAT(first_name, ' ', last_name) AS zamestnanec,
  salary AS plat
FROM employees
WHERE salary BETWEEN 2000 AND 3000;

-- zoznam zamestnancov s menom John, James a Julia
SELECT
  CONCAT(first_name, ' ', last_name) AS zamestnanec
FROM employees
WHERE LOWER(first_name) IN('john', 'james', 'julia');

-- zoznam pracovných zaradení, ktoré obsahujú slovo „manager“
SELECT job_id, job_title
FROM jobs
WHERE LOWER(job_title) LIKE '%manager%';

-- priezviská, ktoré majú na 2. pozícii písmeno „o“
SELECT DISTINCT last_name
FROM employees
WHERE last_name LIKE '_o%';

Pri využívaní operátora LIKE niekedy potrebujeme takzvaný „escape“ (únikový) znak. V MySQL/MariaDB a PostgreSQL môžeme priamo využívať znak „\“ (rovnako ako v C++), no v Oracle SQL musíme a v PostgreSQL môžeme nastaviť akýkoľvek escape znak dodatkom ESCAPE:

  • {textový výraz} LIKE '{reťazec so zástupnými znakmi}' ESCAPE {znak}
-- zoznam pracovných zaradení, ktorých ID končí textom „_MAN“
SELECT job_id, job_title
FROM jobs
WHERE UPPER(job_id) LIKE '%\_MAN' ESCAPE '\';

Porovnávanie s hodnotou NULL

Pri hľadaní NULL hodnôt nemôžeme použiť priame porovnávanie – podmienkou by bol výraz s hodnotou NULL a jeho výsledkom je vždy NULL, teda takáto podmienka by bola vždy nepravdivá. Na tento účel však máme výrazy IS NULL a IS NOT NULL.

-- zoznam oddelení, ktoré majú svojho vedúceho
SELECT department_name, manager_id
FROM departments
WHERE manager_id IS NOT NULL;