- SQL sąlyga padeda mums iš lentelės gauti įrašų rinkinį ar paketus.
- SQL sąlyga padeda mums nurodyti sąlygą lentelės stulpeliuose arba įrašuose.
Struktūrinės užklausos kalboje galimos įvairios sąlygos:
- KUR SĄLYGA
- GRUPĖ PAGAL SĄLYGĄ
- TURIMAS SĄLYGĄ
- UŽSAKYMAS PAGAL SĄLYGĄ
Pažiūrėkime kiekvieną sakinį po vieną su pavyzdžiu. Užklausoms rašyti pavyzdžiuose naudosime MySQL duomenų bazę.
1. KUR SĄLYGA
SQL sąlyga WHERE naudojama su SELECT užklausa, kuri yra viena iš duomenų apdorojimo kalbos komandų. WHERE sąlygos gali būti naudojamos norint apriboti rezultatų rinkinyje rodomų eilučių skaičių, paprastai tai padeda filtruoti įrašus. Jis grąžina tik tas užklausas, kurios atitinka specifines WHERE sąlygos sąlygas. WHERE sakinys naudojamas sakiniuose SELECT, UPDATE, DELETE ir kt.
WHERE sąlyga su SELECT užklausa
Žvaigždutės simbolis naudojamas su WHERE sąlyga SELECT užklausoje, kad būtų galima gauti visas kiekvieno įrašo stulpelių reikšmes iš lentelės.
Sintaksė, kur sąlyga su pasirinkimo užklausa, norint gauti visas kiekvieno įrašo stulpelių reikšmes iš lentelės:
SELECT * FROM TABLENAME WHERE CONDITION;
Jei pagal reikalavimą norime gauti tik atrankinius stulpelius, tada naudosime žemiau pateiktą sintaksę:
SELECT COLUMNNAME1, COLUMNNAME2 FROM TABLENAME WHERE CONDITION;
Apsvarstykite darbuotojų lentelę su šiais duomenimis:
E_ID | vardas | Atlyginimas | Miestas | Paskyrimas | Prisijungimo_data | Amžius |
---|---|---|---|---|---|---|
1 | Sakšis Kumaris | 50 000 | Mumbajus | Projekto vadovas | 2021-06-20 | 24 |
2 | Tejaswini Naik | 75 000 | Delis | Sistemos inžinierius | 2019-12-24 | 23 |
3 | Anuja Šarma | 40 000 | Džaipuras | Vadovas | 2021-08-15 | 26 |
4 | Anuška Tripathi | 90 000 | Mumbajus | Programinės įrangos testuotojai | 2021-06-13 | 24 |
5 | Rucha Jagtap | 45 000 | Bengalūras | Projekto vadovas | 2020-08-09 | 23 |
6 | Rutuja Deshmukh | 60 000 | Bengalūras | Vadovas | 2019-07-17 | 26 |
7 | Baviskaro balsas | 55 000 | Džaipuras | Sistemos inžinierius | 2021-10-10 | 24 |
8 | Ten Šeikas | 45 000 | Pune | Programinės įrangos inžinierius | 2020-09-10 | 26 |
9 | Swati Kumari | 50 000 | Pune | Programinės įrangos testuotojai | 2021-01-01 | 25 |
10 | Mayuri Patel | 60 000 | Mumbajus | Projekto vadovas | 2020-10-02 | 24 |
vienuolika | Simranas Khanna | 45500 | Kolhapuras | HR | 2019-01-02 | 26 |
12 | Šivanis Vagas | 50 500 | Delis | Programinės įrangos kūrėjas | 2016-09-10 | 25 |
13 | Kiranas Maheshwari | 50 000 | Našikas | HR | 2013-12-12 | 23 |
14 | Tejal Jain | 40 000 | Delis | Projekto vadovas | 2017-11-10 | 25 |
penkiolika | Mohini Shah | 38 000 | Pune | Programinės įrangos kūrėjas | 2019-03-05 | dvidešimt |
1 pavyzdys:
Parašykite užklausą, kad gautumėte visus tuos darbuotojo įrašus, kurių darbuotojo atlyginimas yra didesnis nei 50 000.
Užklausa:
mysql> SELECT * FROM employees WHERE Salary > 50000;
Aukščiau pateiktoje užklausoje bus rodomi visi tie darbuotojo įrašai, kai darbuotojo atlyginimas yra didesnis nei 50 000. Žemesnis už 50 000 atlyginimas pagal sąlygas nebus rodomas.
Gausite tokią išvestį:
Pagal numatomą produkciją rodomi tik tie įrašai, kuriuose darbuotojo atlyginimas didesnis nei 50 000. Darbuotojo lentelėje yra šeši įrašai, kurie atitinka duotą sąlygą.
2 pavyzdys:
Parašykite užklausą, kad atnaujintumėte darbuotojo įrašą, ir nustatykite atnaujintą pavadinimą kaip „Harshada Sharma“, kur darbuotojo miesto pavadinimas yra Džaipuras.
Užklausa:
mysql> UPDATE employees SET Name = 'Harshada Sharma' WHERE City = 'Jaipur';
Aukščiau pateikta užklausa atnaujins darbuotojo vardą į „Harshada Sharma“, kur darbuotojo miestas yra Džaipuras.
Norėdami patikrinti, ar įrašai atnaujinti, ar ne, vykdysime pasirinkimo užklausą.
mysql> SELECT * FROM employees;
Darbuotojų lentelėje yra tik vienas įrašas, kuriame darbuotojo miestas yra „Džaipuras“. Įrašo ID yra 3, kuris atitinka pateiktą sąlygą. Taigi, atsižvelgiant į pateiktą sąlygą, darbuotojo vardas su darbuotojo ID 3 dabar pakeistas į „Harshada Sharma“.
3 pavyzdys:
Parašykite užklausą, kad ištrintumėte darbuotojo įrašą, kai darbuotojo prisijungimo data yra „2013-12-12“.
Užklausa:
mysql> DELETE FROM employees WHERE Date_of_Joining = '2013-12-12';
Aukščiau pateikta užklausa ištrins darbuotojo, kurio prisijungimo data yra „2013-12-12“, darbuotojo duomenis.
Norėdami patikrinti aukščiau pateiktos užklausos rezultatus, vykdysime pasirinkimo užklausą.
mysql> SELECT *FROM employees;
Darbuotojų lentelėje yra tik vienas įrašas, kuriame darbuotojo prisijungimo data yra '2013-12-12'. Įrašo ID yra 13, o tai atitinka pateiktą sąlygą. Todėl pagal pateiktą sąlygą darbuotojas, kurio darbuotojo ID 13, dabar yra ištrintas iš darbuotojo lentelės.
2. GRUPĖ PAGAL SĄLYGĄ
Sąlyga „Group By“ naudojama panašių tipų įrašams suskirstyti į grupes Struktūrinės užklausos kalboje. Struktūrinės užklausos kalbos sąlyga „Grupuoti pagal“ naudojama su „Select Statement“. Grupavimas pagal sakinį SQL sakinyje dedamas po kur sakinio. Sąlyga Grupuoti pagal yra specialiai naudojama su agregavimo funkcija, ty max (), min (), vidurkis (), suma (), skaičius (), kad rezultatas būtų sugrupuotas pagal vieną ar daugiau nei vieną stulpelį.
Grupės pagal sakinio sintaksė:
SELECT * FROM TABLENAME GROUP BY COLUMNNAME;
Aukščiau pateikta sintaksė atrinks visus duomenis ar įrašus iš lentelės, tačiau visus tuos duomenis ar įrašus suskirstys į grupes pagal užklausoje pateiktą stulpelio pavadinimą.
Sąlygos „Group By“ sintaksė su agregacinėmis funkcijomis:
SELECT COLUMNNAME1, Aggregate_FUNCTION (COLUMNNAME) FROM TABLENAME GROUP BY COLUMNNAME;
Supraskime sakinį „Group By“ naudodami pavyzdžius.
Apsvarstykite darbuotojų lentelę su šiais duomenimis:
E_ID | vardas | Atlyginimas | Miestas | Paskyrimas | Prisijungimo_data | Amžius |
---|---|---|---|---|---|---|
1 | Sakšis Kumaris | 50 000 | Mumbajus | Projekto vadovas | 2021-06-20 | 24 |
2 | Tejaswini Naik | 75 000 | Delis | Sistemos inžinierius | 2019-12-24 | 23 |
3 | Anuja Sharma | 40 000 | Džaipuras | Vadovas | 2021-08-15 | 26 |
4 | Anuška Tripathi | 90 000 | Mumbajus | Programinės įrangos testuotojai | 2021-06-13 | 24 |
5 | Rucha Jagtap | 45 000 | Bengalūras | Projekto vadovas | 2020-08-09 | 23 |
6 | Rutuja Deshmukh | 60 000 | Bengalūras | Vadovas | 2019-07-17 | 26 |
7 | Baviskaro balsas | 55 000 | Džaipuras | Sistemos inžinierius | 2021-10-10 | 24 |
8 | Ten Šeikas | 45 000 | Pune | Programinės įrangos inžinierius | 2020-09-10 | 26 |
9 | Swati Kumari | 50 000 | Pune | Programinės įrangos testuotojai | 2021-01-01 | 25 |
10 | Mayuri Patel | 60 000 | Mumbajus | Projekto vadovas | 2020-10-02 | 24 |
vienuolika | Simranas Khanna | 45500 | Kolhapuras | HR | 2019-01-02 | 26 |
12 | Šivanis Vagas | 50 500 | Delis | Programinės įrangos kūrėjas | 2016-09-10 | 25 |
13 | Kiranas Maheshwari | 50 000 | Našikas | HR | 2013-12-12 | 23 |
14 | Tejal Jain | 40 000 | Delis | Projekto vadovas | 2017-11-10 | 25 |
penkiolika | Mohini Shah | 38 000 | Pune | Programinės įrangos kūrėjas | 2019-03-05 | dvidešimt |
1 pavyzdys:
Parašykite užklausą, kad būtų rodomi visi darbuotojų lentelės įrašai, bet sugrupuokite rezultatus pagal amžiaus stulpelį.
Užklausa:
mysql> SELECT * FROM employees GROUP BY Age;
Aukščiau pateiktoje užklausoje bus rodomi visi darbuotojų lentelės įrašai, tačiau sugrupuoti pagal amžiaus stulpelį.
Gausite tokią išvestį:
2 pavyzdys:
Parašykite užklausą, kad būtų rodomi visi darbuotojų lentelės įrašai, sugrupuoti pagal paskirtį ir atlyginimą.
Užklausa:
mysql> SELECT * FROM employees GROUP BY Salary, Designation;
Aukščiau pateiktoje užklausoje bus rodomi visi darbuotojų lentelės įrašai, tačiau sugrupuoti pagal atlyginimo ir paskyrimo stulpelį.
Gausite tokią išvestį:
Sąlygos „Group By“ pavyzdžiai, naudojant suvestines funkcijas
1 pavyzdys:
Parašykite užklausą, kad nurodytumėte darbuotojų, dirbančių pagal tam tikrą paskirtį, skaičių ir sugrupuokite rezultatus pagal darbuotojo paskyrimą.
Užklausa:
mysql> SELECT COUNT (E_ID) AS Number_of_Employees, Designation FROM employees GROUP BY Designation;
Aukščiau pateiktoje užklausoje bus rodomas paskyrimas su atitinkamu darbuotojų, dirbančių su tuo paskyrimu, skaičiumi. Visi šie rezultatai bus sugrupuoti pagal žymėjimo stulpelį.
Gausite tokią išvestį:
Atsižvelgiant į numatomą produkciją, rodomas žymėjimas su atitinkamu darbuotojų skaičiumi.
2 pavyzdys:
Parašykite užklausą, kad būtų rodoma darbuotojo atlyginimo suma pagal miestą, sugrupuota pagal darbuotojo amžių.
Užklausa:
mysql> SELECT SUM (Salary) AS Salary, City FROM employees GROUP BY City;
Aukščiau pateikta užklausa pirmiausia apskaičiuos kiekviename mieste dirbančių atlyginimų sumą, o tada parodys atlyginimo sumą su atitinkamu atlyginimu, bet sugrupuotą pagal amžiaus stulpelį.
Gausite tokią išvestį:
Pagal numatomą produkciją rodoma darbuotojo atlyginimo suma pagal miestą, kuriam darbuotojas priklauso. Jei du darbuotojai priklauso tam pačiam miestui, jie bus vienoje grupėje.
3. TURĖTI SĄLYGĄ:
Kai mums reikia pateikti bet kokias sąlygas lentelės stulpelyje, naudojame WHERE sąlygą SQL. Bet jei tuo metu norime naudoti bet kurią sąlygą stulpelyje, esančiame sąlygoje Group By, stulpelio sąlygoms naudosime sąlygą HAVING su sąlyga Group By.
Sintaksė:
TABLENAME GROUP BY COLUMNNAME HAVING CONDITION;
Apsvarstykite darbuotojų lentelę su šiais duomenimis:
E_ID | vardas | Atlyginimas | Miestas | Paskyrimas | Prisijungimo_data | Amžius |
---|---|---|---|---|---|---|
1 | Sakšis Kumaris | 50 000 | Mumbajus | Projekto vadovas | 2021-06-20 | 24 |
2 | Tejaswini Naik | 75 000 | Delis | Sistemos inžinierius | 2019-12-24 | 23 |
3 | Anuja Šarma | 40 000 | Džaipuras | Vadovas | 2021-08-15 | 26 |
4 | Anuška Tripathi | 90 000 | Mumbajus | Programinės įrangos testuotojai | 2021-06-13 | 24 |
5 | Rucha Jagtap | 45 000 | Bengalūras | Projekto vadovas | 2020-08-09 | 23 |
6 | Rutuja Deshmukh | 60 000 | Bengalūras | Vadovas | 2019-07-17 | 26 |
7 | Baviskaro balsas | 55 000 | Džaipuras | Sistemos inžinierius | 2021-10-10 | 24 |
8 | Ten Šeikas | 45 000 | Pune | Programinės įrangos inžinierius | 2020-09-10 | 26 |
9 | Swati Kumari | 50 000 | Pune | Programinės įrangos testuotojai | 2021-01-01 | 25 |
10 | Mayuri Patel | 60 000 | Mumbajus | Projekto vadovas | 2020-10-02 | 24 |
vienuolika | Simranas Khanna | 45500 | Kolhapuras | HR | 2019-01-02 | 26 |
12 | Šivanis Vagas | 50 500 | Delis | Programinės įrangos kūrėjas | 2016-09-10 | 25 |
13 | Kiranas Maheshwari | 50 000 | Našikas | HR | 2013-12-12 | 23 |
14 | Tejal Jain | 40 000 | Delis | Projekto vadovas | 2017-11-10 | 25 |
penkiolika | Mohini Shah | 38 000 | Pune | Programinės įrangos kūrėjas | 2019-03-05 | dvidešimt |
1 pavyzdys:
Parašykite užklausą, kad būtų rodomi darbuotojų vardai, atlyginimas ir miestas, kuriame darbuotojo maksimalus atlyginimas yra didesnis nei 40 000, ir sugrupuokite rezultatus pagal paskirtį.
Užklausa:
mysql> SELECT Name, City, MAX (Salary) AS Salary FROM employees GROUP BY Designation HAVING MAX (Salary) > 40000;
Gausite tokią išvestį:
Aukščiau pateikta produkcija rodo, kad darbuotojo vardas, pavardė, atlyginimas ir miestas darbuotojo, kurio darbuotojo atlyginimas didesnis nei 40 000, sugrupuoti pagal paskirtį. (Darbuotojai, turintys panašų paskyrimą, patenka į vieną grupę, o turintys kitą - atskirai).
2 pavyzdys:
Parašykite užklausą, kad būtų rodomi darbuotojų vardai ir pavardės, kai darbuotojo atlyginimo suma didesnė nei 45000, ir sugrupuokite rezultatus pagal miestą.
Užklausa:
mysql> SELECT Name, Designation, SUM (Salary) AS Salary FROM employees GROUP BY City HAVING SUM (Salary) > 45000;
Gausite tokią išvestį:
Aukščiau pateikta produkcija rodo darbuotojo vardą, pavardę ir darbuotojo atlyginimą. Atlyginimo suma didesnė nei 45000, sugrupuota pagal miestus. (Darbuotojai, turintys panašius miestus, talpinami į vieną grupę, o turintys kitą miestą nepanašūs – atskirai).
4. UŽSAKYMAS PAGAL SĄLYGĄ
Kai norime ką nors rūšiuoti SQL, naudojame sąlygą ORDER BY. SQL sąlyga ORDER BY padės mums rūšiuoti duomenis pagal konkretų lentelės stulpelį. Tai reiškia, kad visi duomenys, saugomi konkrečiame stulpelyje, kuriame vykdome sąlygą ORDER BY, bus surūšiuoti. Atitinkamos stulpelių reikšmės bus rodomos tokia seka, kokia buvo gautos ankstesniame žingsnyje.
Kaip mes visi žinome, rūšiavimas reiškia arba DIDĖJANTI, arba MAŽĖJANTI. Lygiai taip pat ORDER BY CLAUSE rūšiuoja duomenis didėjimo arba mažėjimo tvarka pagal mūsų reikalavimą. Duomenys bus rūšiuojami didėjančia tvarka, kai bus ASC raktinis žodis naudojamas su ORDER pagal sąlygą, ir DESC raktinis žodis surūšiuos įrašus mažėjančia tvarka.
Pagal numatytuosius nustatymus rūšiavimas SQL bus atliekamas naudojant sąlygą ORDER BY ASCENDING tvarka, jei nepaminėjome rūšiavimo tvarkos.
Prieš pereidami prie ORDER BY sakinio pavyzdžio, norėdami rūšiuoti įrašus, pirmiausia pažiūrėsime į sintaksę, kad mums būtų lengva pereiti prie pavyzdžio.
ORDER BY sakinio sintaksė be „asc“ ir „desc“ raktinių žodžių:
SELECT COLUMN_NAME1, COLUMN_NAME2 FROM TABLE_NAME ORDER BY COLUMNAME;
ORDER BY sakinio sintaksė rūšiuoti didėjančia tvarka:
SELECT COLUMN_NAME1, COLUMN_NAME2 FROM TABLE_NAME ORDER BY COLUMN_NAME ASC;
ORDER BY sakinio sintaksė, skirta rūšiuoti mažėjančia tvarka:
SELECT COLUMN_NAME1, COLUMN_NAME2 FROM TABLE_NAME ORDER BY COLUMN_NAME DESC;
Apsvarstykite, kad turime darbuotojų lentelę su šiais duomenimis:
E_ID | vardas | Atlyginimas | Miestas | Paskyrimas | Prisijungimo_data | Amžius |
---|---|---|---|---|---|---|
1 | Sakšis Kumaris | 50 000 | Mumbajus | Projekto vadovas | 2021-06-20 | 24 |
2 | Tejaswini Naik | 75 000 | Delis | Sistemos inžinierius | 2019-12-24 | 23 |
3 | Anuja Šarma | 40 000 | Džaipuras | Vadovas | 2021-08-15 | 26 |
4 | Anuška Tripathi | 90 000 | Mumbajus | Programinės įrangos testuotojai | 2021-06-13 | 24 |
5 | Rucha Jagtap | 45 000 | Bengalūras | Projekto vadovas | 2020-08-09 | 23 |
6 | Rutuja Deshmukh | 60 000 | Bengalūras | Vadovas | 2019-07-17 | 26 |
7 | Baviskaro balsas | 55 000 | Džaipuras | Sistemos inžinierius | 2021-10-10 | 24 |
8 | Ten Šeikas | 45 000 | Pune | Programinės įrangos inžinierius | 2020-09-10 | 26 |
9 | Swati Kumari | 50 000 | Pune | Programinės įrangos testuotojai | 2021-01-01 | 25 |
10 | Mayuri Patel | 60 000 | Mumbajus | Projekto vadovas | 2020-10-02 | 24 |
vienuolika | Simranas Khanna | 45500 | Kolhapuras | HR | 2019-01-02 | 26 |
12 | Šivanis Vagas | 50 500 | Delis | Programinės įrangos kūrėjas | 2016-09-10 | 25 |
13 | Kiranas Maheshwari | 50 000 | Našikas | HR | 2013-12-12 | 23 |
14 | Tejal Jain | 40 000 | Delis | Projekto vadovas | 2017-11-10 | 25 |
penkiolika | Mohini Shah | 38 000 | Pune | Programinės įrangos kūrėjas | 2019-03-05 | dvidešimt |
1 pavyzdys:
Parašykite užklausą, kad surūšiuotumėte įrašus didėjančia darbuotojo paskyrimo tvarka iš darbuotojų lentelės.
Užklausa:
mysql> SELECT * FROM employees ORDER BY Designation;
Užklausoje SELECT stulpelyje „Paskirtis“ taikoma sąlyga ORDER BY, kad būtų galima rūšiuoti įrašus, bet nenaudojome ASC raktinio žodžio po ORDER BY, kad rūšiuotume didėjančia tvarka. Taigi, pagal numatytuosius nustatymus duomenys bus rūšiuojami didėjančia tvarka, jei nenurodysime asc raktinio žodžio.
Gausite tokią išvestį:
Atsižvelgiant į numatomą produkciją, įrašai rodomi didėjančia darbuotojo paskyrimo tvarka.
2 pavyzdys:
Parašykite užklausą, kad iš darbuotojų lentelės būtų rodomas darbuotojo vardas ir atlyginimas darbuotojo atlyginimo didėjimo tvarka.
Užklausa:
mysql> SELECT Name, Salary FROM employees ORDER BY Salary ASC;
Čia SELECT užklausoje stulpelyje „Atlyginimas“ taikoma sąlyga ORDER BY, kad būtų rūšiuojami įrašai. ASC raktažodį naudojome darbuotojo atlyginimo rūšiavimui didėjimo tvarka.
Gausite tokią išvestį:
Visi įrašai rodomi darbuotojo atlyginimo didėjimo tvarka.
3 pavyzdys:
Parašykite užklausą, kad surūšiuotumėte duomenis mažėjančia darbuotojų lentelėje saugomo darbuotojo vardo tvarka.
Užklausa:
mysql> SELECT * FROM employees ORDER BY Name DESC;
Duomenims rūšiuoti naudojome sąlygą ORDER BY su stulpelyje Pavadinimas pritaikyta užklausa SELECT. Naudojome raktinį žodį DESC po sakinio ORDER BY norėdami surūšiuoti duomenis mažėjančia tvarka.
Gausite tokią išvestį:
Visi įrašai rodomi darbuotojo vardo mažėjimo tvarka.
numeris į eilutę java