Mis vahe on MySQL-is avalduste „millel” ja „kus” erinevus? Millal on sobiv neid kõiki kasutada?


Vastus 1:

kus klauslit kasutatakse dokumentide piiramiseks. või ainult sobivate kirjete hankimiseks.

omamine on sama, mis klausli kirjete piiramiseks. kuid seda kasutatakse ainult siis, kui teil on GroupBy klausel. Ja rühmade kaupa klausleid kasutatakse siis, kui teil on duplikaate kirjeid ja soovite koondada ühe kirje kirjeteks sum, count, avg, max, min jne.

Nt kus: SQL allpool on klientide tellimuste arv: VALI * tellimustest, kus kliendi_id = 25.

Nt, kui teil on: SQList allpool on klientide tellimuste arv: SELECT customer_id, COUNT (order_id) FROM tellimuste RÜHM kliendi_id


Vastus 2:

Põhiline selgitus on see, et KUS filtreerib kõigepealt, HAVING filtreerib pärast. See on põhjus, miks HAVINGi kasutatakse koondatud funktsioonide jaoks - kirjed liidetakse pärast WHERE tingimust.

SQL-näide: kõik kasutajad, kelle nimi on Mike, kui rohkem kui 3 on sama vanused

VALI COUNT (*) arv, vanus, nimi kasutajatelt KUS nimi = "Mike" RÜHM vanuse järgi, KUI number> 3

Kuidas see töötab: 1. MySql valib kõigepealt kõik kasutajad, kellel on nimi Mike2. Kõik kasutajad grupeeritakse vanuse järgi - oletame, et vanuses 34 kasutajat on 4, MySql kuvab sama vanuse kohta ainult ühe kirje / kasutaja (looge grupp vanuse järgi 34) .3. Alles nüüd arvestab MySql grupeeritud kasutajaid ja saab kontrollida, kui palju kasutajaid ühes konkreetses rühmas on.

Nagu näete, peavad need toimingud toimuma selles kindlas järjekorras.

Nüüd on oluline teada, et kõik, mida te HALDAMISES kasutate, peab SELECTis olema. Näide:

- See EI OLE VALID SELECT COUNT (*) numbrit, nime, vanust kasutajatelt KUS nimi = "Mike" GROUP GROUP vanuse järgi, millel on aadress <> "" - aadressi pole valitud - aga see on VALID SELECT COUNT (* ) arv, nimi, vanus kasutajatelt KUS name = "Mike" JA aadress <> "" Rühmita vanus vanuse järgi, vanus> 30 - saame filtreerida ükskõik millise valiku järgi

Kiiruse huvides soovite indeksite arvessevõtmiseks kasutada KUS

Meie näites ütleme, et vanus on indeks, ülaltoodud SQL on palju aeglasem kui järgmine

SELECT COUNT (*) number, nimi, vanus kasutajatelt KUS name = "Mike" JA aadress <> "" JA vanus> 30 - kasutame INDEKSIDE RÜHMA vanuse järgi - ärge kasutage HAVINGut pärast kõigi raskete tööde tegemist

Hea vastuse leiate ka siit: KUS vs KUI (teine ​​vastus SELGdab jõudluse osa)


Vastus 3:

Põhiline selgitus on see, et KUS filtreerib kõigepealt, HAVING filtreerib pärast. See on põhjus, miks HAVINGi kasutatakse koondatud funktsioonide jaoks - kirjed liidetakse pärast WHERE tingimust.

SQL-näide: kõik kasutajad, kelle nimi on Mike, kui rohkem kui 3 on sama vanused

VALI COUNT (*) arv, vanus, nimi kasutajatelt KUS nimi = "Mike" RÜHM vanuse järgi, KUI number> 3

Kuidas see töötab: 1. MySql valib kõigepealt kõik kasutajad, kellel on nimi Mike2. Kõik kasutajad grupeeritakse vanuse järgi - oletame, et vanuses 34 kasutajat on 4, MySql kuvab sama vanuse kohta ainult ühe kirje / kasutaja (looge grupp vanuse järgi 34) .3. Alles nüüd arvestab MySql grupeeritud kasutajaid ja saab kontrollida, kui palju kasutajaid ühes konkreetses rühmas on.

Nagu näete, peavad need toimingud toimuma selles kindlas järjekorras.

Nüüd on oluline teada, et kõik, mida te HALDAMISES kasutate, peab SELECTis olema. Näide:

- See EI OLE VALID SELECT COUNT (*) numbrit, nime, vanust kasutajatelt KUS nimi = "Mike" GROUP GROUP vanuse järgi, millel on aadress <> "" - aadressi pole valitud - aga see on VALID SELECT COUNT (* ) arv, nimi, vanus kasutajatelt KUS name = "Mike" JA aadress <> "" Rühmita vanus vanuse järgi, vanus> 30 - saame filtreerida ükskõik millise valiku järgi

Kiiruse huvides soovite indeksite arvessevõtmiseks kasutada KUS

Meie näites ütleme, et vanus on indeks, ülaltoodud SQL on palju aeglasem kui järgmine

SELECT COUNT (*) number, nimi, vanus kasutajatelt KUS name = "Mike" JA aadress <> "" JA vanus> 30 - kasutame INDEKSIDE RÜHMA vanuse järgi - ärge kasutage HAVINGut pärast kõigi raskete tööde tegemist

Hea vastuse leiate ka siit: KUS vs KUI (teine ​​vastus SELGdab jõudluse osa)


Vastus 4:

Põhiline selgitus on see, et KUS filtreerib kõigepealt, HAVING filtreerib pärast. See on põhjus, miks HAVINGi kasutatakse koondatud funktsioonide jaoks - kirjed liidetakse pärast WHERE tingimust.

SQL-näide: kõik kasutajad, kelle nimi on Mike, kui rohkem kui 3 on sama vanused

VALI COUNT (*) arv, vanus, nimi kasutajatelt KUS nimi = "Mike" RÜHM vanuse järgi, KUI number> 3

Kuidas see töötab: 1. MySql valib kõigepealt kõik kasutajad, kellel on nimi Mike2. Kõik kasutajad grupeeritakse vanuse järgi - oletame, et vanuses 34 kasutajat on 4, MySql kuvab sama vanuse kohta ainult ühe kirje / kasutaja (looge grupp vanuse järgi 34) .3. Alles nüüd arvestab MySql grupeeritud kasutajaid ja saab kontrollida, kui palju kasutajaid ühes konkreetses rühmas on.

Nagu näete, peavad need toimingud toimuma selles kindlas järjekorras.

Nüüd on oluline teada, et kõik, mida te HALDAMISES kasutate, peab SELECTis olema. Näide:

- See EI OLE VALID SELECT COUNT (*) numbrit, nime, vanust kasutajatelt KUS nimi = "Mike" GROUP GROUP vanuse järgi, millel on aadress <> "" - aadressi pole valitud - aga see on VALID SELECT COUNT (* ) arv, nimi, vanus kasutajatelt KUS name = "Mike" JA aadress <> "" Rühmita vanus vanuse järgi, vanus> 30 - saame filtreerida ükskõik millise valiku järgi

Kiiruse huvides soovite indeksite arvessevõtmiseks kasutada KUS

Meie näites ütleme, et vanus on indeks, ülaltoodud SQL on palju aeglasem kui järgmine

SELECT COUNT (*) number, nimi, vanus kasutajatelt KUS name = "Mike" JA aadress <> "" JA vanus> 30 - kasutame INDEKSIDE RÜHMA vanuse järgi - ärge kasutage HAVINGut pärast kõigi raskete tööde tegemist

Hea vastuse leiate ka siit: KUS vs KUI (teine ​​vastus SELGdab jõudluse osa)