Download - Curs SQL Baze de Date

Transcript
  • SGBD Access 2013: SQL: UNIONDac se dorete s se vizualizeze rezultatele mai multor interogri SELECT n acelai timp, prin combinarea ieirilor lor, poate fi utilizat facilitatea UNION a limbajului de interogare SQL. SELECT lista_campuri FROM tabela1 UNION SELECT list_campuri FROM tabela2 [WHERE criterii de selectie] [GROUP BY camp_de_grupare] [HAVING criteriul_de_agregare] [UNION SELECT list_campuri FROM tabela3 [WHERE criterii de selectie] [GROUP BY camp_de_grupare ] [HAVING criteriul_de_grupare]] [UNION...] [ORDER BY camp_criteriu_de_sortare];Tabelele reunite trebuie s aib aceeai structur.

  • SELECT [Cod Fiscal],[Denumire Client],Localitate,Telefon FROM ClientiUNION SELECT [Cod Fiscal],[Denumire Client],Localitate,Telefon FROM [Clienti Arad]ORDER BY Localitate,[Denumire Client];SGBD Access 2013: SQL: UNION

  • TRANSFORM funcie agregat Instruciune de selecie cu grupare pe liniePIVOT cmp antet coloan ;SGBD Access 2013: SQL: CROSSTABCROSSTAB Query furnizeaza rezultatul sub forma matriceala, grupand nregistrrile pe linie i pe coloan .Funcia agregat opereaz asupra nregistrrilor, prin definirea instruciunii de selecie;Instruciunea de selecie servete pentru a specifica antetele de rnd ale rezultatelor interogrii;Cmpul antet coloan constituie cmpul sau expresia ce se utilizeaz n definirea antetelor de coloane, pentru setul de rezultate al interogrii.

  • TRANSFORM Sum([Cantitate]*[Pret f]) SELECT [Denumire Carte]FROM Facturi INNER JOIN (Carti INNER JOIN [Continut Factura] ON Carti.[Cod ISBN] = [Continut Factura].[Cod ISBN]) ON Facturi.[Numar Factura] = [Continut Factura].[Numar Factura]WHERE [Continut Factura].Cantitate>50GROUP BY Carti.[Denumire Carte]PIVOT Month([Data Facturii]);SQL: CROSSTABTRANSFORM funcie agregat Instruciune de selecie cu grupare pe liniePIVOT cmp antet coloan ;S se calculeze suma valoric a vnzrilor de carte pe luni PTR CANT>50

  • SGBD Access 2013: SQL: PARAMETERSSELECT Facturi.[Numar Factura], Carti.[Cod ISBN], Cantitate, [Continut Factura].[Pret f], [Cantitate]*[Pret f] AS Valoare, [Tastati Procent]*[Valoare]/100 AS ReducereFROM Facturi INNER JOIN (Carti INNER JOIN [Continut Factura] ON Carti.[Cod ISBN] = [Continut Factura].[Cod ISBN]) ON Facturi.[Numar Factura] = [Continut Factura].[Numar Factura]WHERE Facturi.[Numar Factura]=[Tastati Nr_Fact]AND Carti.[Cod ISBN]=[Tastati Cod_ISBN];Parameters Nume_parametru1 tip de date (dimensiune),Nume_parametru2 tip de date (dimensiune),.......;Parameters Reducere Percent,Numarfactura LongInteger;

  • SGBD Access 2013: SQL: Manipularea datelor: Interogri cu aciune de CREARE de tabeleSELECT [domeniu] lista_campuriINTO nume tabel nou[FROM nume tabel surs][WHERE criteriu de adugare a nregistrrilor n tabela nou];SELECT [Cod Fiscal], [Denumire Client], Adresa, LocalitateINTO [Clienti din Bucuresti]FROM ClientiWHERE Localitate="Bucuresti";

  • SGBD Access 2013: SQL: Manipularea datelor Interogri cu aciune de ADUGARE de tupluriINSERT INTO nume_tabel (cmp1, cmp2,....)VALUES (valoare_1, valoare_2,.....);INSERT INTO [Clienti Arad] ( [Cod Fiscal], [Denumire Client], Adresa, Localitate )VALUES ("r732469","SoftInfo SA","Str. Narciselor nr.5","Arad");

  • SGBD Access 2013: SQL: Manipularea datelor: Interogri cu aciune de TERGERE de tupluriDELETE *FROM nume_tabel [WHERE criteriu de tergere a nregistrrilor];DELETE *FROM [Clienti Arad]WHERE Telefon IS NULL;

  • SGBD Access 2013: SQL: Manipularea datelor: Interogri cu aciune de MODIFICARE a valorilorUPDATE nume_tabelSET nume_cmp=valoare_1[,nume_cmp=valoare_2]..... [WHERE criteriu de actualizare a valorilor tuplurilor];UPDATE Carti SET [Pret baza] = [Pret baza]*1.15WHERE [Denumire Carte]=Informatica"AND Year([Data Aparitiei])=2007;

  • SQL SubInterogri SELECT n SELECT n .....Restricionarea subinterogrilor Domeniul de obinere a rezultatelor unei subinterogri poate fi influenat prin precizarea unuia din cuvintele cheie: ALL, ANY i respectiv EXISTS . Fiecare predicat (ANY, ALL, EXISTS) poate s fie utilizat i n forma cu negaie NOT Dac n cele mai multe cazuri se compara un atribut (sau rezultatul unei expresii) cu o constant, operatorii ALL, ANY i EXISTS permit compararea valorilor atributului/expresiei cu un set de tupluri ce tocmai a fost extras printr-o subinterogare

  • SQL SubInterogri SELECT n SELECT n .....SELECT denumire FROM Produse WHERE Calitate=1 AND pret< ALL (SELECT pret FROM ProduseWHERE Calitate=2);Restricionarea subinterogrilor prin operatorul ALLPrin ALL se preiau toate rezultatele subinterogrii i, dac acestea ndeplinesc condiia cerut, se returneaz valoarea logic True EXEMPLU: se afieaz numele produselor de calitatea nti pentru care preul este mai mic dect preul tuturor produselor de calitatea a 2-a.

  • SQL SubInterogri SELECT n SELECT n .....SELECT Titlul,Domeniul,AnulAparitiei,Pret FROM CartiWHERE Domeniul= ANY (SELECT Domeniul FROM Carti WHERE Editura=ABC AND AnulAparitiei=2007);Restricionarea subinterogrilor prin operatorul ANYANY/SOME: are n vedere compararea valorii de ieire a subinterogrii cu fiecare nregistrare din interogarea extern. Dac pentru fiecare nregistrare din interogare exist un rezultat al subinterogrii, se va returna valoarea logic True. Cuvntul cheie SOME are acelai rol i caracteristici ca ANY

  • SQL SubInterogri SELECT n SELECT n .....SELECT Titlul, AnulAparitieiFROM CartiWHERE EXISTS (SELECT * FROM Carti WHERE AnulAparitiei< 1999);Restricionarea subinterogrilor prin operatorul EXISTSEXISTS: folosete subinterogarea ca pe o condiie, analiznd setul de rezultate al acesteia i returnnd valoarea False dac nu exist nici o ieire. Se poate astfel verifica existena anumitor nregistrri i controla ansamblul rspunsurilor date de interogare.

  • SQL SubInterogri SELECT n SELECT n .....Restricionarea subinterogrilor agregate prin clauza HAVINGn exemplele clasice, predicatele incluse n clauza HAVING, comparau o expresie cu o constant. n cazul de fa, se vor include n clauza HAVING chiar subinterogri. SELECT [domeniu] list selecie cmpuri i/sau funcii agregateFROM nume tabel WHERE criterii de selectieGROUP BY cmp de grupare HAVING criteriu cmp de grupare > / < / >= /
  • CREATE TABLE nume_tabel ( nume-atribut1 tip_dat(mrime) [NOT NULL] [,nume-atribut2 tip_dat(mrime) [NOT NULL]..][CONSTRAINT nume-atribut CHECK (nume-atribut )][CONSTRAINT nume_index] {PRIMARY KEY|UNIQUE|NOT NULL }]);SGBD Access 2013: SQL: Limbajul de descriere a datelorCREATE TABLE Carti ([Cod ISBN] Text(15) CONSTRAINT [Cod ISBN] Primary Key, [Denumire Carte] Text(50) NOT NULL,[Data Apariiei] Date NOT NULL, [Stocul tiparit] Number,[Pret baza] Currency NOT NULL);

  • ALTER TABLE nume_tabel ADD COLUMN nume-atribut tip_dat(mrime) [NOT NULL] [CONSTRAINT nume-atribut CHECK (nume-atribut )];

    Exemplu de adaugare a unui camp in tabela Carti:ALTER TABLE Carti ADD COLUMN [Nume coordonator lucrare] Text(25) NOT NULL; SGBD Access 2013: SQL: Modificarea structuriiSGBD Access 2013: SQL: tergerea unei tabeleDROP TABLE nume_tabel ;DROP TABLE [Clienti Buzau]; Exemplu de stergere a unui camp din tabela Carti:ALTER TABLE CARTIDROP COLUMN [NUMAR PAGINI];

  • Exemple interogari cu subinterogariS se afieze lista cu cele mai ieftine materiale (se utilizeaz ALL)SELECT Materiale.CodM, Materiale.Nume, Aprov.PretUnitarFROM MATERIALE, APROV WHERE MATERIALE.CodM=APROV.CODM AND Aprov.PretUnitar
  • Care sunt furnizorii a cror nume se regsesc i n tabela Clieni?

    SELECT FURNIZORI.Nume FROM FURNIZORI WHERE FURNIZORI.Nume In (SELECT CLIENTI.NUME FROM CLIENTI);S se diminueze cu 10% preturile unitare din aprovizionrile provenite de la furnizori din Brasov in ultimele 90 de zile (se utilizeaz IN)

    UPDATE APROV SET PretUnitar = [PretUnitar]*0.9WHERE DataAprov>Date()-90AND APROV.CODF IN (SELECT FURNIZORI.CODF FROM FURNIZORI WHERE ORAS="BRASOV");

  • S se tearg din tabela materiale toate materialele din clasa de calitate 1 care au fost aprovizionate de mai puin de 5 ori (se utilizeaz IN) .DELETE *FROM MATERIALEWHERE ClasaCalitate="1" AND Materiale.CodM IN (SELECT APROV.CODM FROM APROV GROUP BY APROV.CODM HAVING COUNT(CODM)