Upload
dohuong
View
225
Download
4
Embed Size (px)
Citation preview
SELECT vaicājumi vairākām tabulāmTabulu sasaiste 1 : 1 un 1 : N
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
1
Tabula 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 15
2 BB 1998.05.07 20 000,00 Ls 7111111 Rīga, Zirņu iela 3
3 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
SELECT * FROM Firmas, Darbiniekiwhere F_NUM = NUM_FIR;
2
Iegūtā kopējā tabula sasaistot tabulas Firmas un Darbinieki
Tabula Firmas Tabula DarbiniekiF_
NU
M
F_N
OS
DIB
_DA
T
STA
T_K
AP
TE
L
AD
R
D_N
UM
UZ
V
VA
R
AM
AT
S
DZ
IM
NU
M_F
IR
1 AA 1998.12.05 50 000,00 Ls 7222222 Rīga, Garā iela 15 3 Celms Liene uzkopēja sieviete 11 AA 1998.12.05 50 000,00 Ls 7222222 Rīga, Garā iela 15 4 Koks Liene sekretāre sieviete 12 BB 1998.05.07 20 000,00 Ls 7111111 Rīga, Zirņu iela 3 1 Koks Juris galdnieks vīrietis 22 BB 1998.05.07 20 000,00 Ls 7111111 Rīga, Zirņu iela 3 2 Zars Inese krāsotājs sieviete 23 CC 1999.03.05 100 000,00 Ls 7333333 Rīga, Avotu 12 5 Zars Varis galdnieks vīrietis 3
1 N
3
Tabula FirmasF_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 15
2 BB 1998.05.07 20 000,00 Ls 7111111 Rīga, Zirņu iela 3
3 CC 1999.03.05 100 000,00 Ls 7333333 Rīga, Avotu 12
Tabula DarbiniekiD_NUM UZV VAR AMATS DZIM NUM_FIR
Darbinieka numurs Uzvārds Vārds Amats Dzimums Firmas
numurs1 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
1. Kādi darbinieki strādā firmā AA?A variants
SELECT F_NOS, UZV, VAR, AMATSFROM Firmas, DarbiniekiWHERE F_NUM = NUM_FIR and F_NOS ="AA";
B variants (MS SQL dialekts)SELECT F_NOS, UZV, VAR, AMATSFROM Firmas INNER JOIN Darbinieki
ON Firmas.F_NUM = Darbinieki.NUM_FIRWHERE Firmas.F_NOS ="AA";
Nosaukums Uzvārds Vārds AmatsAA Celms Liene uzkopējaAA Koks Liene sekretāre
4
Savienojumu veidi
FROM Tabula1 INNER | LEFT | RIGHT JOIN Tabula2ON Tabula1.Kolona1 likums Tabula2.Kolona2
5
Tabula 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 15
2 BB 1998.05.07 20 000,00 Ls 7111111 Rīga, Zirņu iela 3
3 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
2. Kādas ir firmas ar diviem vai vairāk darbiniekiem?
SELECT COUNT(NUM_FIR) as Darbinieku_skaits, NUM_FIRFROM Firmas, DarbiniekiWHERE F_NUM = NUM_FIRGROUP BY NUM_FIRHAVING COUNT(NUM_FIR) >= 2;
Darbinieku skaits
NUM_FIR
2 12 2
6
Tabula DarbiniekiD_NUM UZV VAR AMATS DZIM NUM_FIR
Darbinieka numurs Uzvārds Vārds Amats Dzimums Firmas
numurs1 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 DarbiNUM 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
3. Kādi darbinieki ir izpildījuši vairāk par diviem darbiem?
SELECT UZV as Uzvārds, VAR as VārdsFROM Darbinieki, DarbiWHERE D_NUM = DARBIN_NUMGROUP BY DARBIN_NUM, UZV, VARHAVING COUNT(B.NUM) >2;
Uzvārds VārdsKoks Juris
7
Tabula FirmasF_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 DarbiniekiD_NUM UZV VAR AMATS DZIM NUM_FIR
Darbinieka numurs Uzvārds Vārds Amats Dzimums Firmas
numurs1 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 DarbiNUM 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
4. Noteikt firmas AA darbinieku izpildāmos darbus.SELECT NOS, STUNDASFROM Firmas, Darbinieki, DarbiWHERE F_NUM = NUM_FIR and D_NUM = DARBIN_NUM and F_NOS="AA";
Nosaukums Stundasdarbs6 10darbs7 14darbs8 10
8
Apakšvaicājums WHERE rindā. Apakšvaicājums drīkst atgriezt vienu vērtību vai vērtību kopu
select from AAwhere AA.K2 = (select BB.K7 from BB where BB.K8 =3);
select from AAwhere AA.K2 > ALL (select BB.K7 from BB where BB.K8 =3); > ANY > SOME
Kādā firmā (nosaukums) strādā Koks Liene?
SELECT A.F_NOS as Firmas_nosaukumsFROM Firmas AWHERE A.F_NUM = (SELECT B.NUM_FIR FROM Darbinieki B WHERE B.UZV = "Koks" AND B.VAR ="Liene");
a
abc
Firmas_nosaukumsAA
9
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)
Kādās firmās nav piereģistrēti darbinieki?
SELECT A.F_NOS AS NosaukumsFROM Firmas AWHERE NOT EXISTS (SELECT B.D_NUM FROM Darbinieki B WHERE B.NUM_FIR = A.F_NUM);
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);
Nosaukums
10
Pamatvaicājuma un pakārtotā vaicājuma tabulu sasaiste. Korelētie vaicājumi
Kurās firmās strādā galdnieks?
SELECT A.F_NOS AS NosaukumsFROM Firmas AS AWHERE "galdnieks" IN (SELECT B.AMATS FROM Darbinieki B WHERE B.NUM_FIR = A.F_NUM);
Kurās firmās strādā vairāk nekā 1 darbinieks?
SELECT A.F_NOS AS NosaukumsFROM Firmas AWHERE (SELECT COUNT(B.D_NUM) FROM Darbinieki B WHERE B.NUM_FIR = A.F_NUM GROUP BY B.NUM_FIR) > 1;
Tabula AAK1 K2 K3ab Tabula BB
K4 K5 K6aabb
select ...from AAwhere ...
select ...from BBwhere BB.K6 = AA.K1;
1
2 1 2
NosaukumsAABB
NosaukumsBBCC
11
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 ...
Kādā firmā (nosaukums) strādā Koks Liene?
SELECT (SELECT B.F_NOS FROM Firmas B WHERE B.F_NUM = A.NUM_FIR) as Firmas_nosaukumsFROM Darbinieki AWHERE A.UZV="Koks" and A.VAR ="Liene";
a
Firmas_nosaukumsAA
12
Apakšvaicājums HAVING rindā. Apakšvaicājums drīkst atgriezt vienu vērtību vai vērtību kopu
select from AAgroup byhaving COUNT(*) = (select COUNT(*) from BB where BB.K8 =3 group by ...);
select from AAhaving COUNT(*) > ALL (select COUNT(*) from BB group by ...); > ANY > SOME
Kādas ir firmas, par kurām ir mazākas firmas darbinieku skaita ziņā?
SELECT A.F_NOS AS NosaukumsFROM Firmas A, Darbinieki BWHERE A.F_NUM = B.NUM_FIRGROUP BY B.NUM_FIR, A.F_NOSHAVING COUNT(B.D_NUM) > ANY (SELECT COUNT(D.D_NUM) FROM Firmas C, Darbinieki D WHERE C.F_NUM = D.NUM_FIR GROUP BY D.NUM_FIR);
10
7510
NosaukumsAABB
13
Kurās firmās darbinieku skaits ir lielāks vai vienāds ar firmas AA darbinieku skaitu?
SELECT A.F_NOS AS NosaukumsFROM Firmas A, Darbinieki BWHERE A.F_NUM = B.NUM_FIR and NOT(A.F_NOS = "AA")GROUP BY B.NUM_FIR, A.F_NOSHAVING COUNT(B.D_NUM) >= (SELECT COUNT(D.D_NUM) FROM Firmas C, Darbinieki D WHERE C.F_NUM = D.NUM_FIR AND C.F_NOS = "AA" GROUP BY D.NUM_FIR);
Kurā firmā ir visvairāk darbinieku?
ELECT A.F_NOS as Nosaukums, COUNT(B.D_NUM) as Darbinieku_skaitsFROM Firmas A, Darbinieki BWHERE A.F_NUM = B.NUM_FIRGROUP BY B.NUM_FIR, A.F_NOSHAVING COUNT(B.D_NUM) >= ALL (SELECT COUNT(D.D_NUM) FROM Firmas C, Darbinieki D WHERE C.F_NUM = D.NUM_FIR GROUP BY D.NUM_FIR);
NosaukumsBB
Nosaukums Darbinieku_skaitsAA 2BB 2
14
Tabulas sasaiste ar divām jau sasaistītām tabulām.Tabulas sasaiste ar apakšvaicājuma rezultātu
Tabula AAK1 K2 K3ab
Tabula BBK4 K5 K6
aabb
Apvienotā tabula AABBK1 K
2K3 K4 K
5K6
a aa ab bb b
select *from 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
15
Kādā firmā (nosaukums) strādā Koks Liene?
SELECT A.F_NOS as Firmas_nosaukumsFROM Firmas A, (SELECT B.NUM_FIR AS NUM_F FROM Darbinieki B WHERE B.UZV = "Koks" and B.VAR ="Liene") as CWHERE A.F_NUM = C.NUM_F;
Firmas_nosaukumsAA
16