Bună ziua prieteni! în această postare, vom vedea unele dintre cele mai frecvente interogări SQL adresate în interviuri. Aceste întrebări și răspunsuri de interviu de interogare SQL sunt concepute atât pentru proaspeți, cât și pentru cei cu experiență.
De fapt, mi s-au pus cele mai multe dintre aceste întrebări în timpul interviurilor în diferitele faze ale carierei mele.
Dacă doriți să săriți peste întrebările de bază și să începeți cu unele interogări SQL dificile, atunci puteți trece direct la întrebările noastre de interviu cu interogări SQL pentru interviuri pentru cei cu experiență.
Considerați cele două tabele de mai jos ca referință în timp ce încercați să creați interogări pentru întrebările puse aici.
Table – EmployeeDetails
EmpId | FullName | ManagerId | ManagerId | DateOfJoining | City | |
---|---|---|---|---|---|---|
121 | John Snow | 321 | 321 | 01/31/2014 | Toronto | |
321 | Walter White | 986 | 01/30/2015 | 986 | 01/30/2015 | California |
421 | Kuldeep Rana | 876 | 27/11/2016 | New Delhi |
Tabel – SalariuAngajat
EmpId | Proiect | Salariu | Variabilă |
---|---|---|---|
121 | P1 | 8000 | 500 |
321 | P2 | 10000 | 1000 |
421 | P1 | 12000 | 0 |
Pentru confortul dumneavoastră, am compilat pentru dvs. cele mai importante 10 întrebări. Puteți încerca să rezolvați aceste întrebări și să faceți clic pe linkuri pentru a merge la răspunsurile respective.
- Interogare SQL pentru a prelua înregistrări care sunt prezente într-un tabel, dar nu și în alt tabel.
- Interogare SQL pentru a prelua toți angajații care nu lucrează la niciun proiect.
- Interogare SQL pentru a prelua toți angajații din EmployeeDetails care s-au alăturat în anul 2020.
- Căutați toți angajații din EmployeeDetails care au o înregistrare salarială în EmployeeSalary.
- Scrieți o interogare SQL pentru a prelua numărul de angajați în funcție de proiect.
- Căutați numele angajaților și salariul chiar dacă valoarea salariului nu este prezentă pentru angajat.
- Scrieți o interogare SQL pentru a prelua toți angajații care sunt și manageri.
- Scrieți o interogare SQL pentru a prelua înregistrările duplicate din EmployeeDetails.
- Scrieți o interogare SQL pentru a prelua doar rândurile impare din tabel.
- Scrieți o interogare pentru a găsi al treilea cel mai mare salariu dintr-un tabel fără cuvântul cheie top sau limit.
Ou, puteți, de asemenea, să treceți la cele două secțiuni de mai jos privind întrebările de interviu pentru începători și profesioniști cu experiență.
Contenit
Întrebări de interviu pentru interviuri de interogare SQL Query pentru proaspeți
Iată o listă de întrebări și răspunsuri de top pentru interviuri de interogare SQL Query pentru candidații proaspeți, care îi vor ajuta în interviurile lor. În aceste interogări, ne vom concentra doar pe comenzile SQL de bază.
Întrebări.1. Întrebări de interviu SQL. Scrieți o interogare SQL pentru a prelua EmpId și FullName ale tuturor angajaților care lucrează sub Manager cu id – ‘986’.
Ans. Putem folosi tabelul EmployeeDetails pentru a prelua detaliile angajaților cu o clauză where pentru manager-
SELECT EmpId, FullNameFROM EmployeeDetailsWHERE ManagerId = 986;
Întrebări.2Scrieți o interogare SQL pentru a prelua diferitele proiecte disponibile din tabelul EmployeeSalary.
Ans. În timp ce ne referim la tabelul EmployeeSalary, putem vedea că acest tabel conține valori de proiect corespunzătoare fiecărui angajat sau putem spune că vom avea valori de proiect duplicate la selectarea valorilor de proiect din acest tabel.
Deci, vom folosi clauza distinctă pentru a obține valorile unice ale Proiectului.
SELECT DISTINCT(Project)FROM EmployeeSalary;
Întrebări.3. Scrieți o interogare SQL pentru a prelua numărul de angajați care lucrează în proiectul ‘P1’.
Ans. Aici, vom folosi funcția agregată count() cu clauza SQL where-
SELECT COUNT(*) FROM EmployeeSalary WHERE Project = 'P1';
Întrebări.4. 4. Scrieți o interogare SQL pentru a găsi salariul maxim, minim și mediu al angajaților.
Ans. Putem folosi funcția agregată din SQL pentru a prelua valorile maxime, minime și medii-
SELECT Max(Salary), Min(Salary), AVG(Salary) FROM EmployeeSalary;
Ques.5Scrieți o interogare SQL pentru a găsi id-ul angajatului al cărui salariu se află în intervalul 9000 și 15000.
Ans. Aici, putem folosi operatorul „Between” cu o clauză where.
SELECT EmpId, SalaryFROM EmployeeSalaryWHERE Salary BETWEEN 9000 AND 15000;
Întrebări.6. Scrieți o interogare SQL pentru a prelua acei angajați care locuiesc în Toronto și lucrează sub conducerea managerului cu ManagerId – 321.
Ans. Deoarece trebuie să îndeplinim ambele condiții – angajați care locuiesc în „Toronto” și lucrează în proiectul „P2”. Așadar, vom folosi aici operatorul AND-
SELECT EmpId, City, ManagerIdFROM EmployeeDetailsWHERE City='Toronto' AND ManagerId='321';
Întrebare.7. Scrieți o interogare SQL pentru a prelua toți angajații care fie locuiesc în California, fie lucrează sub conducerea unui manager cu ManagerId – 321.
Ans. Această întrebare de interviu ne cere să îndeplinim oricare dintre condiții – angajați care locuiesc în ‘California’ și lucrează sub conducerea unui manager cu ManagerId ‘321’. Așadar, vom folosi aici operatorul OR-
SELECT EmpId, City, ManagerIdFROM EmployeeDetailsWHERE City='California' OR ManagerId='321';
Întrebare.8Scrieți o interogare SQL pentru a prelua toți acei angajați care lucrează în alt proiect decât P1.
Ans. Aici, putem folosi operatorul NOT pentru a prelua rândurile care nu îndeplinesc condiția dată.
SELECT EmpIdFROM EmployeeSalaryWHERE NOT Project='P1';
Sau folosind operatorul not equal to-
SELECT EmpIdFROM EmployeeSalaryWHERE Project <> 'P1';
Pentru diferența dintre operatorii NOT și <> SQL, consultați acest link – Diferența dintre operatorii NOT și !=.
Întrebări.9. scrieți o interogare SQL pentru a afișa salariul total al fiecărui angajat adăugând Salariul cu valoarea Variabila.
Ans. Aici, putem folosi pur și simplu operatorul „+” în SQL.
SELECT EmpId,Salary+Variable as TotalSalary FROM EmployeeSalary;
Întrebare.10Scrieți o interogare SQL pentru a prelua angajații al căror nume începe cu oricare două caractere, urmate de un text „hn” și se termină cu orice secvență de caractere.
Ans. Pentru această întrebare, putem crea o interogare SQL folosind operatorul like cu caracterele wild card „_” și „%”, unde „_” se potrivește cu un singur caracter și „%” se potrivește cu „0 sau mai multe caractere”.
SELECT FullNameFROM EmployeeDetailsWHERE FullName LIKE '__hn%';
Întrebare.11. scrieți o interogare SQL pentru a prelua toate EmpIds care sunt prezente în oricare dintre tabelele – ‘EmployeeDetails’ și ‘EmployeeSalary’.
Ans. Pentru a obține id-uri unice ale angajaților din ambele tabele, putem folosi clauza Union care poate combina rezultatele celor două interogări SQL și poate returna rânduri unice.
SELECT EmpId FROM EmployeeDetailsUNION SELECT EmpId FROM EmployeeSalary;
Ques.12Scrieți o interogare SQL pentru a prelua înregistrări comune între două tabele.
Ans. SQL Server – Utilizarea operatorului INTERSECT-
SELECT * FROM EmployeeSalaryINTERSECTSELECT * FROM ManagerSalary;
MySQL – Deoarece MySQL nu are operatorul INTERSECT, putem utiliza interogarea secundară-
SELECT *FROM EmployeeSalaryWHERE EmpId IN (SELECT EmpId from ManagerSalary);
Ques.13. scrieți o interogare SQL pentru a prelua înregistrări care sunt prezente într-un tabel, dar nu și în alt tabel.
Ans. SQL Server – Utilizarea operatorului MINUS-
SELECT * FROM EmployeeSalaryMINUSSELECT * FROM ManagerSalary;
MySQL – Deoarece MySQL nu are operatorul MINUS deci putem folosi LEFT join-
SELECT EmployeeSalary.*FROM EmployeeSalaryLEFT JOINManagerSalary USING (EmpId)WHERE ManagerSalary.EmpId IS NULL;
Ques.14. scrieți o interogare SQL pentru a prelua EmpIds care sunt prezente în ambele tabele – ‘EmployeeDetails’ și ‘EmployeeSalary.
Ans. folosind subinterogarea-
SELECT EmpId FROM EmployeeDetails where EmpId IN (SELECT EmpId FROM EmployeeSalary);
Ques.15. Scrieți o interogare SQL pentru a prelua EmpIds care sunt prezente în EmployeeDetails dar nu și în EmployeeSalary.
Ans. folosind subinterogarea-
SELECT EmpId FROM EmployeeDetails where EmpId Not IN (SELECT EmpId FROM EmployeeSalary);
Ques.16. scrieți o interogare SQL pentru a prelua numele complete ale angajaților și a înlocui spațiul cu „-„.
Ans. Folosind funcția „Replace” –
SELECT REPLACE(FullName, ' ', '-') FROM EmployeeDetails;
Ques.17. Scrieți o interogare SQL pentru a prelua poziția unui anumit caracter(uri) într-un câmp.
Ans. Folosind funcția „Instr” –
SELECT INSTR(FullName, 'Snow')FROM EmployeeDetails;
Ques.18Scrieți o interogare SQL pentru a afișa atât EmpId, cât și ManagerId împreună.
Ans. Aici putem folosi comanda CONCAT.
SELECT CONCAT(EmpId, ManagerId) as NewIdFROM EmployeeDetails;
Întrebări.19. Scrieți o interogare pentru a prelua numai primul nume (șirul înainte de spațiu) din coloana FullName a tabelului EmployeeDetails.
Ans. În această întrebare, ni se cere să preluăm mai întâi locația caracterului spațiu în câmpul FullName și apoi să extragem primul nume din câmpul FullName.
Pentru a găsi locația vom folosi metoda LOCATE în MySQL și CHARINDEX în SQL SERVER, iar pentru a prelua șirul de caractere înainte de spațiu, vom folosi metoda SUBSTRING SAU MID.
MySQL – folosind MID
SELECT MID(FullName, 1, LOCATE(' ',FullName)) FROM EmployeeDetails;
SQL Server – folosind SUBSTRING
SELECT SUBSTRING(FullName, 1, CHARINDEX(' ',FullName)) FROM EmployeeDetails;
Întrebare.20. scrieți o interogare SQL pentru a scrie cu majuscule numele angajatului și cu minuscule valorile orașului.
Ans. Putem folosi funcțiile SQL Upper și Lower pentru a obține rezultatele dorite.
SELECT UPPER(FullName), LOWER(City) FROM EmployeeDetails;
Ques.21. Scrieți o interogare SQL pentru a afla numărul total de apariții ale unui anumit caracter – „n” în câmpul FullName.
Ans. Aici, putem utiliza funcția „Length”. Putem scădea lungimea totală a câmpului FullName cu o lungime a câmpului FullName după înlocuirea caracterului – ‘n’.
SELECT FullName, LENGTH(FullName) - LENGTH(REPLACE(FullName, 'n', ''))FROM EmployeeDetails;
Ques.22. Scrieți o interogare SQL pentru a actualiza numele angajaților prin eliminarea spațiilor de început și sfârșit.
Ans. Folosind comanda „Update” cu funcția „LTRIM” și „RTRIM”.
UPDATE EmployeeDetails SET FullName = LTRIM(RTRIM(FullName));
Ques.23. Adunați toți angajații care nu lucrează la niciun proiect.
Ans. Aceasta este una dintre întrebările de bază ale interviului în care intervievatorul vrea să vadă dacă persoana cunoaște operatorul utilizat în mod obișnuit – Is NULL.
SELECT EmpId FROM EmployeeSalary WHERE Project IS NULL;
Ques.24. scrieți o interogare SQL pentru a prelua numele angajaților care au un salariu mai mare sau egal cu 5000 și mai mic sau egal cu 10000.
Ans. Aici, vom folosi BETWEEN în clauza ‘where’ pentru a returna EmpId-ul angajaților cu salariul care satisface criteriile cerute și apoi îl vom folosi ca subinterogare pentru a găsi numele complet al angajatului din tabelul EmployeeDetails.
SELECT FullName FROM EmployeeDetails WHERE EmpId IN (SELECT EmpId FROM EmployeeSalary WHERE Salary BETWEEN 5000 AND 10000);
Întrebări.25. Scrieți o interogare SQL pentru a găsi data-timp curent.
Ans. MySQL-
SELECT NOW();
SQL Server-
SELECT getdate();
Oracle-
SELECT SYSDATE FROM DUAL;
Ques.26. scrieți o interogare SQL pentru a prelua toate detaliile angajaților din tabelul EmployeeDetails care s-au alăturat în anul 2020.
Ans. Folosind BETWEEN pentru intervalul de date ’01-01-2020′ AND ’31-12-2020′-
SELECT * FROM EmployeeDetailsWHERE DateOfJoining BETWEEN '2020/01/01'AND '2020/12/31';
De asemenea, putem extrage partea de an din data de alăturare (folosind YEAR în mySQL)-
SELECT * FROM EmployeeDetails WHERE YEAR(DateOfJoining) = '2020';
Ques.27. scrieți o interogare SQL pentru a prelua toate înregistrările angajaților din tabelul EmployeeDetails care au o înregistrare de salariu în tabelul EmployeeSalary.
Ans. Folosind ‘Exists’-
SELECT * FROM EmployeeDetails EWHERE EXISTS(SELECT * FROM EmployeeSalary S WHERE E.EmpId = S.EmpId);
Ques.28. Scrieți o interogare SQL pentru a prelua numărul de angajați în funcție de proiect, sortat în ordine descrescătoare.
Ans. Interogarea are două cerințe – mai întâi să preia numărul de angajați în funcție de proiect și apoi să sorteze rezultatul în funcție de acest număr.
Pentru numărătoarea în funcție de proiect, vom folosi clauza GROUP BY, iar pentru sortare, vom folosi clauza ORDER BY pe aliasul numărătorii proiectului.
SELECT Project, count(EmpId) EmpProjectCountFROM EmployeeSalaryGROUP BY ProjectORDER BY EmpProjectCount DESC;
Întrebare.29. Scrieți o interogare pentru a prelua numele angajaților și înregistrările salariale. Afișați detaliile angajatului chiar dacă înregistrarea salariului nu este prezentă pentru angajat.
Ans. Aceasta este din nou una dintre întrebările de interviu foarte frecvente, în care intervievatorul dorește doar să verifice cunoștințele de bază de SQL JOINS.
Aici, putem folosi left join cu tabelul EmployeeDetail în partea stângă a tabelului EmployeeSalary.
SELECT E.FullName, S.Salary FROM EmployeeDetails E LEFT JOIN EmployeeSalary SON E.EmpId = S.EmpId;
Întrebări.30. Scrieți o interogare SQL pentru a îmbina 3 tabele.
Ans. Având în vedere 3 tabele TableA, TableB și TableC, putem folosi 2 clauze de îmbinare ca mai jos-
SELECT column1, column2FROM TableAJOIN TableB ON TableA.Column3 = TableB.Column3JOIN TableC ON TableA.Column4 = TableC.Column4;
Pentru mai multe întrebări despre îmbinările SQL, puteți, de asemenea, să consultați topul nostru de întrebări de interviu SQL Joins.
Întrebări de interviu pentru interviuri de interogare SQL Query pentru profesioniști cu experiență
Iată o listă cu unele dintre cele mai frecvente întrebări de interviu de interogare SQL Query pentru profesioniști cu experiență. Aceste întrebări acoperă interogări SQL privind conceptele avansate SQL JOIN, preluarea de rânduri duplicate, rânduri pare și impare, al n-lea cel mai mare salariu, etc.
Întrebări. 31. Scrieți o interogare SQL pentru a prelua toți angajații care sunt și manageri din tabelul EmployeeDetails.
Ans. Aici, trebuie să folosim Self-Join deoarece cerința ne cere să analizăm tabelul EmployeeDetails ca două tabele. Vom folosi pseudonime diferite „E” și „M” pentru același tabel EmployeeDetails.
SELECT DISTINCT E.FullNameFROM EmployeeDetails EINNER JOIN EmployeeDetails MON E.EmpID = M.ManagerID;
Pentru a afla mai multe despre Self Join împreună cu mai multe interogări, puteți viziona videoclipul de mai jos care explică conceptul de Self Join într-un mod foarte simplu.
Întrebări.32. Scrieți o interogare SQL pentru a prelua înregistrările duplicate din EmployeeDetails (fără a lua în considerare cheia primară – EmpId).
Ans. Pentru a găsi înregistrările duplicate din tabel, putem folosi GROUP BY pe toate câmpurile și apoi să folosim clauza HAVING pentru a returna numai acele câmpuri al căror număr este mai mare decât 1, adică rândurile care au înregistrări duplicate.
SELECT FullName, ManagerId, DateOfJoining, City, COUNT(*)FROM EmployeeDetailsGROUP BY FullName, ManagerId, DateOfJoining, CityHAVING COUNT(*) > 1;
Ques.33. Scrieți o interogare SQL pentru a elimina dublurile dintr-un tabel fără a utiliza un tabel temporar.
Ans. Aici, putem utiliza ștergerea cu alias și inner join. Vom verifica egalitatea tuturor înregistrărilor care se potrivesc și vom elimina rândul cu EmpId mai mare.
DELETE E1 FROM EmployeeDetails E1INNER JOIN EmployeeDetails E2 WHERE E1.EmpId > E2.EmpId AND E1.FullName = E2.FullName AND E1.ManagerId = E2.ManagerIdAND E1.DateOfJoining = E2.DateOfJoiningAND E1.City = E2.City;
Ques.34. Scrieți o interogare SQL pentru a prelua numai rândurile impare din tabel.
Ans. În cazul în care avem un câmp de autoincrementare, de exemplu EmpId, atunci putem folosi pur și simplu interogarea de mai jos-
SELECT * FROM EmployeeDetails WHERE MOD (EmpId, 2) <> 0;
În cazul în care nu avem un astfel de câmp, atunci putem folosi interogările de mai jos.
Utilizarea Row_number în SQL server și verificarea faptului că restul atunci când este împărțit la 2 este 1-
SELECT E.EmpId, E.Project, E.SalaryFROM ( SELECT *, Row_Number() OVER(ORDER BY EmpId) AS RowNumber FROM EmployeeSalary) EWHERE E.RowNumber % 2 = 1;
Utilizarea unei variabile definite de utilizator în MySQL-
SELECT *FROM ( SELECT *, @rowNumber := @rowNumber+ 1 rn FROM EmployeeSalary JOIN (SELECT @rowNumber:= 0) r ) t WHERE rn % 2 = 1;
Întrebări.35. Scrieți o interogare SQL pentru a prelua doar rândurile pare din tabel.
Ans. În cazul în care avem un câmp cu autoincrementare, de exemplu EmpId, atunci putem folosi pur și simplu interogarea de mai jos-
SELECT * FROM EmployeeDetails WHERE MOD (EmpId, 2) = 0;
În cazul în care nu avem un astfel de câmp, atunci putem folosi interogările de mai jos.
Utilizarea Row_number în SQL server și verificarea faptului că restul când este împărțit la 2 este 1-
SELECT E.EmpId, E.Project, E.SalaryFROM ( SELECT *, Row_Number() OVER(ORDER BY EmpId) AS RowNumber FROM EmployeeSalary) EWHERE E.RowNumber % 2 = 0;
Utilizarea unei variabile definite de utilizator în MySQL-
SELECT *FROM ( SELECT *, @rowNumber := @rowNumber+ 1 rn FROM EmployeeSalary JOIN (SELECT @rowNumber:= 0) r ) t WHERE rn % 2 = 0;
Întrebări.36. Scrieți o interogare SQL pentru a crea un tabel nou cu date și structură copiate de la un alt tabel.
Ans.
CREATE TABLE NewTable SELECT * FROM EmployeeSalary;
Ques.37. Scrieți o interogare SQL pentru a crea un tabel gol cu aceeași structură ca un alt tabel.
Ans. Aici, putem folosi aceeași interogare ca mai sus cu condiția ‘WHERE’ falsă-
CREATE TABLE NewTable SELECT * FROM EmployeeSalary where 1=0;
Ques.38. Scrieți o interogare SQL pentru a prelua primele n înregistrări?
Ans. În MySQL folosind LIMIT-
SELECT *FROM EmployeeSalaryORDER BY Salary DESC LIMIT N;
În SQL server folosind comanda TOP-
SELECT TOP N *FROM EmployeeSalaryORDER BY Salary DESC;
Ques.39. Scrieți o interogare SQL pentru a găsi al n-lea cel mai mare salariu din tabel.
Ans, Folosind cuvântul cheie Top (SQL Server)-
SELECT TOP 1 SalaryFROM ( SELECT DISTINCT TOP N Salary FROM Employee ORDER BY Salary DESC )ORDER BY Salary ASC;
Utilizând clauza limit(MySQL)-
SELECT SalaryFROM EmployeeORDER BY Salary DESC LIMIT N-1,1;
Ques.40. Scrieți o interogare SQL pentru a găsi al treilea cel mai mare salariu dintr-un tabel fără a utiliza cuvântul cheie TOP/limit.
Ans. Aceasta este una dintre cele mai frecvente întrebări de interviu. Pentru aceasta, vom folosi o subinterogare corelată.
Pentru a găsi al 3-lea cel mai mare salariu, vom găsi valoarea salariului până când interogarea interioară returnează un număr de 2 rânduri care au salariul mai mare decât alte salarii distincte.
SELECT SalaryFROM EmployeeSalary Emp1WHERE 2 = ( SELECT COUNT( DISTINCT ( Emp2.Salary ) ) FROM EmployeeSalary Emp2 WHERE Emp2.Salary > Emp1.Salary )
Pentru al n-lea cel mai mare salariu-
SELECT SalaryFROM EmployeeSalary Emp1WHERE N-1 = ( SELECT COUNT( DISTINCT ( Emp2.Salary ) ) FROM EmployeeSalary Emp2 WHERE Emp2.Salary > Emp1.Salary )
Aceasta încheie postul nostru privind întrebările și răspunsurile frecvente la interviurile de interogare SQL. Sper ca aceste întrebări să vă ajute la interviurile pentru baze de date.
Dacă simțiți că, am omis vreuna dintre întrebările frecvente de interviu, atunci anunțați-ne în comentarii și vom adăuga acele întrebări la lista noastră.
Verificați articolul nostru despre – Întrebări de interviu pentru baze de date, care se concentrează pe întrebările teoretice de interviu bazate pe conceptele DBMS și SQL.
Kuldeep este fondatorul și autorul principal al ArtOfTesting. Este expert în automatizarea testelor, testarea performanței, big data și CI-CD. Își aduce deceniul de experiență în rolul său actual, în care se dedică educării profesioniștilor din domeniul QA. Vă puteți conecta cu el pe LinkedIn.
.