Mající (SQL) - Having (SQL)
tento článek ne uvést žádný Zdroje.Září 2018) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
A MÁM
doložka v SQL určuje, že SQL VYBRAT
příkaz musí vrátit pouze řádky, kde agregované hodnoty splňují zadané podmínky.
MÁM
a KDE
jsou začátečníky často zmateni, ale slouží různým účelům. KDE
je bráno v úvahu v dřívější fázi provádění dotazu a filtruje řádky načtené z tabulek. Pokud dotaz obsahuje SKUPINA VYTVOŘENÁ
, data z tabulek jsou seskupena a agregována. Po agregační operaci MÁM
je použito a odfiltruje řádky, které neodpovídají zadaným podmínkám. Proto, KDE
platí pro data načtená z tabulek a MÁM
by se mělo vztahovat pouze na agregovaná data, která nejsou známa v počáteční fázi dotazu.
Chcete-li zobrazit současný stav tvořený SKUPINA VYTVOŘENÁ
doložka, MÁM
je použita klauzule.[je zapotřebí objasnění ]
Příklady
Chcete-li vrátit seznam ID oddělení, jejichž celkový prodej k 1. lednu 2000 přesáhl 1000 USD, spolu se součtem jejich prodejů k tomuto datu:
VYBRAT DeptID, SOUČET(Výprodej)Z OdbytKDE Datum slev = '01 -Jan-2000 'SKUPINA PODLE DeptIDMÁM SOUČET(Výprodej) > 1000
S odkazem na ukázkové tabulky v Připojit se příklad, následující dotaz vrátí seznam oddělení, která mají více než 1 zaměstnance:
VYBRAT DepartmentName, POČET(*) Z ZaměstnanecPŘIPOJIT SE oddělení NA Zaměstnanec.ID oddělení = oddělení.ID oddělení SKUPINA PODLE DepartmentNameMÁM POČET(*)>1;
MÁM
je pohodlné, ale není nutné. Kód ekvivalentní výše uvedenému příkladu, ale bez použití MÁM
, může vypadat jako:
VYBRAT * Z ( VYBRAT DepartmentName TAK JAKO deptNam, POČET(*) TAK JAKO DŮLEŽITÉ Z Zaměstnanec TAK JAKO emp PŘIPOJIT SE oddělení TAK JAKO odd NA emp.ID oddělení = odd.ID oddělení SKUPINA PODLE deptNam) TAK JAKO grpKDE grp.DŮLEŽITÉ > 1;