SQL WHERE – zadejte podmínku pomocí SQL

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 votes

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.

This site uses Akismet to reduce spam. Learn how your comment data is processed.