Hej venner! i dette indlæg vil vi se nogle af de mest almindelige SQL forespørgsler, der bliver stillet i interviews. Disse SQL query interview spørgsmål og svar er designet til både nyuddannede og erfarne.
Faktisk er jeg blevet stillet de fleste af disse spørgsmål under interviews i de forskellige faser af min karriere.
Hvis du ønsker at springe de grundlæggende spørgsmål over og starte med nogle tricky SQL forespørgsler, så kan du gå direkte videre til vores SQL forespørgsler interviewspørgsmål til den erfarne sektion.
Tænk på de to nedenstående tabeller som reference, mens du forsøger at oprette forespørgsler til de spørgsmål, der stilles her.
Tabel – EmployeeDetails
EmpId | FullName | ManagerId | DateOfJoining | City |
---|---|---|---|---|
121 | John Snow | 321 | 3101/2014 | Toronto |
321 | Walter White | 986 | 3001/2015 | Californien |
421 | Kuldeep Rana | 876 | 27/11/2016 | New Delhi |
Tabel – EmployeeSalary
EmpId | Projekt | Løn | Variabel |
---|---|---|---|
121 | P1 | 8000 | 500 |
321 | P2 | 10000 | 1000 |
421 | P1 | 12000 | 0 |
Til din bekvemmelighed, har jeg samlet de 10 vigtigste spørgsmål til dig. Du kan prøve at løse disse spørgsmål og klikke på linkene for at gå til deres respektive svar.
- SQL Query to fetch records that are present in one table but not in another table.
- SQL query to fetch all the employees who are not working on any project.
- SQL query to fetch all the Employees from EmployeeDetails who joined in the Year 2020.
- Henter alle medarbejdere fra EmployeeDetails, som har en lønpost i EmployeeSalary.
- Skriv en SQL-forespørgsel for at hente projektvis optælling af medarbejdere.
- Henter medarbejdernavne og løn, selv om lønværdien ikke er til stede for medarbejderen.
- Skriv en SQL-forespørgsel for at hente alle medarbejdere, som også er ledere.
- Skriv en SQL-forespørgsel for at hente dubletter fra EmployeeDetails.
- Skriv en SQL-forespørgsel for kun at hente ulige rækker fra tabellen.
- Skriv en forespørgsel for at finde den 3. højeste løn fra en tabel uden top eller limit nøgleord.
Og du kan også springe til vores nedenstående to afsnit om interviewspørgsmål til nyuddannede og erfarne fagfolk.
Indhold
SQL Query Interview Questions for Freshers
Her er en liste over top SQL query interview spørgsmål og svar for fresher kandidater, der vil hjælpe dem i deres interviews. I disse forespørgsler vil vi kun fokusere på de grundlæggende SQL-kommandoer.
Spørgsmål.1. Skriv en SQL forespørgsel for at hente EmpId og FullName for alle de medarbejdere, der arbejder under Manager med id – ‘986’.
Ans. Vi kan bruge tabellen EmployeeDetails til at hente medarbejderoplysningerne med en where-klausul for manager-
SELECT EmpId, FullNameFROM EmployeeDetailsWHERE ManagerId = 986;
Ques.2. Skriv en SQL-forespørgsel for at hente de forskellige projekter, der er tilgængelige fra tabellen EmployeeSalary.
Ans. Når vi henviser til tabellen EmployeeSalary, kan vi se, at denne tabel indeholder projektværdier svarende til hver enkelt medarbejder, eller vi kan sige, at vi vil have dublerede projektværdier, når vi vælger Projektværdier fra denne tabel.
Så vi vil bruge distinct-klausulen til at få de unikke værdier for projektet.
SELECT DISTINCT(Project)FROM EmployeeSalary;
Ques.3. Skriv en SQL forespørgsel for at hente antallet af medarbejdere, der arbejder i projekt ‘P1’.
Ans. Her vil vi bruge aggregatfunktionen count() med SQL where-klausulen-
SELECT COUNT(*) FROM EmployeeSalary WHERE Project = 'P1';
Ques.4. Skriv en SQL-forespørgsel for at finde den maksimale, minimale og gennemsnitlige løn for de ansatte.
Ans. Vi kan bruge aggregatfunktionen i SQL til at hente max-, min- og gennemsnitsværdierne-
SELECT Max(Salary), Min(Salary), AVG(Salary) FROM EmployeeSalary;
Fragt.5. Skriv en SQL-forespørgsel for at finde det medarbejder-id, hvis løn ligger i intervallet 9000 og 15000.
Ans. Her kan vi bruge operatoren ‘Mellem’ med en where-klausul.
SELECT EmpId, SalaryFROM EmployeeSalaryWHERE Salary BETWEEN 9000 AND 15000;
Ques.6. Skriv en SQL-forespørgsel for at hente de medarbejdere, der bor i Toronto og arbejder under leder med ManagerId – 321.
Ans. Da vi skal opfylde begge betingelser – medarbejdere, der bor i ‘Toronto’ og arbejder i projekt ‘P2’ – skal vi opfylde begge betingelser. Så vi vil bruge AND-operatoren her-
SELECT EmpId, City, ManagerIdFROM EmployeeDetailsWHERE City='Toronto' AND ManagerId='321';
Spørgsmål.7. Skriv et SQL-spørgsmål for at hente alle de medarbejdere, der enten bor i Californien eller arbejder under en leder med ManagerId – 321.
Ans. Dette interviewspørgsmål kræver, at vi skal opfylde en af betingelserne – medarbejdere, der bor i ‘Californien’ og arbejder under leder med ManagerId ‘321’. Så vi vil bruge OR-operatoren her-
SELECT EmpId, City, ManagerIdFROM EmployeeDetailsWHERE City='California' OR ManagerId='321';
Spørgsmål.8. Skriv en SQL-forespørgsel for at hente alle de medarbejdere, der arbejder på et andet projekt end P1.
Ans. Her kan vi bruge NOT-operatoren til at hente de rækker, der ikke opfylder den givne betingelse.
SELECT EmpIdFROM EmployeeSalaryWHERE NOT Project='P1';
Og ved hjælp af operatoren not equal to-
SELECT EmpIdFROM EmployeeSalaryWHERE Project <> 'P1';
For forskellen mellem NOT- og <> SQL-operatorer, se dette link – Forskellen mellem NOT- og !=-operatorerne.
Spørgsmål.9. Skriv en SQL forespørgsel for at vise den samlede løn for hver medarbejder ved at tilføje Løn med variabel værdi.
Ans. Her kan vi blot bruge operatoren ‘+’ i SQL.
SELECT EmpId,Salary+Variable as TotalSalary FROM EmployeeSalary;
Frager.10Skriv en SQL-forespørgsel for at hente de medarbejdere, hvis navn begynder med to vilkårlige tegn efterfulgt af teksten “hn” og slutter med en vilkårlig sekvens af tegn.
Ans. Til dette spørgsmål kan vi oprette en SQL-forespørgsel ved hjælp af like-operatoren med ‘_’- og ‘%’-jokertegn, hvor ‘_’ passer til et enkelt tegn og ‘%’ passer til ‘0 eller flere tegn’.
SELECT FullNameFROM EmployeeDetailsWHERE FullName LIKE '__hn%';
Frage.11. skriv en SQL-forespørgsel for at hente alle EmpIds, der findes i en af tabellerne – ‘EmployeeDetails’ og ‘EmployeeSalary’.
Ans. For at få unikke medarbejder-id’er fra begge tabeller kan vi bruge Union-klausulen, som kan kombinere resultaterne af de to SQL-forespørgsler og returnere unikke rækker.
SELECT EmpId FROM EmployeeDetailsUNION SELECT EmpId FROM EmployeeSalary;
Fragt.12. skriv en SQL forespørgsel for at hente fælles poster mellem to tabeller.
Ans. SQL Server – Brug af INTERSECT-operatoren-
SELECT * FROM EmployeeSalaryINTERSECTSELECT * FROM ManagerSalary;
MySQL – Da MySQL ikke har INTERSECT-operatoren, så vi kan bruge underforespørgsel-
SELECT *FROM EmployeeSalaryWHERE EmpId IN (SELECT EmpId from ManagerSalary);
Ques.13. skriv en SQL forespørgsel for at hente poster, der er til stede i en tabel, men ikke i en anden tabel.
Ans. SQL Server – Brug af MINUS-operatoren-
SELECT * FROM EmployeeSalaryMINUSSELECT * FROM ManagerSalary;
MySQL – Da MySQL ikke har MINUS-operatoren, så vi kan bruge LEFT join-
SELECT EmployeeSalary.*FROM EmployeeSalaryLEFT JOINManagerSalary USING (EmpId)WHERE ManagerSalary.EmpId IS NULL;
Ques.14. skriv en SQL forespørgsel for at hente de EmpIds, der er til stede i begge tabeller – ‘EmployeeDetails’ og ‘EmployeeSalary.
Ans. Brug sub query-
SELECT EmpId FROM EmployeeDetails where EmpId IN (SELECT EmpId FROM EmployeeSalary);
Ques.15. skriv en SQL forespørgsel for at hente de EmpIds, der er til stede i EmployeeDetails, men ikke i EmployeeSalary.
Ans. Brug sub query-
SELECT EmpId FROM EmployeeDetails where EmpId Not IN (SELECT EmpId FROM EmployeeSalary);
Ques.16. skriv en SQL forespørgsel for at hente medarbejdernes fulde navne og erstatte mellemrummene med ‘-‘.
Ans. ved hjælp af funktionen ‘Replace’-
SELECT REPLACE(FullName, ' ', '-') FROM EmployeeDetails;
Ques.17. skriv en SQL forespørgsel for at hente positionen af et eller flere givne tegn i et felt.
Ans. ved hjælp af funktionen ‘Instr’-
SELECT INSTR(FullName, 'Snow')FROM EmployeeDetails;
Ques.18. Skriv en SQL forespørgsel for at vise både EmpId og ManagerId sammen.
Ans. Her kan vi bruge CONCAT-kommandoen.
SELECT CONCAT(EmpId, ManagerId) as NewIdFROM EmployeeDetails;
Spørgsmål.19. Skriv en forespørgsel for kun at hente det første navn (streng før mellemrum) fra kolonnen FullName i tabellen EmployeeDetails.
Ans. I dette spørgsmål skal vi først hente placeringen af mellemrumstegnet i feltet FullName og derefter udtrække det første navn fra feltet FullName.
For at finde placeringen skal vi bruge LOCATE-metoden i MySQL og CHARINDEX i SQL SERVER, og for at hente strengen før mellemrum skal vi bruge SUBSTRING ELLER MID-metoden.
MySQL – ved hjælp af MID
SELECT MID(FullName, 1, LOCATE(' ',FullName)) FROM EmployeeDetails;
SQL Server – ved hjælp af SUBSTRING
SELECT SUBSTRING(FullName, 1, CHARINDEX(' ',FullName)) FROM EmployeeDetails;
Spørgsmål.20. skriv en SQL forespørgsel for at skrive medarbejderens navn med store bogstaver og byværdierne med små bogstaver.
Ans. Vi kan bruge SQL Upper og Lower funktionerne til at opnå det ønskede resultat.
SELECT UPPER(FullName), LOWER(City) FROM EmployeeDetails;
Ques.21. Skriv en SQL-forespørgsel for at finde antallet af de samlede forekomster af et bestemt tegn – “n” – i feltet FullName.
Ans. Her kan vi bruge funktionen “Length”. Vi kan subtrahere den samlede længde af FullName-feltet med en længde af FullName efter udskiftning af tegnet – ‘n’.
SELECT FullName, LENGTH(FullName) - LENGTH(REPLACE(FullName, 'n', ''))FROM EmployeeDetails;
Ques.22. Skriv en SQL forespørgsel for at opdatere medarbejdernavnene ved at fjerne ledende og afsluttende mellemrum.
Ans. ved hjælp af kommandoen “Update” med funktionen “LTRIM” og “RTRIM”.
UPDATE EmployeeDetails SET FullName = LTRIM(RTRIM(FullName));
Ques.23. Hent alle de medarbejdere, der ikke arbejder på noget projekt.
Ans. Dette er et af de meget grundlæggende interviewspørgsmål, hvor intervieweren ønsker at se, om personen kender til den almindeligt anvendte – Er NULL-operatoren.
SELECT EmpId FROM EmployeeSalary WHERE Project IS NULL;
Ques.24. Skriv en SQL forespørgsel for at hente medarbejdernavne, der har en løn større end eller lig med 5000 og mindre end eller lig med 10000.
Ans. Her vil vi bruge BETWEEN i ‘where’ klausulen for at returnere EmpId for de medarbejdere med en løn, der opfylder de krævede kriterier, og derefter bruge den som underafspørgsel for at finde medarbejderens fuldeNavn fra tabellen EmployeeDetails.
SELECT FullName FROM EmployeeDetails WHERE EmpId IN (SELECT EmpId FROM EmployeeSalary WHERE Salary BETWEEN 5000 AND 10000);
Ques.25. Skriv en SQL-forespørgsel for at finde den aktuelle dato-tid.
Ans. MySQL-
SELECT NOW();
SQL Server-
SELECT getdate();
Oracle-
SELECT SYSDATE FROM DUAL;
Ques.26. skriv en SQL forespørgsel for at hente alle detaljer om de medarbejdere i tabellen EmployeeDetails, som er tiltrådt i år 2020.
Ans. Brug BETWEEN for datointervallet ’01-01-2020′ OG ’31-12-2020′-
SELECT * FROM EmployeeDetailsWHERE DateOfJoining BETWEEN '2020/01/01'AND '2020/12/31';
Og vi kan også udtrække årsdelen fra tiltrædelsesdatoen (ved hjælp af YEAR i mySQL)-
SELECT * FROM EmployeeDetails WHERE YEAR(DateOfJoining) = '2020';
Spørgsmål.27. Skriv en SQL forespørgsel for at hente alle medarbejderposter fra tabellen EmployeeDetails, der har en lønpost i tabellen EmployeeSalary.
Ans. Brug af ‘Exists’-
SELECT * FROM EmployeeDetails EWHERE EXISTS(SELECT * FROM EmployeeSalary S WHERE E.EmpId = S.EmpId);
Ques.28. Skriv en SQL-forespørgsel for at hente projektvis optælling af medarbejdere sorteret efter projektets antal i faldende rækkefølge.
Ans. Forespørgslen har to krav – først at hente projektvis optælling og derefter at sortere resultatet efter denne optælling.
For projektvis tælling vil vi bruge GROUP BY-klausulen, og til sortering vil vi bruge ORDER BY-klausulen på aliaset for projekt-tælling.
SELECT Project, count(EmpId) EmpProjectCountFROM EmployeeSalaryGROUP BY ProjectORDER BY EmpProjectCount DESC;
Spørgsmål.29. Skriv en forespørgsel for at hente medarbejdernavne og lønposter. Vis medarbejderoplysningerne, selv om lønregistreringen ikke er til stede for medarbejderen.
Ans. Dette er igen et af de meget almindelige interviewspørgsmål, hvor intervieweren blot ønsker at kontrollere den grundlæggende viden om SQL JOINS.
Her kan vi bruge left join med EmployeeDetail tabellen på venstre side af EmployeeSalary tabellen.
SELECT E.FullName, S.Salary FROM EmployeeDetails E LEFT JOIN EmployeeSalary SON E.EmpId = S.EmpId;
Spørgsmål.30. Skriv en SQL forespørgsel for at sammenføje 3 tabeller.
Ans. Med hensyn til 3 tabeller TableA, TableB og TableC kan vi bruge 2 joins klausuler som nedenfor-
SELECT column1, column2FROM TableAJOIN TableB ON TableA.Column3 = TableB.Column3JOIN TableC ON TableA.Column4 = TableC.Column4;
For flere spørgsmål om SQL Joins, kan du også tjekke vores top SQL Joins Interview spørgsmål.
SQL Query Interview Questions for Experienced
Her er en liste over nogle af de hyppigst stillede SQL query interviewspørgsmål til erfarne fagfolk. Disse spørgsmål dækker SQL-forespørgsler om avancerede SQL JOIN-koncepter, hentning af duplikatrækker, ulige og lige rækker, niende højeste løn osv.
Spørgsmål. 31. Skriv en SQL-forespørgsel for at hente alle de medarbejdere, der også er ledere, fra tabellen EmployeeDetails.
Ans. Her skal vi bruge Self-Join, da kravet ønsker, at vi skal analysere tabellen EmployeeDetails som to tabeller. Vi vil bruge forskellige aliaser ‘E’ og ‘M’ for den samme EmployeeDetails-tabel.
SELECT DISTINCT E.FullNameFROM EmployeeDetails EINNER JOIN EmployeeDetails MON E.EmpID = M.ManagerID;
For at lære mere om Self Join sammen med nogle flere forespørgsler kan du se nedenstående video, der forklarer Self Join-konceptet på en meget enkel måde.
Frager.32. Skriv en SQL forespørgsel for at hente dubletter fra EmployeeDetails (uden at tage hensyn til primærnøglen – EmpId).
Ans. For at finde dubletter fra tabellen kan vi bruge GROUP BY på alle felter og derefter bruge HAVING-klausulen til kun at returnere de felter, hvis antal er større end 1, dvs. de rækker, der har dubletter.
SELECT FullName, ManagerId, DateOfJoining, City, COUNT(*)FROM EmployeeDetailsGROUP BY FullName, ManagerId, DateOfJoining, CityHAVING COUNT(*) > 1;
Fragt.33 . Skriv en SQL-forespørgsel for at fjerne dubletter fra en tabel uden at bruge en midlertidig tabel.
Ans. Her kan vi bruge delete med alias og inner join. Vi vil kontrollere for lighed af alle de matchende poster og dem fjerne rækken med højere EmpId.
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. Skriv en SQL-forespørgsel for kun at hente ulige rækker fra tabellen.
Ans. Hvis vi har et felt med automatisk inkrementering, f.eks. EmpId, kan vi blot bruge nedenstående forespørgsel-
SELECT * FROM EmployeeDetails WHERE MOD (EmpId, 2) <> 0;
Hvis vi ikke har et sådant felt, kan vi bruge nedenstående forespørgsler.
Anvendelse af Row_number i SQL-server og kontrol af, at resten, når den er divideret med 2, er 1-
SELECT E.EmpId, E.Project, E.SalaryFROM ( SELECT *, Row_Number() OVER(ORDER BY EmpId) AS RowNumber FROM EmployeeSalary) EWHERE E.RowNumber % 2 = 1;
Anvendelse af en brugerdefineret variabel i MySQL-
SELECT *FROM ( SELECT *, @rowNumber := @rowNumber+ 1 rn FROM EmployeeSalary JOIN (SELECT @rowNumber:= 0) r ) t WHERE rn % 2 = 1;
Spørgsmål.35. Skriv en SQL forespørgsel for kun at hente lige rækker fra tabellen.
Ans. Hvis vi har et felt med automatisk inkrementering, f.eks. EmpId, kan vi blot bruge nedenstående forespørgsel-
SELECT * FROM EmployeeDetails WHERE MOD (EmpId, 2) = 0;
Hvis vi ikke har et sådant felt, kan vi bruge nedenstående forespørgsler.
Anvendelse af Row_number i SQL server og kontrol af, at resten, når den er divideret med 2, er 1-
SELECT E.EmpId, E.Project, E.SalaryFROM ( SELECT *, Row_Number() OVER(ORDER BY EmpId) AS RowNumber FROM EmployeeSalary) EWHERE E.RowNumber % 2 = 0;
Anvendelse af en brugerdefineret variabel i MySQL-
SELECT *FROM ( SELECT *, @rowNumber := @rowNumber+ 1 rn FROM EmployeeSalary JOIN (SELECT @rowNumber:= 0) r ) t WHERE rn % 2 = 0;
Spørgsmål.36. Skriv en SQL-forespørgsel for at oprette en ny tabel med data og struktur kopieret fra en anden tabel.
Ans.
CREATE TABLE NewTable SELECT * FROM EmployeeSalary;
Ques.37. Skriv en SQL-forespørgsel for at oprette en tom tabel med samme struktur som en anden tabel.
Ans. Her kan vi bruge den samme forespørgsel som ovenfor med falsk ‘WHERE’-betingelse-
CREATE TABLE NewTable SELECT * FROM EmployeeSalary where 1=0;
Spørgsmål.38. Skriv en SQL-forespørgsel for at hente de øverste n poster?
Ans. I MySQL ved hjælp af LIMIT-
SELECT *FROM EmployeeSalaryORDER BY Salary DESC LIMIT N;
I SQL-server ved hjælp af TOP-kommando-
SELECT TOP N *FROM EmployeeSalaryORDER BY Salary DESC;
Ques.39. Skriv en SQL forespørgsel for at finde den niende højeste løn fra tabellen.
Ans, Ved hjælp af nøgleordet Top (SQL Server)-
SELECT TOP 1 SalaryFROM ( SELECT DISTINCT TOP N Salary FROM Employee ORDER BY Salary DESC )ORDER BY Salary ASC;
Ved hjælp af limit-klausulen(MySQL)-
SELECT SalaryFROM EmployeeORDER BY Salary DESC LIMIT N-1,1;
Ques.40. Skriv en SQL forespørgsel for at finde den 3. højeste løn fra en tabel uden at bruge nøgleordet TOP/limit.
Ans. Dette er et af de mest almindeligt stillede interviewspørgsmål. Til dette vil vi bruge en korreleret underafspørgsel.
For at finde den 3. højeste løn vil vi finde lønværdien indtil den indre forespørgsel returnerer et antal på 2 rækker, der har lønnen større end andre distinkte lønninger.
SELECT SalaryFROM EmployeeSalary Emp1WHERE 2 = ( SELECT COUNT( DISTINCT ( Emp2.Salary ) ) FROM EmployeeSalary Emp2 WHERE Emp2.Salary > Emp1.Salary )
For nth highest salary-
SELECT SalaryFROM EmployeeSalary Emp1WHERE N-1 = ( SELECT COUNT( DISTINCT ( Emp2.Salary ) ) FROM EmployeeSalary Emp2 WHERE Emp2.Salary > Emp1.Salary )
Dette afslutter vores indlæg om ofte stillede SQL forespørgselsinterviewspørgsmål og svar. Jeg håber, at disse spørgsmål hjælper dig med dine databaseinterviews.
Hvis du føler, at vi har overset nogle af de almindelige interviewspørgsmål, så lad os vide det i kommentarerne, og vi vil tilføje disse spørgsmål til vores liste.
Tjek også vores artikel om – Database Interview Questions, der fokuserer på de teoretiske interviewspørgsmål baseret på DBMS og SQL-koncepter.
Kuldeep er grundlæggeren og hovedforfatteren af ArtOfTesting. Han er dygtig inden for testautomatisering, præstationstest, big data og CI-CD. Han bringer sit årti af erfaring med sig til sin nuværende rolle, hvor han er dedikeret til at uddanne QA-fagfolk. Du kan komme i kontakt med ham på LinkedIn.