3. SQL sintaksė duomenų bazės užklausoms Flashcards
Kam reikalingi ryšiai realiacinėse duomenų bazėse?
- Supaprastina informacijos išgavimą iš keleto lentelių.
- Korektiškai sumodeliuota duomenų bazė leidžia taupyti disko vietą.
- Reliacinėje duomenų bazėje duomenys yra saugomi keliose tarpusavyje susietose duomenų lentelėse, tuo
sumažinant ar visiškai panaikinant duomenų dubliavimąsi.
Kokio tipo (kardinalumo) ryšiai galimi tarp lentelių?
- Vienas su vienu (one to one) – patogiau duomenis pateikti vienoje lentelėje.
- Vienas su daug (one to many) – dažniausiai naudojamas.
- Daug su daug (many to many) - ryšys išskaidomas per tarpinę lentelę gaunami du nauji vienas su daug ryšiai.
Kokie pagrindiniai duomenų tipai naudojami duomenų bazės lentelės laukams?
BINARY, VARBINARY
BIT
TINYINT
MONEY
DATETIME (DOUBLE *)
UNIQUEIDEN TIFIER
CHARACTER
REAL
FLOAT
SMALLINT
INTEGER
DECIMAL
TEXT
IMAGE
Kaip reliacinėse duomenų bazėse modeliuojamas (išsprendžiamas) “daug-su-daug” ryšio atvejas?
Ryšys išskaidomas per tarpinę lentelę gaunami du nauji vienas-su-daug ryšiai.
Kuris ryšio kardinalumo tipas populiariausias reliacinėse DB? Kada praverčia “vienas-su-vienu” atvejas?
Populiariausias tipas yra vienas su daug (one to many). Vienas-su-vienu gali būti naudojama žmonių duomenims,
tarkim dokumento numeris ir žmogaus vardas, pavardė ir t.t. - kai duomenys yra unikalūs ir nepasikartoja.
Kuo skiriasi išorinis raktas (foreign key) nuo pirminio rakto (primary key)? Kurio tipo ryšiui jie būdingi?
“A primary key is used to ensure data in the specific column is unique. It is a column cannot have NULL values. It is
either an existing table column or a column that is specifically generated by the database according to a defined
sequence.
A foreign key is a column or group of columns in a relational database table that provides a link between data in two
tables. It is a column (or columns) that references a column (most often the primary key) of another table.
A primary key-foreign key relationship defines a one-to-many relationship between two tables in a relational database.”
Kam naudojama SQL kalba? Kokia sintaksės struktūra pasižymi SELECT sakinys?
SQL (Structured Query Language) – standartizuota reliacinių duomenų bazių kalba duomenims aprašyti ir manipuliuoti
jais. Kalbos abėcėlę sudaro simboliai, kurie vartojami kalbos sakiniams užrašyti. SQL abėcėlę sudaro raidės, skaitmenys,
specialieji simboliai bei baziniai žodžiai.
SELECT [Distinct] <stulpelių>
FROM <lentelės>
[WHERE <paieškos>]
[GROUP BY <stulpelių> [HAVING <paieškos>]]
[ORDER BY < stulpelių vardai>]
[SAVE TO TEMP <lentelės> stulpelių sąrašas)
[KEEP]]</lentelės></paieškos></stulpelių></paieškos></lentelės></stulpelių>
Kam SELECT sakinyje naudojama WHERE komanda ir kokiu būdu ji leidžia apjungti lenteles?
WHERE nurodo sąlygas, pagal kurias atrenkami kortežai. WHERE sąlygoje galima panaudoti tokias logines jungtis
(pirmumo tvarka):
1. NOT - išrenka kortežus, kurie netenkina pateiktos sąlygos;
2. AND - tenkina abi sąlygas;
3. OR - tenkina bent vieną sąlygą.
Jeigu loginės jungtys yra to paties tipo, sudėtinė WHERE sąlyga tikrinama iš kairės į dešinę. Sudėtingu atveju galima
naudoti skliaustelius.
WHERE sąlygoje galima naudoti standartines funkcijas; pavyzdžiui, panaudojus UPPER() funkciją, simbolinė eilutė
konvertuojama į didžiųjų raidžių eilutę.
Ką atlieka šios SELECT sakinio sintaksės komandos - ORDER BY (ASC, DESC), GROUP BY, HAVING?
Norint gauti išrūšiuotus pagal tam tikrą kriterijų duomenis, SELECT sakinys pabaigiamas ORDER BY. Pagal nutylėjimą
rikiuojama didėjančia (ASC) tvarka, bet galima rikiuoti mažėjančia (DESC) tvarka, nurodant gale.
Eilučių grupavimą realizuoja konstrukcija GROUP BY.
„A HAVING clause in SQL specifies that an SQL SELECT statement must only return rows where aggregate values meet
the specified conditions. HAVING and WHERE are often confused by beginners, but they serve different purposes.
To complement a GROUP BY clause, use a HAVING clause to apply one or more qualifying conditions to groups after they
are formed. The effect of the HAVING clause on groups is similar to the way the WHERE clause qualifies individual rows.“
Kokios agregavimo funkcijos galimos SELECT sakinio pradžioje kai naudojame GROUP BY?
Užklausa, kurios gale naudojamas GROUP BY paprastai pradžioje turi turėti COUNT, AVG, SUM.
Pvz. COUNT(laukas, pagal kurį nėra grupuojama). Numeriai detalių, kurias tiekia daugiau kaip 1 tiekėjas:
SELECT DetNr FROM Tiekimai Group by DetNr having count (*) > 1
Kokia SQL sintaksės komanda atitiktų WHERE filtravimą pagal sąlygas, po GROUP BY panaudojimo?
Having.
Kas yra koreliuotos užklausos? Kodėl jų reikėtų vengti?
Koreliuota užklausa - tokia užklausa, kurios dalinės užklausos rezultatas priklauso nuo išorinės užklausos rezultato
(pavyzdys: SELECT Pavardė FROM Tiekėjai WHERE ‘P2’ IN (SELECT DetNr FROM Tiekimai WHERE TiekNr Tiekėjai.Nr).
Šią užklausą galima paaiškinti taip: tiekėjai tiekiantys detalę ‘P2’, tai tokie tiekėjai, kuriems tarp visų jo tiekiamų detalių
yra datalė ‘P2’. Koreliuotų užklausų reiktų vengti, kadangi sunku tikėtis, jog jos bus vykdomos efektyviai.
Kokios SELECT sakinio WHERE dalyje naudojamos komandos neišsiverčia be koreliuotų užklausų?
Jei WHERE sąlygoje tikrinama lentelė, kuri turi kažkokį ryšį su pirmame SELECT naudojamu objektu. Jei reikia duomenų
iš kitos/nežinomos lentelės.
Kurį JOIN variantą dviejų lentelių apjungimui atitiktų toks SQL sakinys: SELECT * FROM Table1, Table2 ?
SQL sakinys “SELECT * FROM Table1, Table2” atitinka CROSS JOIN variantą dviejų lentelių apjungimui. Tai yra
neekvivalentus paprastam JOIN variantui, nes jis gali sukurti visų galimų kombinacijų apjungimą tarp lentelių.