sql un mdx (multiple dimensional expression language ... web viewvaicājumu projektēšanas...
TRANSCRIPT
Vaicājumu projektēšanas grafiskā metode
1. Tabulu izmantošana.
2. Datu vienību izmantošana.
Noteikumi
Noteikumi
RezultātsNoteikumi
1
Projekcijas, selekcijas un grupēšanas grafiskais attēlojums
a) Kolonu atlase (projekcijas)
b) Rindu (rakstu) atlase (selekcija)
c) Rindu (rakstu) grupēšana un grupu vērtību agregātu veidošana
Tabula AAK1 K2 K3 K4 K5 K6
Tabula BBK1 K2 K3 K4 K5 K6
Tabula CCK1 K2 K3 K4 K5 K6
b
1. grupa
2. grupa
select ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]]from where
selectfrom where K2 = ... and > ... or < ... != ... Like "*A?" IS NULL NOT IN (...)
selectfrom wheregroup byhaving COUNT(*), SUM(...), MAX(...), MIN(...), AVG(...)
∑∑
∑∑
2
Tabulu saistības varianti
1. Tabulu saite 1 : 1 (viens ar vienu):
2. Tabulu saite 1 : N (viens ar daudziem):
Tabula AAK1 K2 K3abc
Tabula BBK4 K5 K6abc
Apvienotā tabula AABBK1 K
2K3 K4 K
5K6
a ab bc c
Tabula AAK1 K2 K3ab
Tabula BBK4 K5 K6
aabb
Apvienotā tabula AABBK1 K
2K3 K4 K
5K6
a aa ab bb b
selectfrom AA, BBwhere AA.K1 = BB.K4
selectfrom AA, BBwhere AA.K1 = BB.K6
3
Tabulu saistības varianti (turpinājums)
3. Tabulas sasaiste ar divām jau sasaistītām tabulām:
Tabula AAK1 K2 K3ab
Tabula BBK4 K5 K6
aabb
Apvienotā tabula AABBK1 K
2K3 K4 K
5K6
a aa ab bb b
selectfrom CC, ( select * from AA, BB where AA.K1 = BB.K6) as dwhere K7 = d.K6
Tabula CCK7 K8 K9ab
Apvienotā tabula AABB_CCK1
K2 K3
K4 K5
K6 K7 K8 K9
a a aa a ab b bb b b
4
Tabulu saistības varianti (turpinājums)
4. Pamatvaicājuma un pakārtotā vaicājuma tabulu sasaiste. Korelētie vaicājumi:
Tabula AAK1 K2 K3ab Tabula BB
K4 K5 K6aabb
select ...from AAwhere ...
select ...from BBwhere BB.K6 = AA.K1;
1
2 1 2
5
Pamatvaicājums un apakšvaicājumi (pakārtotie vaicājumi)
1. Apakšvaicājums SELECT rindā. Apakšvaicājums drīkst atgriezt tikai vienu rakstu jeb rindu:
select AA.K1, AA.K2, (select BB.K7, BB.K8 from BB where BB.K5 =1) from AAwhere ...
2. Apakšvaicājums WHERE rindā. Apakšvaicājums drīkst atgriezt vienu vērtību:
select from AAwhere AA.K2 = (select BB.K7 from BB where BB.K8 =3);
vai vērtību kopu:
select from AAwhere AA.K2 ALL (select BB.K7 from BB where BB.K8 =3); ANY SOME
a
a
abc
6
Pamatvaicājums un apakšvaicājumi (pakārtotie vaicājumi)
3. Apakšvaicājums HAVING rindā. Apakšvaicājums drīkst atgriezt vienu vērtību:
select from AAgroup byhaving COUNT(*) = (select COUNT(*) from BB where BB.K8 =3 group by ...);
vai vērtību kopu:
select from AAhaving COUNT(*) ALL (select COUNT(*) from BB group by ...); ANY SOME
10
7510
7
Pamatvaicājums un apakšvaicājumi (pakārtotie vaicājumi)
4. Konstrukcijas [NOT] EXISTS izmantošana. Tā nosaka vai eksistē kādā rinda, kurai izpildās definētie noteikumi (piemēram, vērtību vienādība).
Tabula AAK1 K2 K3ab Tabula BB
K4 K5 K6cdbe
1
2 1 2
select ...from AAwhere NOT EXISTS
(select ...from BBwhere BB.K6 = AA.K1);
8
Darbības ar kopām: apvienošana (UNION, UNION ALL), starpība (MINUS), pārklāšanās (INTERSECT)
(vaicājums)UNION | UNION ALL | MINUS INTERSECT(vaicājums)
UNION ALL UNION
MINUS INTERSECT
Tabula AAK1 K2 K3ab
Tabula BBK4 K5 K6cb
Rezultātsabcb
Tabula AAK1 K2 K3ab
Tabula BBK4 K5 K6cb
Rezultātsabc
Tabula AAK1 K2 K3ab
Tabula BBK4 K5 K6cb
Rezultātsa
Tabula AAK1 K2 K3ab
Tabula BBK4 K5 K6cb
Rezultātsb
9
Vaicājumu projektēšanas grafiskās metodes izmantošanaTabula FIRMAS
F_NUM F_NOS DIB_DAT STAT_KAP TEL ADRFirmas numurs Nosaukums Dibināšanas
datumsStatūtu kapitāls Telefons Adrese
1 AA 1998.12.05 50 000,00 Ls 7222222 Rīga, Garā iela 152 BB 1998.05.07 20 000,00 Ls 7111111 Rīga, Zirņu iela 33 CC 1999.03.05 100 000,00 Ls 7333333 Rīga, Avotu 12
Tabula DARBINIEKI
D_NUM UZV VAR AMATS DZIM NUM_FIRDarbinieka
numurs Uzvārds Vārds Amats Dzimums Firmas numurs
1 Koks Juris galdnieks vīrietis 22 Zars Inese krāsotājs sieviete 23 Celms Liene uzkopēja sieviete 14 Koks Liene sekretāre sieviete 15 Zars Varis galdnieks vīrietis 3
Tabula DARBI
NUM NOS IZP_DAT STUNDAS ST_CENA DARBIN_NUMDarba
numurs Nosaukums Izpildes datums Stundas Stundas
cenaDarbinieka
numurs1 darbs1 1999.03.03. 5 2,00 Ls 12 darbs2 1999.05.03. 10 1,50 Ls 13 darbs3 1999.07.03. 12 2,00 Ls 14 darbs4 1999.01.03. 11 2,00 Ls 25 darbs5 1999.03.03. 8 1,80 Ls 26 darbs6 1999.05.03. 10 2,50 Ls 37 darbs7 1999.02.03. 14 2,20 Ls 38 darbs8 1999.05.03. 10 4,00 Ls 4
10
1. piemērs. Tabula ar grupēšanu un lauka ierobežojumu.Cik sievietes strādā 2. firmā?
select COUNT(NUM_FIR) as Daudzumsfrom DARBINIEKIwhere NUM_FIR =2 and DZIM = "sieviete"group by NUM_FIR;
COUNT(*)Tabula DARBINIEKI
D_NUM UZV VAR AMATS
DZIM NUM_FIR
sieviete2
Daudzums1
11
2. piemērs. Divas saistītas tabulas, viena ar grupēšanu.Cik katrs darbinieks ir nopelnījis?
select a.UZV, a.VAR, c.Maksafrom DARBINIEKI a, (select SUM(b.STUNDAS*b.ST_CENA) as Maksa, b.DARBIN_NUM as DAR_NUM from DARBI b group by b.DARBIN_NUM) cWHERE a.D_NUM = c.DAR_NUM;
UZV VARTabula DARBINIEKI a
D_NUM UZV VAR AMATS
DZIM NUM_FIR
VADIT_NUM
Tabula DARBI bNUM NOS IZP_DAT STUNDAS ST_CENA DARBIN_NUM
grupēšana
grupēšana
UZV VAR MaksaKoks Juris 49Zars Inese 36,4
Celms Liene 55,8Koks Liene 40
SUM(STUNDAS*ST_CENA)
SUM(STUNDAS*ST_CENA)
Rezultāta tabula cUZV VAR SUM(STUNDAS*ST_CENA)
12
3. piemērs. Divas saistītas tabulas katra ar grupēšanu.Cik katra amata pārstāvji nopelnījuši?
select a.AMATS, SUM(c.Maksa) as Kopējā_samaksafrom DARBINIEKI a, (select SUM(b.STUNDAS*b.ST_CENA) as Maksa, b.DARBIN_NUM as DAR_NUM from DARBI b group by b.DARBIN_NUM) cwhere a.D_NUM = c.DAR_NUMgroup by a.AMATS;
Tabula DARBI bNUM NOS IZP_DA
TSTUNDAS ST_CENA DARBIN_NUM
grup.
grup.
Tabula DARBINIEKIi aD_NUM UZV VAR AMATS DZIM NUM_FIR VADIT_NUM
grup.
grup.
Amats Kopējā_samaksagaldnieks 49krāsotājs 36,4sekretāre 40uzkopēja 55,8
SUM(STUNDAS*ST_CENA)SUM(STUNDAS*ST_CENA)
Rezultāta tabula AMATS SUM(STUNDAS*ST_CENA)
13
Šablons vaicājuma veidošanai
Tabula
Tabula
Tabula
Tabula
Saites noteikums
Saites noteikums
Saites noteikums
14
4. piemērs. Kurās firmās ir vairāk darbinieku kā firmā CC?
SELECT A.F_NOS, COUNT(B.NUM_FIR) AS SkaitsFROM Firmas A, Darbinieki BWHERE A.F_NUM = B.NUM_FIRGROUP BY B.NUM_FIR, A.F_NOSHAVING COUNT(B.NUM_FIR) > (SELECT COUNT(D.NUM_FIR) FROM Firmas C, Darbinieki D WHERE C.F_NUM = D.NUM_FIR AND C.F_NOS = "CC" GROUP BY D.NUM_FIR) ;
F_NOSTabula Firmas A
F_NUM F_NOS DIB_DAT STAT_KAP TEL ADR
COUNT(B.NUM_FIR)Tabula Darbinieki B
D_NUM UZV VAR AMATS DZIM NUM_FIR
Tabula Firmas CF_NUM F_NOS DIB_DAT STAT_KAP TEL ADR
CC
COUNT(D.NUM_FIR)Tabula Darbinieki D
D_NUM UZV VAR AMATS DZIM NUM_FIR
COUNT(B.NUM_FIR) > COUNT(D.NUM_FIR)
15
5. piemērs. Izvadīt darbiniekus ar saviem vadītājiem
SELECT C.UZVARDS, C.VARDS, C.AMATS, D.UZV, D.VAR, D.AMATSFROM ( SELECT A.UZV AS UZVARDS, A.VAR AS VARDS, A.AMATS, A.D_NUM AS DARBIN_NUMURS FROM Darbinieki A WHERE A.VADIT_NUM Is Null) AS C, (SELECT B.UZV, B.VAR, B.AMATS, B.VADIT_NUM FROM Darbinieki B WHERE B.VADIT_NUM Is Not Null) AS D WHERE D.VADIT_NUM = C.DARBIN_NUMURS;
Atvasinātā tabula CD_NUM
UZVARDS VARDS AMATS
Tabula Darbinieki A (ne vadītāji)D_NU
MUZV VAR AMATS DZIM NUM_FI
RVADIT_NUM
Is Null
Atvasinātā tabula DUZV VAR AMATS VADIT_NUM
Tabula Darbinieki B (vadītāji)D_NUM UZV VAR AMATS DZIM NUM_FI
RVADIT_NUM
Is Not Null
16
6. piemērs. Pakārtotais vaicājums SELECT rindā.Iegūt firmu darbinieku skaitu.
select a.NOS asosaukums, (select COUNT(*) from DARBINIEKI b where b.NUM_FIR = a.F_NUM group by b.NUM_FIR) Skaitsfrom FIRMAS a;
COUNT(*)Tabula DARBINIEKI b
D_NUM UZV VAR AMATS DZIM NUM_FIR VADIT_NUM
Tabula FIRMAS aF_NUM F_NOS DIB_DAT STAT_KAP TEL ADR
17