33. SQLite 2 - MantsSk/CA_PTUA14 GitHub Wiki
Parsisiųskite duombazės failiuką - https://github.com/robotautas/kursas/blob/master/DB/db2/cars.db
Atsidarykite duombazę programoje DB Browser for SQLite ir skiltyje "Execute SQL" galite sekti paskaitos teoriją:
Platesnis WHERE panaudojimas
BETWEEN ...AND
Nurodo žemiausios ir aukščiausios reikšmių intervalą, išrenkant duomenis iš lentelės, t.y. rezultate pateikia duomenis tam tikram reikšmių intervalui:
SELECT * FROM cars WHERE year BETWEEN 1990 AND 1993;
BETWEEN ... AND operatorius apima ir kraštutines reikšmes.
IN
Išrenka rezultatus pagal pateiktą sąrašą:
SELECT * FROM cars WHERE year IN (1995, 2000, 2010);
LIKE
Duomenų išrinkimui iš lentelės naudoja šabloną:
- % - reiškia nulį arba keletą simbolių
- _ - reiškia vieną simbolį
SELECT * FROM cars WHERE make LIKE'V%';
kitas pvz. - išrenka eilutes, kuriose modelis iš 2-jų simbolių:
SELECT * FROM cars WHERE model LIKE'__';
arba, tarkim:
SELECT * FROM cars WHERE make LIKE'__n%';
išrinktos eilutės, kuriose gamintojo trečia raidė n:
IS NULL
nurodo, jog vartotoją domina tik eilutės lentelėje su neapibrėžta lauko reikšme:
SELECT * FROM cars WHERE color IS NULL;
AND, OR, NOT
naudojami sąlygų kombinavimui, pvz:
SELECT * FROM cars WHERE make = "Ford" AND price > 40000;
SELECT * FROM cars WHERE make = "Ford" OR year > 2012;
prieš kiekvieną sąlygą galima naudoti NOT:
SELECT * FROM cars WHERE color NOT in ("Violet", "Turquoise", "Orange", "Crimson", "Puce");
sudėtingesnis pavyzdys:
SELECT * FROM cars WHERE (make = "Volvo" OR make = "Ford") AND price NOT BETWEEN 10000 AND 50000;
ORDER BY, DESC
nustato, kaip turi būti išrūšiuoti duomenys užklausos rezultate. Pvz.:
SELECT * FROM cars ORDER BY price;
Jeigu norime atvirkštinio rūšiavimo, naudojame DESC:
SELECT * FROM cars ORDER BY price DESC;
analogiškai tekstiniai įrašai rūšiuojasi pagal abėcelę:
SELECT * FROM cars ORDER BY make DESC;
Case insensitive paieška
SELECT * FROM cars WHERE make = "toyota" COLLATE NOCASE;
||
Tai yra sujungimo operatorius (concatenate operator), naudojamas string reikšmių apjungimui paieškos rezultate:
SELECT "GAMINTOJAS: " || make, model FROM cars;
SELECT make||" "||model AS "full_name", year FROM cars;
šiuo atveju nurodėme, kaip vadinsime stulpelį t.y. 'full_name'. Kitose DB, pvz Postgres, šiam veiksmui galime naudoti CONCAT paragrafą, tačiau SQLITE jis neveikia.
Skaičiavimai
Užklausose galime nurodyti, kokius aritmetinius veiksmus norime atlikti su stulpeliu, prieš jį parodant rezultate:
SELECT make, model, 2021 - year AS "age" FROM cars;
arba:
SELECT make, model, price, ROUND(price / 121.0 * 100, 2) AS "be PVM" FROM cars;
šiuo atveju naudojome funkciją ROUND gauto rezultato suapvalinimui. Nulis po kablelio (121.0) panaudotas tam, kad gautume float reikšmę pirmoje dalyboje.
GROUP BY
Rezultatus galime grupuoti:
SELECT * FROM person GROUP BY gender, last_name;
SELECT
*
FROM
person
GROUP BY
last_name,
first_name
HAVING
gender="Female";
sudėtingesnis pavyzdys:
SELECT
*
FROM
person
GROUP BY
last_name,
first_name
HAVING
date_of_birth
BETWEEN
date('1980-01-01')
AND
date('1990-01-01');
Grupavimas
grupavimui dažniausiai naudojamos funkcijos:
- AVG() - nustato vidurkį grupei
- COUNT() - nustato eilučių, kurių išraiška yra apibrėžta, kiekį lentelėje
- MAX() - nustato didžiausią reikšmę
- MIN() - nustato mažiausią reikšmę
- SUM() - nustato bendrą sumą, ignoruojant neapibrėžtas reikšmes
funkcijų naudojimas be grupavimo:
SELECT MIN(price), MAX(price), AVG(price) from cars;
suraskime pigiausią fordą:
SELECT make, model, min(price) FROM cars WHERE make="Ford";
pavyzdžiai su grupavimu:
išrinkime kiek ir kokių automobilių yra lentelėje:
SELECT make, count(*) FROM cars GROUP BY make ORDER BY count(*) DESC;
padarykime lentelę, kurioje matytųsi brangiausios spalvos:
SELECT color, max(price), make, model FROM cars GROUP BY color ORDER BY price DESC;
Darant kompleksiškas užklausas, reikėtų laikytis tokio eiliškumo:
- SELECT stulpelis, grupinė_funkcija
- FROM lentelė
- [WHERE sąlyga]
- [GROUP BY sąrašas_grupavimui]
- [HAVING grupės sąlyga]
- [ORDER BY rūšiavimo sąlyga]
tarkime:
SELECT make, model, year, max(price)
FROM cars
WHERE make NOT IN ("Toyota", "Mercury", "Volvo")
GROUP BY price
HAVING year > 2007
ORDER BY make;
Išrinktos brangiausios mašinos, kurių tarpe nėra toyotų, mercury ir volvo. Išfiltruotos tos, kurios senesnės už 2007m. Išrūšiuotos pagal gamintoją.
SQL 2 užduotys
Parsisiųskite lentelę "darbuotojai2.db", atsidarykite ją programoje DB Browser for SQLite ir skiltyje "Execute SQL" atlikite šias SQL užklausas:
- Išrinkite duomenis apie darbuotoją (asmens kodą, vardą ir pavarde) iš lenteles DARBUOTOJAS, kuris gimęs 1988 m. liepos 20 d.
- Išrinkite duomenis apie darbuotojus (nuo kada dirba, asmens kodą) iš lentelės DARBUOTOJAS, kurie būtų įsidarbinę nuo 2009 m. spalio 30 d. iki 2012 m. lapkričio 11d.
- Išrinkite duomenis apie darbuotojus (vardą, Skyriaus ID ir Projekto ID) iš lentelės DARBUOTOJAS, kurie dirba 2 ir 3 skyriuose (panaudoti IN operatorių).
- Išrinkite duomenis (vardą, pavarde ir asmens kodą) apie visas moteris iš lentelės DARBUOTOJAS (panaudojant operatorių LIKE).
- Išrinkite visus duomenis apie visus darbuotojus iš lentelės DARBUOTOJAS, kurie yra gimę 12 dieną (panaudojant operatorių LIKE).
- išrinkite visus projektus iš lentelės PROJEKTAS, kurių pavadinime antra raidė būtų ‘a’.
- Išrinkite visus darbuotojus iš lentelės DARBUOTOJAS, kuriems nepaskirtos jokios pareigos.
- Išrinkite duomenis apie darbuotojus (vardą, pavarde, nuo kada dirba ir pareigas), kurie dirba nuo 2011-02-12 ir jų pareigos yra Programuotojai.
- Išrinkite duomenis apie darbuotojus (vardą, pavardę, Skyriaus ID ir Projekto ID) iš lentelės DARBUOTOJAS, kurie yra iš Gamybos (2) skyriaus arba 1 projekto.
- Išrinkite visus darbuotojų vardus, išskyrus tuos, kurių vardai prasideda raide ‘A’ .
- Išrinkite duomenis apie darbuotojus (vardą, pavardę ir nuo kada dirba) iš lentelės DARBUOTOJAS ir išrikiuokite visus duomenis nuo dirbančio seniausiai iki naujausiai.
- Išrinkite duomenis apie darbuotojus (vardą, pavardę ir nuo kada dirba) iš lentelės DARBUOTOJAS ir išrikiuokite visus duomenis nuo dirbančio naujausiai iki seniausiai.
- Išrinkite iš lentelės DARBUOTOJAS projektų ID, kurie būtų minimalus ir maksimalus skaičius.
- Išrinkite duomenis apie tai, kiek kiekviename projekte yra priskirta žmonių (projekto numeris ir skaičius, kiek jame dalyvauja žmonių).
- #14 punkto užklausą pataisykite taip, kad rodytų tik tuos projektus, kuriems priskirti daugiau nei 3 darbuotojai.
- Išrinkite duomenis (projekto numeris, pareigos, skaičius) iš lentelės DARBUOTOJAS, kiek programuotojų dirba kiekvienam projekte.