Odporúčaná, 2024

Redakcia Choice

Rozdiel medzi tým, kde a ako má v SQL

Klauzula WHERE a HAVING sa používa hlavne vo vyhlásení o dotazoch SQL, čo nám umožňuje obmedziť kombináciu vo vzťahu výsledkov pomocou konkrétneho predikátu. Hlavným rozdielom medzi WHERE a HAVING je to, že klauzula WHERE špecifikuje podmienky výberu n-tíc (riadkov) zo vzťahov vrátane podmienok spojenia, ak je to potrebné. Na druhej strane, doložka HAVING špecifikuje podmienku pre vybrané skupiny skôr ako pre jednotlivé n-tice.

SQL je Štruktúrovaný jazyk dopytov ; je to komplexný alebo deklaratívny jazyk databázy používaný na prístup k údajom z databáz.

Porovnávacia tabuľka

Základ pre porovnanieKDEMAJÚCE
základnéImplementované v riadkových operáciách.Implementované v operáciách stĺpcov.
Aplikovaný naJeden riadokZhrnuté riadky alebo skupiny.
Vyberanie údajovZískava iba konkrétne údaje z konkrétnych riadkov podľa podmienok.Najskôr sa načítajú kompletné údaje a potom sa oddeľujú podľa podmienok.
Agregované funkcieNemôže sa zobraziť v klauzule WHERE.Môže sa zobraziť v klauzule HAVING.
Používa sa sSELECT a ďalšie vyhlásenia, ako sú UPDATE, DELETE alebo niektorý z nich.Nemožno ho použiť bez vyhlásenia SELECT.
Chovať sa akoPre-filterPost-filter
GROUP BYPochádza po WHERE.Pochádza po HAVING.

Definícia klauzuly

Klauzula SQL WHERE sa používa na opis stavu v čase načítania údajov z jednej tabuľky alebo spojenia s viacerými tabuľkami. Vracia danú hodnotu z tabuľky len vtedy, ak je daná podmienka splnená. Klauzula WHERE sa používa na prenikanie záznamov a získavanie len potrebných záznamov.

SQL tiež implementuje logické spojenia a, alebo nie v klauzule WHERE, ktoré sú tiež známe ako booleovské podmienky; podmienka musí byť pravdivá na získanie n-tic. Operandy výrazov logických spojov zahŕňajú porovnávacie operátory ako <, <=, >, > =, = a , Tieto porovnávacie operátory porovnávajú reťazce a aritmetické výrazy. Môže sa použiť v príkaze SELECT, ako aj v príkazoch UPDATE a DELETE .

Vezmime si príklad. Tabuľka uvedená nižšie nazvaná ako tabuľka " Predaj " pozostáva z atribútov " Product " a " Sales_amount ".

Nasleduje nasledujúci dopyt, ktorý má vypočítať celkový počet telefónov a reproduktorov.

 SELECT Produkt, suma (Sales_amount) AS Total_sales FROM Predaj WHERE Produkt v ('Telefón', 'Reproduktory') GROUP BY Produkt; 

Nasledujúcim výstupom je výsledný výstup, pri ktorom sa riadky najprv filtrovajú, potom sa získajú riadky telefónu a reproduktorov, potom sa vykoná agregovaná funkcia.

Definícia doložky

SQL poskytuje klauzulu HAVING, ktorú je možné použiť spolu s klauzulou GROUP BY . Táto klauzula HAVING pomáha pri získavaní hodnôt pre skupiny, ktoré spĺňajú určité podmienky. Klauzula WHERE môže byť použitá aj v spojení s klauzulou HAVING počas výberu, klauzula WHERE filtruje jednotlivé riadky. Riadky sa potom zoskupia a vykonajú sa agregované výpočty. Posledná klauzula HAVING filtruje skupiny.

Chová sa rovnako ako WHERE pri použití kľúčového slova GROUP BY. Skupinové funkcie ako min, max, avg, súčet a počet sa môžu zobraziť len v dvoch klauzulách: SELECT a HAVING. Poskytuje podmienku pre n-tity zodpovedajúce každej hodnote v skupine atribútov. Jediný súbor záznamov, ktorý spĺňa podmienky, sa zobrazí ako výsledok.

Aj tu máme rovnaký príklad ako klauzula WHERE a zvažujeme rovnakú tabuľku predajov . Keď chceme vypočítať Total_sales telefónu a reproduktorov pomocou klauzuly HAVING, zapíšeme nasledujúci dotaz.

 SELECT Produkt, suma (Sales_amount) AS Total_sales FROM Sales SKUPINA PODĽA Produktu HAVING Produktu v ('telefón', 'Reproduktory'); 

Dotaz produkuje nasledujúci výstup, kde sa produkty najprv získajú, potom sa vykoná súhrnná funkcia (súčet) a posledné skupiny sú filtrované na rozdiel od klauzuly WHERE.

Keď chceme nájsť iba tie produkty, ktorých hodnota Total_sales je väčšia ako 1000. Dotaz môže byť napísaný ako:

 SELECT Produkt, súčet (Sales_amount) AS Total_sales FROM Sales GROUP BY Produkt HAVING súčet (Sales_amount)> 1000; 

Vyrobený výkon je:

Toto nie je možné vykonať pomocou klauzuly WHERE napriek tomu, že HAVING generuje chybové hlásenie, pretože klauzule WHERE nemožno použiť s agregovanými funkciami.

Kľúčové rozdiely medzi tým, kde a klauzulou

  1. Klauzula WHERE sa používa pri riadkových operáciách a používa sa na jednom riadku, zatiaľ čo klauzula HAVING sa používa v operáciách stĺpcov a môže sa použiť na súhrnné riadky alebo skupiny.
  2. V klauzule WHERE sa požadované údaje získajú podľa použitých podmienok. Na rozdiel od toho, klauzula HAVING načíta celé údaje, potom sa oddelenie vykoná podľa podmienok.
  3. Agregované funkcie ako min, sum, max, avg sa nemôžu zobraziť spolu s klauzulou WHERE. Na rozdiel od toho sa tieto funkcie môžu objaviť v klauzule HAVING.
  4. Klauzula HAVING nemôže používať bez vyhlásenia SELECT. Naopak WHERE možno použiť s SELECT, UPDATE, DELETE atď.
  5. Klauzula WHERE sa správa ako predfiltr, zatiaľ čo klauzula HAVING slúži ako postfilter.
  6. Klauzula WHERE, keď sa používa s GROUP BY, prichádza pred GROUP BY. To znamená, že riadky WHERE pred vyplnením súhrnných výpočtov. Na druhej strane, HAVING prichádza po GROUP BY, čo znamená, že sa filtre po vykonaní súhrnných výpočtov.

záver

Klauzula WHERE a HAVING funguje rovnakým spôsobom, s výnimkou doplnkovej funkcie, ktorú je klauzula HAVING populárna. Klauzula HAVING môže efektívne pracovať s agregovanými funkciami, kým WHERE nie je možné prevádzkovať s agregátnymi funkciami.

Top