WHERE klauzule slouží k definování omezujících podmínek při dotazování. Ve většině případů nás při dotazování do tabulky nezajímají všechny záznamy, ale pouze určitá jejich podmnožina na základě kritérií. Kritéria definujeme pomocí operátorů.

Pořadí v SQL skriptu

  1. SELECT
  2. FROM
  3. WHERE
  4. GROUP BY
  5. HAVING
  6. ORDER BY

Syntaxe WHERE:

SELECT [Sloupec1], [Sloupec2]
FROM Tabulka
WHERE pole <Operator>
hodnota

SQL Operátory

Operátorům se budeme věnovat v samostatné kapitole, níže uvedu seznam tzv. porovnávacích operátorů (comparsion) se kterými pracujeme, pokud chceme filtrovat data.

  • = [rovná se]
  • <> [nerovná se]
  • < [je menší než]
  • <= [je menší než nebo rovno]
  • > [je větší]
  • >= [je větší než nebo rovno]
  • BETWEEN [je mezi]
  • LIKE [jako, podobně]
  • IN [více hodnot]

Příklad použítí klauzule WHERE s operátorem BETWEEN a >= <=

Tabulka se kterou budeme pracovat strukturu viz obrázek níže a obsahuje 18484 záznamů:

Dimcustomer-pred-WHERE-klauzuli
Vstupní data

Pomocí klauzule vyfiltrujeme zákazníky, kteří mají datum narození [BirthDate] mezi 1.1.1920 a 31.12.1921 včetně. Máme 2 možnosti, výsledky budou stejné:

První možností je použití operátoru BETWEEN (krajní datumy se do podmínky počítají)

--Možnost 1
SELECT [CustomerKey]
,[FirstName]
,[LastName]
,[BirthDate]
FROM [AdventureWorksDW2012].[dbo].[DimCustomer]
WHERE BirthDate BETWEEN '1920-01-01' AND '1921-12-31'

druhá možnost je použít operátory <= a >=

--Možnost 2
SELECT [CustomerKey]
,[FirstName]
,[LastName]
,[BirthDate]
FROM [AdventureWorksDW2012].[dbo].[DimCustomer]
WHERE BirthDate >= '1920-01-01' AND BirthDate<=
'1921-12-31'

Výsledkem je pouze 5 záznamů zákazníků narozených mezi 1.1.1920 a 31.12.1921

Vysledek po omezeni SQL WHERE
Výsledek příkladu po aplikaci klauzule

5/5 - (2 votes)

Ing. Jan Zedníček - Data Engineer & Controlling

Jmenuji se Honza Zedníček a působím jako freelancer. Pracoval jsem dříve také jako BI developer, finanční controller a analytik. Vše pro společnosti z oblasti IT, bankovnictví, consultingu a výroby. Po práci si rád zahraju tenis, volejbal, šachy, zajdu do posilovny a občas neúspěšně odpálím pár balónků v golfu 🏌️

Již cca 10 let zapisuji na tento web různé návody určené zejména odborné veřejnosti, studentům a zájemcům o informace z oblastí Business intelligence, korporátních financí a reportingu.

🔥 Přihlašte se do naší Excel facebook skupiny (2.4k+ členů), kde si pomáháme Excel CZ/SK diskuse »

2 comments on “SQL WHERE – Zadáváme podmínku u tabulky pomocí SQL

  1. Je prosím nějaké logické vysvětlení, proč nelze v podmínce WHERE používat alias názvu sloupce?

    Příklad (funkční):
    SELECT cislo FROM (VALUES (10), (20), (30), (40), (50)) as tabulka(cislo) WHERE cislo > 35

    Příklad s aliasem sloupce ‘cislo AS c’ a pokusem použít jej v podmínce (nefunkční):
    SELECT cislo AS c FROM (VALUES (10), (20), (30), (40), (50)) as tabulka(cislo) WHERE c > 35

  2. Ahoj Lubomíre, díky za výborný dotaz. SQL Server jednotlivé klauzule zpracovává v určitém pořadí. SELECT klauzule se zpracovává jako předposlední. Znamená to, že v momentu, kdy SQL Server vyhodnocuje klauzuli WHERE, tak alias ještě nezná. Téma je už trošku pokročilejší SQL

    Jiná situace je kdybys zkusil použít alias v klauzuli ORDER BY která alias znát bude, protože ORDER BY se zpracovává až úplně nakonec za SELECT. Pokusil jsem se to sepsat https://janzednicek.cz/sql-zpracovani-dotazu/.

    Není těžké se dovtípit proč se klauzule FROM a WHERE zpracovává úplně na začátku – důvody jsou čistě výkonové => na začátku se SQL Server musí zbavit nepotřebných záznamů (FROM,WHERE) a nad až na záznamy se kterými chceme pracovat dělat SELECT, ORDER BY, GROUP BY agregace, HAVING apod.

Leave a Reply

Your email address will not be published. Required fields are marked *