Differences

This shows you the differences between two versions of the page.

Link to this comparison view

bd2:laboratoare:07 [2019/10/12 20:33]
apetrescu0506
bd2:laboratoare:07 [2020/11/19 15:40] (current)
ciprian.truica [Variabile]
Line 1: Line 1:
-====== ​Laborator ​07 - SQLServer ​: Interogari, Variabile si XML ======+====== ​Laboratorul ​07 - SQL Server ​: Interogari, Variabile si XML ======
  
 ===== Conținut ===== ===== Conținut =====
Line 26: Line 26:
 [INTO] -- Putem folosi rezultatul instruțiunii select pentru a popula o tabelă deja existentă [INTO] -- Putem folosi rezultatul instruțiunii select pentru a popula o tabelă deja existentă
 [FROM] -- Sursa sau sursele de date de date [FROM] -- Sursa sau sursele de date de date
-[[CROSS]|[INNER]|[LEFT|RIGHT|FULL OUTER]] JOIN -- Putem folosi mai multe surse de date cu condiții speciale+[[[CROSS]|[INNER]|[LEFT|RIGHT|FULL OUTER]] JOIN-- Putem folosi mai multe surse de date cu condiții speciale
 [WHERE] -- Condițiile de filtrare a datelor deja existente [WHERE] -- Condițiile de filtrare a datelor deja existente
 [GROUP BY] -- Agregarea datelor deja existente până în acest punct [GROUP BY] -- Agregarea datelor deja existente până în acest punct
Line 37: Line 37:
 </​code>​ </​code>​
  
-<color red>Ex. 1</​color>​ Scrieți o clauză T-SQL care întoarce răspunsul la întrebarea:​ De ce nu am folosit litera **N** înainte șirul de caractere constant?+<color red>Ex. 1</​color>​ Scrieți o clauză T-SQL care întoarce răspunsul la întrebarea:​ De ce am folosit litera **N** înainte șirul de caractere constant?
  
 ===== Comentarii ===== ===== Comentarii =====
Line 51: Line 51:
 mod mod
  
-Aici trebuie doar să deschided ​înainte de primul rând  +Aici trebuie doar să deschidem comentariul ​înainte de primul rând  
-și să inchidem ​după ultimul.+și să-l închidem ​după ultimul.
 Nu este nevoie să avem vreun string special pe fiecare rând. Nu este nevoie să avem vreun string special pe fiecare rând.
 */ */
Line 64: Line 64:
 Următoarele 2 clauze sunt echivalente (și generate de SQL Management Studio): Următoarele 2 clauze sunt echivalente (și generate de SQL Management Studio):
  
-{{:​bd2:​laboratoare:​sqlserverlab01ex02a.png?​nolink&​600|}}+{{:​bd2:​laboratoare:​sqlserverlab01ex02a.png?​nolink&​740|}}
  
-{{:​bd2:​laboratoare:​sqlserverlab01ex02b.png?​nolink&​600|}}+{{:​bd2:​laboratoare:​sqlserverlab01ex02b.png?​nolink&​740|}}
  
 Ne lovim de necunoscut, clauza **TOP**, care reduce numărul de linii returnate la **minimumul(numărul specificat, câte rezultate sunt într-adevăr)**. Aceasta nu are nevoie în mod deosebit de **(paranteze rotunde)** pentru a delimita numărul dar ne este mai ușor să ne dăm seama când avem de aface și cu constante. ​ Ne lovim de necunoscut, clauza **TOP**, care reduce numărul de linii returnate la **minimumul(numărul specificat, câte rezultate sunt într-adevăr)**. Aceasta nu are nevoie în mod deosebit de **(paranteze rotunde)** pentru a delimita numărul dar ne este mai ușor să ne dăm seama când avem de aface și cu constante. ​
Line 74: Line 74:
 </​note>​ </​note>​
  
-Alias-urile sunt un mod de a oferi un nume unei coloane (câteodata este obigatoriu să avem unul, vom vedea asta). Dacă dorim să avem spațiu ​în pentru un alias este nevoie să folosim (N)VARCHAR. Un ALIAS se poate folsi astfel:+Alias-urile sunt un mod de a oferi un nume unei coloane (câteodata este obigatoriu să avem unul, vom vedea asta). Dacă dorim să avem spațiu pentru un alias este nevoie să folosim (N)VARCHAR. Un ALIAS se poate folsi astfel:
 <code sql> <code sql>
-SELECT ​ 'Un Alias poate fi sepcificat ​în acest mod' ​ [Modul1]--Cu sau fără spațiu/​Paranteze Drepte+SELECT ​ 'Un Alias poate fi specificat ​în acest mod' ​ [Modul1]--Cu sau fără spațiu/​Paranteze Drepte
  
 ,'Sau așa' ​ AS  'Modul 2' ,'Sau așa' ​ AS  'Modul 2'
Line 97: Line 97:
 Produsul cartezian se poate genera în următorul mod: Produsul cartezian se poate genera în următorul mod:
  
-{{:​bd2:​laboratoare:​sqlserverlab01ex030.png?​nolink&​600|}}+{{:​bd2:​laboratoare:​sqlserverlab01ex030.png?​nolink&​740|}}
  
 Aici pentru fiecare angajat am adus fiecare manager, ne-am dori să aducem doar managerul lui așa că vom scrie un (SELF) **INNER JOIN** în 2 moduri: Aici pentru fiecare angajat am adus fiecare manager, ne-am dori să aducem doar managerul lui așa că vom scrie un (SELF) **INNER JOIN** în 2 moduri:
  
-{{:​bd2:​laboratoare:​sqlserverlab01ex03a.png?​nolink&​600|}}+{{:​bd2:​laboratoare:​sqlserverlab01ex03a.png?​nolink&​740|}}
  
-{{:​bd2:​laboratoare:​sqlserverlab01ex03b.png?​nolink&​600|}}+{{:​bd2:​laboratoare:​sqlserverlab01ex03b.png?​nolink&​740|}}
  
 <​note>​ <​note>​
-Duă cum puteți observa, cuvântul **INNER** poate să lipsească cu desăvârșire. Același lucru se aplică și pentru clauza **OUTER**, fiind nevoie doar de **LEFT**, **RIGHT** sau  **FULL**.+După cum puteți observa, cuvântul **INNER** poate să lipsească cu desăvârșire. Același lucru se aplică și pentru clauza **OUTER**, fiind nevoie doar de **LEFT**, **RIGHT** sau  **FULL**.
 </​note>​ </​note>​
  
Line 115: Line 115:
 Exemplu: Exemplu:
  
-{{:​bd2:​laboratoare:​sqlserverlab01ex04.png?​nolink&​600|}}+{{:​bd2:​laboratoare:​sqlserverlab01ex04.png?​nolink&​740|}}
  
 <color red>Ex. 4</​color>​ Aceeași problemă ca mai sus. Se rezolvă la fel? Rescrieți clauza, în mod corect și complet, fără CTE. <color red>Ex. 4</​color>​ Aceeași problemă ca mai sus. Se rezolvă la fel? Rescrieți clauza, în mod corect și complet, fără CTE.
Line 129: Line 129:
  
 ==== Grupări, Agregate și HAVING ==== ==== Grupări, Agregate și HAVING ====
-Avem o mulțime de funcții de agregare predefinite pe care le găsiți [aici](https://​docs.microsoft.com/​en-us/​sql/​t-sql/​functions/​aggregate-functions-transact-sql?​view=sql-server-2017). Pe lângă aceste funcții mai sunt și cele fare funcționează DOAR când apare clauza **GROUP BY**.+Avem o mulțime de funcții de agregare predefinite pe care le găsiți [[https://​docs.microsoft.com/​en-us/​sql/​t-sql/​functions/​aggregate-functions-transact-sql?​view=sql-server-ver15|aici]]. Pe lângă aceste funcții mai sunt și cele fare funcționează DOAR când apare clauza **GROUP BY**.
  
 Gruparea este la fel ca și în celelate limbaje de tip SQL: dispare noțiunea de individ și apre noțiunea de întreg. Pentru a filtra, în acest caz, se folosește **HAVING** care se referă la proprietățile unui grup. Se pot folosi funcții și în acest caz. Gruparea este la fel ca și în celelate limbaje de tip SQL: dispare noțiunea de individ și apre noțiunea de întreg. Pentru a filtra, în acest caz, se folosește **HAVING** care se referă la proprietățile unui grup. Se pot folosi funcții și în acest caz.
Line 135: Line 135:
 Exemplu: Exemplu:
  
-{{:​bd2:​laboratoare:​sqlserverlab01ex06.png?​nolink&​600|}}+{{:​bd2:​laboratoare:​sqlserverlab01ex06.png?​nolink&​740|}}
  
-<color red>Ex. 6</​color>​ Dorim să îmbunătățim clauza prin adăugarea unei coloane în care vom preciza numele managerilor din acel departament. (**HINT: SUBCLAUZE**)+<color red>Ex. 6</​color>​ Dorim să îmbunătățim clauza prin adăugarea unei coloane în care vom preciza numele managerilor din acel departament. (**HINT: SUBCLAUZE**)
  
 ==== ORDER BY ==== ==== ORDER BY ====
Line 164: Line 164:
 -- Ordinea este vitală, de aici parantezele -- Ordinea este vitală, de aici parantezele
 ( (
- +  ​
- SELECT 'Ana are Mere'​ +    SELECT 'Ana are Mere'​ 
-  +    UNION 
- UNION +    SELECT 'Dar are si Pere'​ 
-  +  
- SELECT 'Dar are si Pere'​ +  EXCEPT 
- +  
-  +    SELECT 'Ana nu are Mere'​ 
- EXCEPT +  
-  +)
- +
- SELECT 'Ana nu are Mere'​ +
- +
- ) +
 INTERSECT INTERSECT
- 
 ( (
- SELECT 'Ana are Mere'​ +  ​SELECT 'Ana are Mere'​ 
- )+)
 </​code>​ </​code>​
  
Line 197: Line 191:
  
 ===== Exercițiu final Clauze ===== ===== Exercițiu final Clauze =====
-Scrieți o clauză care pentru ficare departament în care deviația standard a grilei salariale este între 1 și 1.5 obține următoarele:​+<color red>Ex. 8. </​color> ​Scrieți o clauză care pentru ficare departament în care deviația standard a grilei salariale este între 1 și 1.5 obține următoarele:​
 - Numele departamentului - Numele departamentului
 - Numele angajaților din acel departament - Numele angajaților din acel departament
Line 218: Line 212:
 -- Se poate seta ca rezultat al unei clauze, oricare ar fi el -- Se poate seta ca rezultat al unei clauze, oricare ar fi el
 SELECT TOP 1 @VAR_WITH_VALUE = N'Se știe' SELECT TOP 1 @VAR_WITH_VALUE = N'Se știe'
-FROM [BD2].[dbo].[EMPLOYEE];+FROM [hr].[dbo].[EMPLOYEES];
  
 -- Putem afișa valoare unei variabile -- Putem afișa valoare unei variabile
Line 237: Line 231:
 Exemplu Creare XML din Tabele: Exemplu Creare XML din Tabele:
  
-{{:​bd2:​laboratoare:​sqlserverlab01ex070.png?​nolink&​600|}}+{{:​bd2:​laboratoare:​sqlserverlab01ex070.png?​nolink&​740|}}
  
 <color red>​Întrebare 1</​color>​ Ce face această clauză, dacă ignorăm partea de XML? <color red>​Întrebare 1</​color>​ Ce face această clauză, dacă ignorăm partea de XML?
Line 244: Line 238:
 Putem să interogăm conținutul unui XML pentru a obține date tabelare. În exemplul de mai jos vom lua XML-ul generat anterior și ne vom folosi doar de primul nivel pentru a obține datele legate direct de angajat. Putem să interogăm conținutul unui XML pentru a obține date tabelare. În exemplul de mai jos vom lua XML-ul generat anterior și ne vom folosi doar de primul nivel pentru a obține datele legate direct de angajat.
  
-{{:​bd2:​laboratoare:​sqlserverlab01ex080.png?​nolink&​600|}}+{{:​bd2:​laboratoare:​sqlserverlab01ex080.png?​nolink&​740|}}
  
 ==== Din XML în tabele ==== ==== Din XML în tabele ====
-Putem să revenim din XML înapoi la o tabelă (dacă ne permite structura) folosind operatorul **OUTER ​ APPLY**, despre care puteți să citiți mai multe [aici](https://​docs.microsoft.com/​en-us/​sql/​t-sql/​queries/​from-transact-sql?​view=sql-server-2017), dar el aplică anumite operațiuni pe TABELE, mai exact ce este în stânga lui și ce este în dreapta lui, la fel ca și **JOIN**. În exemplul de mai jos puteți să vedeți cum refacem datele tabelare transformate în XML.+Putem să revenim din XML înapoi la o tabelă (dacă ne permite structura) folosind operatorul **OUTER ​ APPLY**, despre care puteți să citiți mai multe [[https://​docs.microsoft.com/​en-us/​sql/​t-sql/​queries/​from-transact-sql?​view=sql-server-ver15|aici]], dar el aplică anumite operațiuni pe TABELE, mai exact ce este în stânga lui și ce este în dreapta lui, la fel ca și **JOIN**. În exemplul de mai jos puteți să vedeți cum refacem datele tabelare transformate în XML.
  
-{{:​bd2:​laboratoare:​sqlserverlab01ex090.png?​nolink&​600|}}+{{:​bd2:​laboratoare:​sqlserverlab01ex090.png?​nolink&​740|}}
  
 <color red>​Întrebare 2</​color>​ Ce credeți că returnează clauza dacă stricăm ordinea/​nodurile?​ <color red>​Întrebare 2</​color>​ Ce credeți că returnează clauza dacă stricăm ordinea/​nodurile?​
bd2/laboratoare/07.1570901616.txt.gz · Last modified: 2019/10/12 20:33 by apetrescu0506
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0