0% au considerat acest document util (0 voturi)
133 vizualizări4 pagini

Join SQL

Acest document prezintă o serie de interogări SQL care utilizează operații de join între tabele pentru a extrage anumite informații din baze de date relaționale. Sunt prezentate exemple de join inner, natural join, self join și utilizarea de funcții de agregare cum ar fi count, sum, avg în cadrul operațiilor de grupare.

Încărcat de

Dana Beatrice
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
133 vizualizări4 pagini

Join SQL

Acest document prezintă o serie de interogări SQL care utilizează operații de join între tabele pentru a extrage anumite informații din baze de date relaționale. Sunt prezentate exemple de join inner, natural join, self join și utilizarea de funcții de agregare cum ar fi count, sum, avg în cadrul operațiilor de grupare.

Încărcat de

Dana Beatrice
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
Sunteți pe pagina 1/ 4

EXERCITII SQL – LABORATOR 2

INNER JOIN

Precizati denumirile si codurile clientilor din judetul Iasi

SELECT DenCl,CodCl
FROM CLIENTI INNER JOIN CODURI_POSTALE
ON CLIENTI.CodPost= CODURI_POSTALE.CodPost INNER JOIN JUDETE ON
JUDETE.Jud=CODURI_POSTALE.Jud
WHERE Judet= 'Iasi'

Precizati denumirea localitatilor din regiunea Moldova


SELECT DISTINCT Loc
FROM CODURI_POSTALE
INNER JOIN JUDETE ON CODURI_POSTALE.Jud = JUDETE.Jud
WHERE Regiune='Moldova'

Varianta 2:
NATURAL JOIN – Compara toate coloanele cu nume identice, poate fi realizata doar intre 2
tabele, este riscant de utilizat in cazul in care numele coloanelor se schimba
SELECT Loc
FROM CODURI_POSTALE NATURAL JOIN JUDETE
WHERE Regiune='Moldova'

Cu ajutorul unei interogari SQL, aflati numerele de mobil ale persoanelor de contact pentru
clientul 1002
SELECT TelMobil
FROM PERSOANE INNER JOIN PERSCLIENTI
ON PERSOANE.CNP = PERSCLIENTI.CNP
INNER JOIN CLIENTI ON CLIENTI.CodCl=PERSCLIENTI.CodCl
WHERE CLIENTI.CodCl=1002

Afisati valoarea celei mai mari transe incasate pentru facturile emise intre 1 iunie 2007 si 31
ianuarie 2008, fara a apela la subconsultari.
SELECT Transa
FROM FACTURI INNER JOIN INCASFACT ON FACTURI.NrFact= INCASFACT.NrFact
WHERE DataFact BETWEEN DATE'2007-06-01' AND DATE'2007-12-31'
ORDER BY Transa DESC LIMIT 1

Afisati codurile unice ale produselor pentru care au fost realizate incasari dupa data de 1 aprilie
2007
SELECT DISTINCT PRODUSE.CodPr
FROM PRODUSE INNER JOIN LINIIFACT ON PRODUSE.CodPr = LINIIFACT.CodPr
INNER JOIN FACTURI ON FACTURI.NrFact = LINIIFACT.NrFACT
INNER JOIN INCASFACT ON INCASFACT.NrFact = FACTURI.NrFact
INNER JOIN INCASARI ON INCASARI.CodInc = INCASFACT.CodInc
WHERE DataInc > DATE'2007-04-01'

SINONIME LOCALE
Afisati codurile unice ale produselor pentru care au fost realizate incasari dupa data de 1 aprilie
2007. Utilizati sinonime locale pentru tabelele implicate

SELECT DISTINCT P.CodPr


FROM PRODUSE P
INNER JOIN LINIIFACT LF ON P.CodPr = LF.CodPr
INNER JOIN FACTURI F ON F.NrFact = LF.NrFACT
INNER JOIN INCASFACT IF ON IF.NrFact = F.NrFact
INNER JOIN INCASARI I ON I.CodInc = IF.CodInc
WHERE DataInc > DATE'2007-04-01'

Afisati datele unice de emitere a facturilor pentru clientul 1003, ordonate cronologic. Utilizati
sinonime locale pentru tabelele implicate
SELECT DISTINCT DataFact
FROM FACTURI F INNER JOIN CLIENTI C ON F.CodCl = C.CodCl
ORDER BY DataFact ASC
JONCTIUNEA UNEI TABELE CU EA INSASI (1)
Ce alte judete se gasesc in aceeasi regiune cu judetul Iasi?

SELECT J2.Judet
FROM JUDETE J1 INNER JOIN JUDETE J2 ON J1.Regiune = J2.Regiune
WHERE J1.Judet= 'Iasi' AND J2.Judet <> 'Iasi'

Care sunt persoanele de contact de la aceeasi firma cu persoana care are CNP-ul CNP1?
SELECT P2.CNP,P2.Nume,P2.Prenume
FROM PERSOANE P1 INNER JOIN PERSCLIENTI PC1 ON P1.CNP = PC1.CNP
INNER JOIN CLIENTI C1 ON PC1.CodCl = C1.CodCl
INNER JOIN CLIENTI C2 ON C1.CodCl = C2.CodCl
INNER JOIN PERSCLIENTI PC2 ON C2.CodCl = PC2. CodCl
INNER JOIN PERSOANE P2 ON PC2.CNP = P2.CNP
WHERE P1.CNP = 'CNP2' AND P2.CNP != 'CNP2'

În ce zile s-au vândut şi produsul cu denumirea “Produs 1” şi cel cu denumirea “Produs 2”


SELECT DISTINCT F1.DataFact
FROM PRODUSE P1
INNER JOIN LINIIFACT LF1 ON P1.CodPr = LF1.CodPr
INNER JOIN FACTURI F1 ON LF1.NrFact = F1.NrFact
INNER JOIN FACTURI F2 ON F1.DataFact=F2.DataFact
INNER JOIN LINIIFACT LF2 ON LF2.NrFact = F2.NrFact
INNER JOIN PRODUSE P2 ON LF2.CodPr = P2.CodPr
WHERE P1.DenPr = 'Produs 1' AND P2.DenPr = 'Produs 2'

FUNCTII DE AGREGARE

GRUPAREA TUPLURILOR

Obtineti situatie a facturilor (NrFact,DataFact) grupate dupa codul clientului. Ordonati lista
crescator dupa codul clientului si descescator dupa data facturii

SELECT CodCl, DataFact, NrFact


FROM FACTURI
GROUP BY CodCl, DataFact, NrFact
ORDER BY 1 ASC, 2 DESC
Aflati numarul de facturi emise fiecarui client
SELECT CodCl,Count(NrFact)
FROM FACTURI
GROUP BY CodCl

Calculati valoarea fiecarei facturi emise clientului 1002


SELECT F.NrFact, SUM(Cantitate*PretUnit)
FROM FACTURI F INNER JOIN LINIIFACT LF ON F.NrFact = LF.NrFact
WHERE F.CodCl = 1002
GROUP BY F.NrFact

Calculati numarul distinct de produse pentru fiecare factura si valoarea medie unitara a acestora.
Redenumiti coloanele calculate si ordonati descrescator dupa valoarea medie.
SELECT F.NrFact, COUNT(DISTINCT CodPr) AS "Numar Produse", AVG(PretUnit) AS
"Valoare medie"
FROM FACTURI F INNER JOIN LINIIFACT LF ON F.NrFact = LF.NrFact
GROUP BY F.NrFact
ORDER BY 3 DESC

Aflati datele distincte in care firma a intocmit facturi cu cel putin 2 produse distincte si cu o
valoare mai mare decat 1000000 clientului 1001. Ordonati cronologic
SELECT DataFact,COUNT(DISTINCT CodPr),SUM(Cantitate*PretUnit)
FROM FACTURI F INNER JOIN LINIIFACT LF ON F.NrFact = LF.NrFact
WHERE F.CodCl = 1001
GROUP BY DataFact
HAVING COUNT(DISTINCT CodPr)>2 AND SUM(Cantitate*PretUnit)>1000000
ORDER BY 1 ASC

S-ar putea să vă placă și