SQL un MDX (Multiple Dimensional eXpression language ... Web viewKonstrukcijas [NOT] EXISTS...

27
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

Transcript of SQL un MDX (Multiple Dimensional eXpression language ... Web viewKonstrukcijas [NOT] EXISTS...

Page 1: SQL un MDX (Multiple Dimensional eXpression language ... Web viewKonstrukcijas [NOT] EXISTS izmantošana. Tā nosaka vai eksistē kādā rinda, kurai izpildās definētie noteikum

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 language ... Web viewKonstrukcijas [NOT] EXISTS izmantošana. Tā nosaka vai eksistē kādā rinda, kurai izpildās definētie noteikum

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 language ... Web viewKonstrukcijas [NOT] EXISTS izmantošana. Tā nosaka vai eksistē kādā rinda, kurai izpildās definētie noteikum

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 language ... Web viewKonstrukcijas [NOT] EXISTS izmantošana. Tā nosaka vai eksistē kādā rinda, kurai izpildās definētie noteikum

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 language ... Web viewKonstrukcijas [NOT] EXISTS izmantošana. Tā nosaka vai eksistē kādā rinda, kurai izpildās definētie noteikum

Savienojumu veidi

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

5

Page 6: SQL un MDX (Multiple Dimensional eXpression language ... Web viewKonstrukcijas [NOT] EXISTS izmantošana. Tā nosaka vai eksistē kādā rinda, kurai izpildās definētie noteikum

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 language ... Web viewKonstrukcijas [NOT] EXISTS izmantošana. Tā nosaka vai eksistē kādā rinda, kurai izpildās definētie noteikum

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 language ... Web viewKonstrukcijas [NOT] EXISTS izmantošana. Tā nosaka vai eksistē kādā rinda, kurai izpildās definētie noteikum

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 language ... Web viewKonstrukcijas [NOT] EXISTS izmantošana. Tā nosaka vai eksistē kādā rinda, kurai izpildās definētie noteikum

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 language ... Web viewKonstrukcijas [NOT] EXISTS izmantošana. Tā nosaka vai eksistē kādā rinda, kurai izpildās definētie noteikum

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 language ... Web viewKonstrukcijas [NOT] EXISTS izmantošana. Tā nosaka vai eksistē kādā rinda, kurai izpildās definētie noteikum

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 language ... Web viewKonstrukcijas [NOT] EXISTS izmantošana. Tā nosaka vai eksistē kādā rinda, kurai izpildās definētie noteikum

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 language ... Web viewKonstrukcijas [NOT] EXISTS izmantošana. Tā nosaka vai eksistē kādā rinda, kurai izpildās definētie noteikum

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 language ... Web viewKonstrukcijas [NOT] EXISTS izmantošana. Tā nosaka vai eksistē kādā rinda, kurai izpildās definētie noteikum

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 language ... Web viewKonstrukcijas [NOT] EXISTS izmantošana. Tā nosaka vai eksistē kādā rinda, kurai izpildās definētie noteikum

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 language ... Web viewKonstrukcijas [NOT] EXISTS izmantošana. Tā nosaka vai eksistē kādā rinda, kurai izpildās definētie noteikum

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

Page 17: SQL un MDX (Multiple Dimensional eXpression language ... Web viewKonstrukcijas [NOT] EXISTS izmantošana. Tā nosaka vai eksistē kādā rinda, kurai izpildās definētie noteikum

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

Atrast darbiniekus, kuru amati ir “galdnieks”un “sekretāre”.

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

17

Page 18: SQL un MDX (Multiple Dimensional eXpression language ... Web viewKonstrukcijas [NOT] EXISTS izmantošana. Tā nosaka vai eksistē kādā rinda, kurai izpildās definētie noteikum

SELECT A.UZV AS Uzvārds, A.VAR AS Vārds, A.AMATS AS AmatsFROM Darbinieki AWHERE A.AMATS = "galdnieks"UNIONSELECT B.UZV AS Uzvārds, B.VAR AS Vārds, B.AMATS AS AmatsFROM Darbinieki BWHERE B.AMATS = "sekretāre"ORDER BY Amats;

Uzvārds Vārds AmatsKoks Juris galdnieksZars Varis galdnieksKoks Liene sekretāre

18

Page 19: SQL un MDX (Multiple Dimensional eXpression language ... Web viewKonstrukcijas [NOT] EXISTS izmantošana. Tā nosaka vai eksistē kādā rinda, kurai izpildās definētie noteikum

Atrast darbiniekus, kuri ir nostrādājuši visvairāk stundas darbos un kam ir lielākā stundas apmaksa.

SELECT TOP 1 A.UZV, A.VAR, SUM(STUNDAS) as Nostrādātās_stundas, " " as Lielākā_stundas_cenaFrom Darbinieki A, Darbi BWHERE A.D_NUM = B.DARBIN_NUMGROUP BY B.DARBIN_NUM, A.UZV, A.VARORDER BY SUM(STUNDAS) DESCUNIONSELECT C.UZV, C.VAR, " " as Nostrādātās_stundas, D.ST_CENA AS Lielākā_stundas_cenaFROM Darbinieki C, Darbi DWHERE C.D_NUM = D.DARBIN_NUM AND D.ST_CENA >= ALL (SELECT E.ST_CENA FROM Darbi E);

Uzvārds Vārds Nostrādātās_stundas Lielākā_stundas_cenaKoks Juris 27Koks Liene 4

19

Page 20: SQL un MDX (Multiple Dimensional eXpression language ... Web viewKonstrukcijas [NOT] EXISTS izmantošana. Tā nosaka vai eksistē kādā rinda, kurai izpildās definētie noteikum

Kādi firmās BB un CC darbiniekiem ir atšķirīgi amati?

SELECT B.AMATSFROM Firmas A, Darbinieki BWHERE A.F_NUM = B.NUM_FIR AND A.F_NOS ="BB" AND B.AMATS NOT IN(SELECT D.AMATSFROM Firmas C, DARBINIEKI DWHERE C.F_NUM = D.NUM_FIR AND C.F_NOS = "CC")UNIONSELECT F.AMATSFROM Firmas E, Darbinieki FWHERE E.F_NUM = F.NUM_FIR AND E.F_NOS ="CC" AND F.AMATS NOT IN(SELECT G.AMATSFROM Firmas H, DARBINIEKI GWHERE H.F_NUM = G.NUM_FIR AND H.F_NOS = "BB");

Amatskrāsotājs

20