- Klavzula SQL nam pomaga pridobiti niz ali svežnje zapisov iz tabele.
- Klavzula SQL nam pomaga določiti pogoj za stolpce ali zapise tabele.
Različni členi, ki so na voljo v jeziku strukturiranih poizvedb, so naslednji:
- KLAVZULA WHERE
- SKUPINA PO KLAVZULI
- S KLAVZULO
- VRSTNI RED PO KLAUZULI
Oglejmo si vsak stavek enega za drugim s primerom. Za pisanje poizvedb v primerih bomo uporabili bazo MySQL.
1. KLAVZULA WHERE
Klavzula WHERE v SQL se uporablja s poizvedbo SELECT, ki je eden od jezikovnih ukazov za obdelavo podatkov. Klavzule WHERE lahko uporabite za omejitev števila vrstic, ki bodo prikazane v naboru rezultatov, kar na splošno pomaga pri filtriranju zapisov. Vrne samo tiste poizvedbe, ki izpolnjujejo posebne pogoje klavzule WHERE. Klavzula WHERE se uporablja v stavku SELECT, UPDATE, DELETE itd.
WHERE člen s poizvedbo SELECT
Simbol zvezdice se uporablja s klavzulo WHERE v poizvedbi SELECT za pridobitev vseh vrednosti stolpcev za vsak zapis iz tabele.
linux ukazi, ki
Sintaksa klavzule where z izbirno poizvedbo za pridobitev vseh vrednosti stolpcev za vsak zapis iz tabele:
SELECT * FROM TABLENAME WHERE CONDITION;
Če v skladu z zahtevo želimo pridobiti samo selektivne stolpce, bomo uporabili spodnjo sintakso:
SELECT COLUMNNAME1, COLUMNNAME2 FROM TABLENAME WHERE CONDITION;
Razmislite o tabeli zaposlenih z naslednjimi podatki:
E_ID | Ime | Plača | Mesto | Imenovanje | Datum_pridružitve | starost |
---|---|---|---|---|---|---|
1 | Sakshi Kumari | 50000 | Mumbaj | Vodja projekta | 2021-06-20 | 24 |
2 | Tejaswini Naik | 75000 | Delhi | Sistemski inženir | 2019-12-24 | 23 |
3 | Anuja Sharma | 40000 | Jaipur | Vodja | 2021-08-15 | 26 |
4 | Anuška Tripathi | 90000 | Mumbaj | Testerji programske opreme | 2021-06-13 | 24 |
5 | Rucha Jagtap | 45000 | Bangalore | Vodja projekta | 2020-08-09 | 23 |
6 | Rutuja Deshmukh | 60000 | Bangalore | Vodja | 2019-07-17 | 26 |
7 | Baviškarjev glas | 55000 | Jaipur | Sistemski inženir | 2021-10-10 | 24 |
8 | Tukaj je Sheik | 45000 | Pune | Programski inženir | 2020-09-10 | 26 |
9 | Swati Kumari | 50000 | Pune | Testerji programske opreme | 2021-01-01 | 25 |
10 | Mayuri Patel | 60000 | Mumbaj | Vodja projekta | 2020-10-02 | 24 |
enajst | Simran Khanna | 45500 | Kolhapur | HR | 2019-01-02 | 26 |
12 | Shivani Wagh | 50500 | Delhi | Razvijalec programske opreme | 2016-09-10 | 25 |
13 | Kiran Maheshwari | 50000 | Nashik | HR | 2013-12-12 | 23 |
14 | Tejal Jain | 40000 | Delhi | Vodja projekta | 2017-11-10 | 25 |
petnajst | Mohini Šah | 38000 | Pune | Razvijalec programske opreme | 2019-03-05 | dvajset |
Primer 1:
Napišite poizvedbo za pridobitev vseh tistih zapisov zaposlenega, kjer je plača zaposlenega višja od 50000.
poizvedba:
mysql> SELECT * FROM employees WHERE Salary > 50000;
Zgornja poizvedba bo prikazala vse tiste zapise zaposlenega, kjer je plača zaposlenega višja od 50000. Plača pod 50000 ne bo prikazana v skladu s pogoji.
Dobili boste naslednje rezultate:
Glede na pričakovani rezultat so prikazani samo tisti zapisi, kjer je plača zaposlenega večja od 50000. V tabeli zaposlenih je šest zapisov, ki izpolnjujejo dani pogoj.
Primer 2:
Napišite poizvedbo za posodobitev evidence zaposlenega in nastavite posodobljeno ime kot 'Harshada Sharma', kjer je ime mesta zaposlenega Jaipur.
poizvedba:
mysql> UPDATE employees SET Name = 'Harshada Sharma' WHERE City = 'Jaipur';
Zgornja poizvedba bo posodobila ime zaposlenega v »Harshada Sharma«, kjer je mesto zaposlenega Jaipur.
Če želite preveriti, ali so zapisi posodobljeni ali ne, bomo zagnali izbirno poizvedbo.
mysql> SELECT * FROM employees;
V tabeli zaposlenih je samo en zapis, kjer je mesto zaposlenega 'Jaipur'. ID zapisa je 3, kar izpolnjuje dani pogoj. Zato je v skladu z danim pogojem ime zaposlenega z ID-jem zaposlenega 3 zdaj spremenjeno v 'Harshada Sharma'.
Primer 3:
Napišite poizvedbo za brisanje zapisa zaposlenega, kjer je datum zaposlitve zaposlenega '2013-12-12'.
poizvedba:
mysql> DELETE FROM employees WHERE Date_of_Joining = '2013-12-12';
Zgornja poizvedba bo izbrisala podatke o zaposlenem, katerega datum pridružitve je '2013-12-12'.
Za preverjanje rezultatov zgornje poizvedbe bomo izvedli poizvedbo za izbiro.
mysql> SELECT *FROM employees;
V tabeli zaposlenih je samo en zapis, kjer je datum pridružitve zaposlenega '2013-12-12'. ID zapisa je 13, kar izpolnjuje dani pogoj. Zato je glede na podani pogoj delavec z id delavca 13 sedaj izbrisan iz tabele zaposlenih.
2. SKUPINA PO KLAVZULI
Klavzula Group By se uporablja za razvrščanje podobnih vrst zapisov v skupine v jeziku strukturiranih poizvedb. Klavzula Group by v jeziku strukturiranih poizvedb se uporablja s stavkom Select. Klavzula Group by je postavljena za klavzulo where v stavku SQL. Klavzula Group By se posebej uporablja s funkcijo združevanja, tj. max (), min (), avg (), sum (), count () za združevanje rezultata na podlagi enega ali več kot enega stolpca.
Sintaksa klavzule Group By:
SELECT * FROM TABLENAME GROUP BY COLUMNNAME;
Zgornja sintaksa bo izbrala vse podatke ali zapise iz tabele, vendar bo vse te podatke ali zapise razporedila v skupine na podlagi imena stolpca, podanega v poizvedbi.
Sintaksa klavzule Group By z agregatnimi funkcijami:
SELECT COLUMNNAME1, Aggregate_FUNCTION (COLUMNNAME) FROM TABLENAME GROUP BY COLUMNNAME;
Razumejmo klavzulo Group By s pomočjo primerov.
Razmislite o tabeli zaposlenih z naslednjimi podatki:
E_ID | Ime | Plača | Mesto | Imenovanje | Datum_pridružitve | starost |
---|---|---|---|---|---|---|
1 | Sakshi Kumari | 50000 | Mumbaj | Vodja projekta | 2021-06-20 | 24 |
2 | Tejaswini Naik | 75000 | Delhi | Sistemski inženir | 2019-12-24 | 23 |
3 | Anuja Sharma | 40000 | Jaipur | Vodja | 2021-08-15 | 26 |
4 | Anuška Tripathi | 90000 | Mumbaj | Testerji programske opreme | 2021-06-13 | 24 |
5 | Rucha Jagtap | 45000 | Bangalore | Vodja projekta | 2020-08-09 | 23 |
6 | Rutuja Deshmukh | 60000 | Bangalore | Vodja | 2019-07-17 | 26 |
7 | Baviškarjev glas | 55000 | Jaipur | Sistemski inženir | 2021-10-10 | 24 |
8 | Tukaj je Sheik | 45000 | Pune | Programski inženir | 2020-09-10 | 26 |
9 | Swati Kumari | 50000 | Pune | Testerji programske opreme | 2021-01-01 | 25 |
10 | Mayuri Patel | 60000 | Mumbaj | Vodja projekta | 2020-10-02 | 24 |
enajst | Simran Khanna | 45500 | Kolhapur | HR | 2019-01-02 | 26 |
12 | Shivani Wagh | 50500 | Delhi | Razvijalec programske opreme | 2016-09-10 | 25 |
13 | Kiran Maheshwari | 50000 | Nashik | HR | 2013-12-12 | 23 |
14 | Tejal Jain | 40000 | Delhi | Vodja projekta | 2017-11-10 | 25 |
petnajst | Mohini Šah | 38000 | Pune | Razvijalec programske opreme | 2019-03-05 | dvajset |
Primer 1:
Napišite poizvedbo za prikaz vseh zapisov tabele zaposlenih, vendar združite rezultate glede na stolpec starosti.
poizvedba:
mysql> SELECT * FROM employees GROUP BY Age;
Zgornja poizvedba bo prikazala vse zapise tabele zaposlenih, vendar razvrščene po stolpcu starosti.
Dobili boste naslednje rezultate:
Primer 2:
Napišite poizvedbo za prikaz vseh zapisov tabele zaposlenih, razvrščenih po nazivu in plači.
poizvedba:
mysql> SELECT * FROM employees GROUP BY Salary, Designation;
Zgornja poizvedba bo prikazala vse zapise tabele zaposlenih, vendar razvrščene po stolpcu plače in oznake.
Dobili boste naslednje rezultate:
Primeri klavzule Group By z uporabo agregatnih funkcij
Primer 1:
Napišite poizvedbo za seznam števila zaposlenih, ki delajo na določeni oznaki, in združite rezultate glede na označbo zaposlenega.
poizvedba:
mysql> SELECT COUNT (E_ID) AS Number_of_Employees, Designation FROM employees GROUP BY Designation;
Zgornja poizvedba bo prikazala oznako z ustreznim številom zaposlenih, ki delajo na tej oznaki. Vsi ti rezultati bodo združeni po stolpcu z oznakami.
Dobili boste naslednje rezultate:
Glede na pričakovan rezultat se prikaže oznaka z ustreznim številom zaposlenih.
Primer 2:
Napišite poizvedbo za prikaz vsote plače zaposlenega glede na mesto, razvrščeno glede na starost zaposlenega.
poizvedba:
mysql> SELECT SUM (Salary) AS Salary, City FROM employees GROUP BY City;
Zgornja poizvedba bo najprej izračunala vsoto plač, ki delajo v vsakem mestu, nato pa bo prikazala vsoto plače z ustrezno plačo, vendar razvrščeno po stolpcu starosti.
Dobili boste naslednje rezultate:
Glede na pričakovani rezultat se izpiše vsota plače zaposlenega glede na mesto, kateremu zaposleni pripada. Če dva zaposlena pripadata istemu mestu, potem bosta v eni skupini.
3. KLAVZULA, KI IMA:
Ko moramo v stolpec tabele postaviti kakršne koli pogoje, uporabimo klavzulo WHERE v SQL. Če pa želimo takrat uporabiti kateri koli pogoj za stolpec v klavzuli Group By, bomo uporabili klavzulo HAVING s klavzulo Group By za pogoje stolpca.
Sintaksa:
TABLENAME GROUP BY COLUMNNAME HAVING CONDITION;
Razmislite o tabeli zaposlenih z naslednjimi podatki:
E_ID | Ime | Plača | Mesto | Imenovanje | Datum_pridružitve | starost |
---|---|---|---|---|---|---|
1 | Sakshi Kumari | 50000 | Mumbaj | Vodja projekta | 2021-06-20 | 24 |
2 | Tejaswini Naik | 75000 | Delhi | Sistemski inženir | 2019-12-24 | 23 |
3 | Anuja Sharma | 40000 | Jaipur | Vodja | 2021-08-15 | 26 |
4 | Anuška Tripathi | 90000 | Mumbaj | Testerji programske opreme | 2021-06-13 | 24 |
5 | Rucha Jagtap | 45000 | Bangalore | Vodja projekta | 2020-08-09 | 23 |
6 | Rutuja Deshmukh | 60000 | Bangalore | Vodja | 2019-07-17 | 26 |
7 | Baviškarjev glas | 55000 | Jaipur | Sistemski inženir | 2021-10-10 | 24 |
8 | Tukaj je Sheik | 45000 | Pune | Programski inženir | 2020-09-10 | 26 |
9 | Swati Kumari | 50000 | Pune | Testerji programske opreme | 2021-01-01 | 25 |
10 | Mayuri Patel | 60000 | Mumbaj | Vodja projekta | 2020-10-02 | 24 |
enajst | Simran Khanna | 45500 | Kolhapur | HR | 2019-01-02 | 26 |
12 | Shivani Wagh | 50500 | Delhi | Razvijalec programske opreme | 2016-09-10 | 25 |
13 | Kiran Maheshwari | 50000 | Nashik | HR | 2013-12-12 | 23 |
14 | Tejal Jain | 40000 | Delhi | Vodja projekta | 2017-11-10 | 25 |
petnajst | Mohini Šah | 38000 | Pune | Razvijalec programske opreme | 2019-03-05 | dvajset |
Primer 1:
Napišite poizvedbo za prikaz imena zaposlenih, plače in mesta, kjer je najvišja plača zaposlenega večja od 40000, in rezultate združite po oznakah.
poizvedba:
mysql> SELECT Name, City, MAX (Salary) AS Salary FROM employees GROUP BY Designation HAVING MAX (Salary) > 40000;
Dobili boste naslednje rezultate:
Zgornji izhod kaže, da so ime zaposlenega, plača in mesto zaposlenega, kjer je plača zaposlenega večja od 40000, razvrščeni po oznakah. (Zaposleni s podobnim poimenovanjem so uvrščeni v eno skupino, tisti z drugim poimenovanjem pa posebej).
Primer 2:
Napišite poizvedbo za prikaz imena zaposlenih in oznake, kjer je vsota plače zaposlenega večja od 45000 in združite rezultate po mestih.
poizvedba:
mysql> SELECT Name, Designation, SUM (Salary) AS Salary FROM employees GROUP BY City HAVING SUM (Salary) > 45000;
Dobili boste naslednje rezultate:
Zgornji rezultat prikazuje ime zaposlenega, imenovanje in plačo zaposlenega. Vsota plače je večja od 45000, razvrščenih po mestih. (Zaposleni s podobnimi mesti so uvrščeni v eno skupino, tisti z različnimi mesti, ki niso podobni, pa ločeno).
4. VRSTNI RED PO KLAUZULI
Kadarkoli želimo karkoli razvrstiti v SQL, uporabimo klavzulo ORDER BY. Klavzula ORDER BY v SQL nam bo pomagala razvrstiti podatke glede na določen stolpec tabele. To pomeni, da bodo razvrščeni vsi podatki, shranjeni v določenem stolpcu, na katerem izvajamo klavzulo ORDER BY. Ustrezne vrednosti stolpcev bodo prikazane v zaporedju, v katerem smo pridobili vrednosti v prejšnjem koraku.
Kot vsi vemo, razvrščanje pomeni bodisi v NARAŠČAjočem bodisi v padajočem vrstnem redu. Na enak način ORDER BY CLAUSE razvrsti podatke v naraščajočem ali padajočem vrstnem redu glede na naše zahteve. Podatki bodo razvrščeni v naraščajočem vrstnem redu, kadar koli ključna beseda ASC se uporablja s klavzulo ORDER in ključna beseda DESC bo zapise razvrstil po padajočem vrstnem redu.
Privzeto bo razvrščanje v SQL izvedeno s klavzulo ORDER BY v NARASTAJOČEM vrstnem redu, če nismo omenili vrstnega reda razvrščanja.
Preden preidemo na primer klavzule ORDER BY za razvrščanje zapisov, si bomo najprej ogledali sintakso, tako da nam bo enostavno iti skozi primer.
Sintaksa stavka ORDER BY brez ključnih besed asc in desc:
SELECT COLUMN_NAME1, COLUMN_NAME2 FROM TABLE_NAME ORDER BY COLUMNAME;
Sintaksa stavka ORDER BY za razvrščanje v naraščajočem vrstnem redu:
SELECT COLUMN_NAME1, COLUMN_NAME2 FROM TABLE_NAME ORDER BY COLUMN_NAME ASC;
Sintaksa stavka ORDER BY za razvrščanje v padajočem vrstnem redu:
SELECT COLUMN_NAME1, COLUMN_NAME2 FROM TABLE_NAME ORDER BY COLUMN_NAME DESC;
Recimo, da imamo tabelo zaposlenih z naslednjimi podatki:
E_ID | Ime | Plača | Mesto | Imenovanje | Datum_pridružitve | starost |
---|---|---|---|---|---|---|
1 | Sakshi Kumari | 50000 | Mumbaj | Vodja projekta | 2021-06-20 | 24 |
2 | Tejaswini Naik | 75000 | Delhi | Sistemski inženir | 2019-12-24 | 23 |
3 | Anuja Sharma | 40000 | Jaipur | Vodja | 2021-08-15 | 26 |
4 | Anuška Tripathi | 90000 | Mumbaj | Testerji programske opreme | 2021-06-13 | 24 |
5 | Rucha Jagtap | 45000 | Bangalore | Vodja projekta | 2020-08-09 | 23 |
6 | Rutuja Deshmukh | 60000 | Bangalore | Vodja | 2019-07-17 | 26 |
7 | Baviškarjev glas | 55000 | Jaipur | Sistemski inženir | 2021-10-10 | 24 |
8 | Tukaj je Sheik | 45000 | Pune | Programski inženir | 2020-09-10 | 26 |
9 | Swati Kumari | 50000 | Pune | Testerji programske opreme | 2021-01-01 | 25 |
10 | Mayuri Patel | 60000 | Mumbaj | Vodja projekta | 2020-10-02 | 24 |
enajst | Simran Khanna | 45500 | Kolhapur | HR | 2019-01-02 | 26 |
12 | Shivani Wagh | 50500 | Delhi | Razvijalec programske opreme | 2016-09-10 | 25 |
13 | Kiran Maheshwari | 50000 | Nashik | HR | 2013-12-12 | 23 |
14 | Tejal Jain | 40000 | Delhi | Vodja projekta | 2017-11-10 | 25 |
petnajst | Mohini Šah | 38000 | Pune | Razvijalec programske opreme | 2019-03-05 | dvajset |
Primer 1:
Napišite poizvedbo za razvrščanje zapisov v naraščajočem vrstnem redu oznake zaposlenih iz tabele zaposlenih.
poizvedba:
mysql> SELECT * FROM employees ORDER BY Designation;
Tukaj v poizvedbi SELECT je klavzula ORDER BY uporabljena v stolpcu 'Designation' za razvrščanje zapisov, vendar nismo uporabili ključne besede ASC za klavzulo ORDER BY za razvrščanje v naraščajočem vrstnem redu. Torej bodo podatki privzeto razvrščeni v naraščajočem vrstnem redu, če ne podamo ključne besede asc.
Dobili boste naslednje rezultate:
Glede na pričakovan rezultat so zapisi prikazani v naraščajočem vrstnem redu glede na imenovanje zaposlenega.
Primer 2:
Napišite poizvedbo za prikaz imena in plače zaposlenega v naraščajočem vrstnem redu glede na plačo zaposlenega iz tabele zaposlenih.
poizvedba:
mysql> SELECT Name, Salary FROM employees ORDER BY Salary ASC;
Tukaj v poizvedbi SELECT je klavzula ORDER BY uporabljena za stolpec »Plača« za razvrščanje zapisov. Uporabili smo ključno besedo ASC za razvrščanje plače zaposlenega v naraščajočem vrstnem redu.
Dobili boste naslednje rezultate:
Vsi zapisi so prikazani po naraščajočem vrstnem redu plače zaposlenega.
Primer 3:
Napišite poizvedbo za razvrščanje podatkov v padajočem vrstnem redu imena zaposlenega, shranjenega v tabeli zaposlenih.
java psevdokoda
poizvedba:
mysql> SELECT * FROM employees ORDER BY Name DESC;
Tukaj smo za razvrščanje podatkov uporabili klavzulo ORDER BY s poizvedbo SELECT, uporabljeno v stolpcu Ime. Uporabili smo ključno besedo DESC za klavzulo ORDER BY za razvrščanje podatkov v padajočem vrstnem redu.
Dobili boste naslednje rezultate:
Vsi zapisi so prikazani v padajočem vrstnem redu glede na ime zaposlenega.