SQL WHERE – zadejte podmínku pomocí SQL

Poslední aktualizace:

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

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

_______________________________________________________________________________________________
Intelligent technologies - podniková řešení a školení
SQL WHERE – zadejte podmínku pomocí SQL
5 (100%) 2 vote[s]

2 thoughts on “SQL WHERE – zadejte podmínku pomocí SQL

  1. Lubomír

    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. Honza Zedníček Post author

    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://biportal.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.

Napsat komentář

Vaše emailová adresa nebude zveřejněna.

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..