23
SELECT vaicājumi vairākām tabulām Tabulu sasaiste 1 : 1 un 1 : N 1. Tabulu saite 1 : 1 (viens ar vienu): 2. Tabulu saite 1 : N (viens ar daudziem): Tabula AA K1 K2 K3 a b Tabula BB K4 K5 K6 a b Apvienotā tabula AABB K1 K2 K3 K4 K5 K6 a a b b Tabula AA K1 K2 K3 a Tabula BB K4 K5 K6 a a b Apvienotā tabula AABB K1 K2 K3 K4 K5 K6 a a a a b b select from AA, BB where AA.K1 = select from AA, BB where AA.K1 = 1

SQL un MDX (Multiple Dimensional eXpression · Web viewFirmas INNER JOIN Darbinieki ON Firmas.F_NUM = Darbinieki.NUM_FIR WHERE Firmas.F_NOS ="AA"; NosaukumsUzvārdsVārdsAmatsAACelmsLieneuzkopējaAAKoksLienesekretāre

  • Upload
    dohuong

  • View
    225

  • Download
    4

Embed Size (px)

Citation preview

Page 1: SQL un MDX (Multiple Dimensional eXpression · Web viewFirmas INNER JOIN Darbinieki ON Firmas.F_NUM = Darbinieki.NUM_FIR WHERE Firmas.F_NOS ="AA"; NosaukumsUzvārdsVārdsAmatsAACelmsLieneuzkopējaAAKoksLienesekretāre

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

Page 2: SQL un MDX (Multiple Dimensional eXpression · Web viewFirmas INNER JOIN Darbinieki ON Firmas.F_NUM = Darbinieki.NUM_FIR WHERE Firmas.F_NOS ="AA"; NosaukumsUzvārdsVārdsAmatsAACelmsLieneuzkopējaAAKoksLienesekretāre

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

Page 3: SQL un MDX (Multiple Dimensional eXpression · Web viewFirmas INNER JOIN Darbinieki ON Firmas.F_NUM = Darbinieki.NUM_FIR WHERE Firmas.F_NOS ="AA"; NosaukumsUzvārdsVārdsAmatsAACelmsLieneuzkopējaAAKoksLienesekretāre

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

Page 4: SQL un MDX (Multiple Dimensional eXpression · Web viewFirmas INNER JOIN Darbinieki ON Firmas.F_NUM = Darbinieki.NUM_FIR WHERE Firmas.F_NOS ="AA"; NosaukumsUzvārdsVārdsAmatsAACelmsLieneuzkopējaAAKoksLienesekretāre

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

Page 5: SQL un MDX (Multiple Dimensional eXpression · Web viewFirmas INNER JOIN Darbinieki ON Firmas.F_NUM = Darbinieki.NUM_FIR WHERE Firmas.F_NOS ="AA"; NosaukumsUzvārdsVārdsAmatsAACelmsLieneuzkopējaAAKoksLienesekretāre

Savienojumu veidi

FROM Tabula1 INNER | LEFT | RIGHT JOIN Tabula2ON Tabula1.Kolona1 likums Tabula2.Kolona2

5

Page 6: SQL un MDX (Multiple Dimensional eXpression · Web viewFirmas INNER JOIN Darbinieki ON Firmas.F_NUM = Darbinieki.NUM_FIR WHERE Firmas.F_NOS ="AA"; NosaukumsUzvārdsVārdsAmatsAACelmsLieneuzkopējaAAKoksLienesekretāre

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

Page 7: SQL un MDX (Multiple Dimensional eXpression · Web viewFirmas INNER JOIN Darbinieki ON Firmas.F_NUM = Darbinieki.NUM_FIR WHERE Firmas.F_NOS ="AA"; NosaukumsUzvārdsVārdsAmatsAACelmsLieneuzkopējaAAKoksLienesekretāre

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

Page 8: SQL un MDX (Multiple Dimensional eXpression · Web viewFirmas INNER JOIN Darbinieki ON Firmas.F_NUM = Darbinieki.NUM_FIR WHERE Firmas.F_NOS ="AA"; NosaukumsUzvārdsVārdsAmatsAACelmsLieneuzkopējaAAKoksLienesekretāre

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

Page 9: SQL un MDX (Multiple Dimensional eXpression · Web viewFirmas INNER JOIN Darbinieki ON Firmas.F_NUM = Darbinieki.NUM_FIR WHERE Firmas.F_NOS ="AA"; NosaukumsUzvārdsVārdsAmatsAACelmsLieneuzkopējaAAKoksLienesekretāre

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

Page 10: SQL un MDX (Multiple Dimensional eXpression · Web viewFirmas INNER JOIN Darbinieki ON Firmas.F_NUM = Darbinieki.NUM_FIR WHERE Firmas.F_NOS ="AA"; NosaukumsUzvārdsVārdsAmatsAACelmsLieneuzkopējaAAKoksLienesekretāre

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

Page 11: SQL un MDX (Multiple Dimensional eXpression · Web viewFirmas INNER JOIN Darbinieki ON Firmas.F_NUM = Darbinieki.NUM_FIR WHERE Firmas.F_NOS ="AA"; NosaukumsUzvārdsVārdsAmatsAACelmsLieneuzkopējaAAKoksLienesekretāre

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

Page 12: SQL un MDX (Multiple Dimensional eXpression · Web viewFirmas INNER JOIN Darbinieki ON Firmas.F_NUM = Darbinieki.NUM_FIR WHERE Firmas.F_NOS ="AA"; NosaukumsUzvārdsVārdsAmatsAACelmsLieneuzkopējaAAKoksLienesekretāre

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

Page 13: SQL un MDX (Multiple Dimensional eXpression · Web viewFirmas INNER JOIN Darbinieki ON Firmas.F_NUM = Darbinieki.NUM_FIR WHERE Firmas.F_NOS ="AA"; NosaukumsUzvārdsVārdsAmatsAACelmsLieneuzkopējaAAKoksLienesekretāre

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

Page 14: SQL un MDX (Multiple Dimensional eXpression · Web viewFirmas INNER JOIN Darbinieki ON Firmas.F_NUM = Darbinieki.NUM_FIR WHERE Firmas.F_NOS ="AA"; NosaukumsUzvārdsVārdsAmatsAACelmsLieneuzkopējaAAKoksLienesekretāre

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

Page 15: SQL un MDX (Multiple Dimensional eXpression · Web viewFirmas INNER JOIN Darbinieki ON Firmas.F_NUM = Darbinieki.NUM_FIR WHERE Firmas.F_NOS ="AA"; NosaukumsUzvārdsVārdsAmatsAACelmsLieneuzkopējaAAKoksLienesekretāre

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

Page 16: SQL un MDX (Multiple Dimensional eXpression · Web viewFirmas INNER JOIN Darbinieki ON Firmas.F_NUM = Darbinieki.NUM_FIR WHERE Firmas.F_NOS ="AA"; NosaukumsUzvārdsVārdsAmatsAACelmsLieneuzkopējaAAKoksLienesekretāre

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