Facebook Twitter WhatsApp LinkedIn Pinterest

Hej vänner! i det här inlägget kommer vi att se några av de vanligaste SQL-förfrågningarna som ställs i intervjuer. Dessa SQL query intervjufrågor och svar är utformade för både nybörjare och erfarna.
I själva verket har jag fått de flesta av dessa frågor under intervjuer i olika faser av min karriär.

Om du vill hoppa över de grundläggande frågorna och börja med några knepiga SQL-frågor så kan du direkt gå vidare till vår sektion med intervjufrågor om SQL-frågor för erfarna.

Konsultera nedanstående två tabeller som referens när du försöker skapa frågor för de frågor som ställs här.

Tabell – EmployeeDetails

.

EmpId FullName ManagerId DateOfJoining City
121 John Snow 321 3101/2014 Toronto
321 Walter White 986 3001/2015 Kalifornien
421 Kuldeep Rana 876 27/11/2016 New Delhi

Tabell – EmployeeSalary

EmpId Project Salary Variable
121 P1 8000 500
321 P2 10000 1000
421 P1 12000 0

För din bekvämlighet, har jag sammanställt de tio viktigaste frågorna för dig. Du kan försöka lösa frågorna och klicka på länkarna för att komma till respektive svar.

  1. SQL-förfrågan för att hämta poster som finns i en tabell men inte i en annan tabell.
  2. SQL-förfrågan för att hämta alla anställda som inte arbetar med något projekt.
  3. SQL-förfrågan för att hämta alla anställda från EmployeeDetails som började under år 2020.
  4. Hämta alla anställda från EmployeeDetails som har en lönepost i EmployeeSalary.
  5. Skriv en SQL-fråga för att hämta antalet anställda per projekt.
  6. Hämta anställdas namn och lön även om lönevärdet inte finns för den anställde.
  7. Skriv en SQL-fråga för att hämta alla anställda som också är chefer.
  8. Skriv en SQL-fråga för att hämta dubbla poster från EmployeeDetails.
  9. Skriv en SQL-fråga för att hämta endast udda rader från tabellen.
  10. Skriv en fråga för att hitta den 3:e högsta lönen från en tabell utan nyckelordet top eller limit.

Och du kan även hoppa vidare till våra två nedanstående avsnitt med intervjufrågor för nybörjare och erfarna proffs.

Innehåll

Intervjufrågor om SQL-frågor för nybörjare

Här är en lista med de bästa intervjufrågorna om SQL-frågor och svaren för nybörjarkandidater som kommer att hjälpa dem i sina intervjuer. I dessa frågor kommer vi endast att fokusera på de grundläggande SQL-kommandona.

Frågor.1. Skriv en SQL-fråga för att hämta EmpId och FullName för alla anställda som arbetar under Manager med id – ”986”.
Ans. Vi kan använda tabellen EmployeeDetails för att hämta uppgifter om anställda med en where-klausul för manager-

SELECT EmpId, FullNameFROM EmployeeDetailsWHERE ManagerId = 986;

Ques.2.Skriv en SQL-fråga för att hämta de olika projekt som finns i tabellen EmployeeSalary.
Ans. När vi hänvisar till tabellen EmployeeSalary kan vi se att den här tabellen innehåller projektvärden som motsvarar varje anställd, eller vi kan säga att vi kommer att få dubbla projektvärden när vi väljer projektvärden från den här tabellen.
Så vi kommer att använda distinkt-klausulen för att få fram de unika värdena för projektet.

SELECT DISTINCT(Project)FROM EmployeeSalary;

Ques.3. Skriv en SQL-fråga för att hämta antalet anställda som arbetar i projekt ”P1”.
Ans. Här kommer vi att använda den aggregerade funktionen count() med SQL where-klausulen-

SELECT COUNT(*) FROM EmployeeSalary WHERE Project = 'P1';

Ques.4.Skriv en SQL-fråga för att hitta den högsta, lägsta och genomsnittliga lönen för de anställda.
Ans. Vi kan använda SQL:s aggregeringsfunktion för att hämta de högsta, lägsta och genomsnittliga värdena-

SELECT Max(Salary), Min(Salary), AVG(Salary) FROM EmployeeSalary;

Frågor.5. Skriv en SQL-fråga för att hitta den anställdes id vars lön ligger inom intervallet 9000 och 15000.
Ans. Här kan vi använda operatören ”Between” med en where-klausul.

SELECT EmpId, SalaryFROM EmployeeSalaryWHERE Salary BETWEEN 9000 AND 15000;

Ques.6. Skriv en SQL-fråga för att hämta de anställda som bor i Toronto och som arbetar under en chef med ManagerId – 321.
Ans. Eftersom vi måste uppfylla båda villkoren – anställda som bor i ”Toronto” och som arbetar i projekt ”P2”. Så vi kommer att använda AND-operatören här-

SELECT EmpId, City, ManagerIdFROM EmployeeDetailsWHERE City='Toronto' AND ManagerId='321';

Frågor.7. Skriv en SQL-fråga för att hämta alla anställda som antingen bor i Kalifornien eller arbetar under en chef med ManagerId – 321.
Ans. Denna intervjufråga kräver att vi ska uppfylla ett av villkoren – anställda som bor i ”Kalifornien” och arbetar under en chef med ManagerId ”321”. Vi kommer alltså att använda OR-operatören här-

SELECT EmpId, City, ManagerIdFROM EmployeeDetailsWHERE City='California' OR ManagerId='321';

Frågor.8Skriv en SQL-fråga för att hämta alla anställda som arbetar på ett annat projekt än P1.
Ans. Här kan vi använda operatorn NOT för att hämta de rader som inte uppfyller det givna villkoret.

SELECT EmpIdFROM EmployeeSalaryWHERE NOT Project='P1';

Och använda operatorn not equal to-

SELECT EmpIdFROM EmployeeSalaryWHERE Project <> 'P1';

För skillnaden mellan operatorerna NOT och <> SQL-operatörerna, se den här länken – Skillnaden mellan operatorerna NOT och !.=.

Frågor.9Skriv en SQL-fråga för att visa den totala lönen för varje anställd genom att lägga till Lön med variabelt värde.
Ans. Här kan vi helt enkelt använda operatören ”+” i SQL.

SELECT EmpId,Salary+Variable as TotalSalary FROM EmployeeSalary;

Frågor.10Skriv en SQL-fråga för att hämta de anställda vars namn börjar med två valfria tecken, följt av texten ”hn” och slutar med en valfri sekvens av tecken.
Ans. För den här frågan kan vi skapa en SQL-fråga med hjälp av like-operatorn med jokertecken ”_” och ”%”, där ”_” matchar ett enskilt tecken och ”%” matchar ”0 eller flera tecken”.

SELECT FullNameFROM EmployeeDetailsWHERE FullName LIKE '__hn%';

Frågor.11Skriv en SQL-fråga för att hämta alla EmpIds som finns i någon av tabellerna – ”EmployeeDetails” och ”EmployeeSalary”.
Ans. För att få fram unika medarbetar-id från båda tabellerna kan vi använda unionsklausulen som kan kombinera resultaten från de två SQL-frågorna och återge unika rader.

SELECT EmpId FROM EmployeeDetailsUNION SELECT EmpId FROM EmployeeSalary;

Ques.12Skriv en SQL-fråga för att hämta gemensamma poster mellan två tabeller.
Ans. SQL Server – Använda INTERSECT-operatorn-

SELECT * FROM EmployeeSalaryINTERSECTSELECT * FROM ManagerSalary;

MySQL – Eftersom MySQL inte har INTERSECT-operatorn kan vi använda en underfråga-

SELECT *FROM EmployeeSalaryWHERE EmpId IN (SELECT EmpId from ManagerSalary);

Ques.13Skriv en SQL-fråga för att hämta poster som finns i en tabell men inte i en annan tabell.
Ans. SQL Server – Användning av MINUS-operatören-

SELECT * FROM EmployeeSalaryMINUSSELECT * FROM ManagerSalary;

MySQL – Eftersom MySQL inte har MINUS-operatorn kan vi använda LEFT join-

SELECT EmployeeSalary.*FROM EmployeeSalaryLEFT JOINManagerSalary USING (EmpId)WHERE ManagerSalary.EmpId IS NULL;

Ques.14Skriv en SQL-fråga för att hämta de EmpIds som finns i båda tabellerna – ”EmployeeDetails” och ”EmployeeSalary.
Ans. Använd underfråga-

SELECT EmpId FROM EmployeeDetails where EmpId IN (SELECT EmpId FROM EmployeeSalary);

Ques.15. Skriv en SQL-fråga för att hämta de EmpIds som finns i EmployeeDetails men inte i EmployeeSalary.
Ans. Använd underfråga-

SELECT EmpId FROM EmployeeDetails where EmpId Not IN (SELECT EmpId FROM EmployeeSalary);

Ques.16Skriv en SQL-fråga för att hämta de anställdas fullständiga namn och ersätta mellanslag med ”-”.
Ans. Med hjälp av ”Replace”-funktionen-

SELECT REPLACE(FullName, ' ', '-') FROM EmployeeDetails;

Ques.17. Skriv en SQL-fråga för att hämta positionen för ett eller flera givna tecken i ett fält.
Ans. Med hjälp av ”Instr”-funktionen-

SELECT INSTR(FullName, 'Snow')FROM EmployeeDetails;

Ques.18Skriv en SQL-fråga för att visa både EmpId och ManagerId tillsammans.
Ans. Här kan vi använda kommandot CONCAT.

SELECT CONCAT(EmpId, ManagerId) as NewIdFROM EmployeeDetails;

Ques.19. Skriv en fråga för att hämta endast det första namnet (sträng före mellanslag) från kolumnen FullName i tabellen EmployeeDetails.
Ans. I den här frågan måste vi först hämta mellanslagets plats i fältet FullName och sedan extrahera det första namnet från fältet FullName.
För att hitta platsen använder vi metoden LOCATE i MySQL och CHARINDEX i SQL SERVER och för att hämta strängen före mellanslag använder vi metoden SUBSTRING OR MID.
MySQL – använder MID

SELECT MID(FullName, 1, LOCATE(' ',FullName)) FROM EmployeeDetails;

SQL Server – använder SUBSTRING

SELECT SUBSTRING(FullName, 1, CHARINDEX(' ',FullName)) FROM EmployeeDetails;

Skriftsfråga.20. skriv en SQL-fråga för att skriva namnet på den anställde med stor bokstavsbeteckning och stadsvärdena med liten bokstavsbeteckning.
Ans. Vi kan använda SQL-funktionerna Upper och Lower för att uppnå det avsedda resultatet.

SELECT UPPER(FullName), LOWER(City) FROM EmployeeDetails;

Ques.21. Skriv en SQL-fråga för att hitta antalet totala förekomster av ett visst tecken – ”n” – i fältet FullName.
Ans. Här kan vi använda funktionen ”Length”. Vi kan subtrahera den totala längden på fältet FullName med en längd på FullName efter att ha ersatt tecknet – ’n’.

SELECT FullName, LENGTH(FullName) - LENGTH(REPLACE(FullName, 'n', ''))FROM EmployeeDetails;

Ques.22. Skriv en SQL-fråga för att uppdatera de anställdas namn genom att ta bort inledande och avslutande blanksteg.
Ans. Använd kommandot ”Update” med funktionerna ”LTRIM” och ”RTRIM”.

UPDATE EmployeeDetails SET FullName = LTRIM(RTRIM(FullName));

Ques.23. Hämta alla anställda som inte arbetar med något projekt.
Ans. Detta är en av de mycket grundläggande intervjufrågorna där intervjuaren vill se om personen känner till den vanligaste – Is NULL-operatören.

SELECT EmpId FROM EmployeeSalary WHERE Project IS NULL;

Ques.24.Skriv en SQL-fråga för att hämta namn på anställda med en lön som är större än eller lika med 5000 och mindre än eller lika med 10000.
Ans. Här kommer vi att använda BETWEEN i ”where”-klausulen för att återge EmpId för de anställda med en lön som uppfyller de nödvändiga kriterierna och sedan använda den som en underfråga för att hitta den anställdes fullständiga namn från tabellen EmployeeDetails.

SELECT FullName FROM EmployeeDetails WHERE EmpId IN (SELECT EmpId FROM EmployeeSalary WHERE Salary BETWEEN 5000 AND 10000);

Ques.25. Skriv en SQL-fråga för att hitta aktuell datum-tid.
Ans. MySQL-

SELECT NOW();

SQL Server-

SELECT getdate();

Oracle-

SELECT SYSDATE FROM DUAL;

Ques.26Skriv en SQL-fråga för att hämta alla uppgifter om anställda från tabellen EmployeeDetails som anslöt sig år 2020.
Ans. Använd BETWEEN för datumintervallet ”01-01-2020′ OCH ”31-12-2020′-

SELECT * FROM EmployeeDetailsWHERE DateOfJoining BETWEEN '2020/01/01'AND '2020/12/31';

Och vi kan extrahera årsdelen från anslutningsdatumet (med hjälp av YEAR i mySQL)-

SELECT * FROM EmployeeDetails WHERE YEAR(DateOfJoining) = '2020';

Ques.27. Skriv en SQL-fråga för att hämta alla anställdas poster från tabellen EmployeeDetails som har en lönepost i tabellen EmployeeSalary.
Användning av ”Exists”-

SELECT * FROM EmployeeDetails EWHERE EXISTS(SELECT * FROM EmployeeSalary S WHERE E.EmpId = S.EmpId);

Ques.28. Skriv en SQL-fråga för att hämta antalet anställda per projekt sorterat efter projektets antal i fallande ordning.
Ans. Frågan har två krav – först att hämta antalet anställda per projekt och sedan att sortera resultatet efter detta antal.
För projektvis räkning kommer vi att använda GROUP BY-klausulen och för sortering kommer vi att använda ORDER BY-klausulen på aliaset för project-count.

SELECT Project, count(EmpId) EmpProjectCountFROM EmployeeSalaryGROUP BY ProjectORDER BY EmpProjectCount DESC;

Ques.29. Skriv en fråga för att hämta namn på anställda och löneposter. Visa uppgifterna om den anställde även om det inte finns någon lönepost för den anställde.
Ans. Detta är återigen en av de mycket vanliga intervjufrågorna där intervjuaren bara vill kontrollera de grundläggande kunskaperna om SQL JOINS.
Här kan vi använda left join med tabellen EmployeeDetail på vänster sida av tabellen EmployeeSalary.

SELECT E.FullName, S.Salary FROM EmployeeDetails E LEFT JOIN EmployeeSalary SON E.EmpId = S.EmpId;

Frågor.30. Skriv en SQL-fråga för att sammanfoga 3 tabeller.
Ans. Med tanke på 3 tabeller TableA, TableB och TableC kan vi använda 2 join-klausuler som nedan-

SELECT column1, column2FROM TableAJOIN TableB ON TableA.Column3 = TableB.Column3JOIN TableC ON TableA.Column4 = TableC.Column4;

För fler frågor om SQL-hopfogningar kan du också kolla in våra bästa intervjufrågor om SQL-hopfogningar.

Intervjufrågor om SQL Query för erfarna

Här är en lista över några av de vanligaste frågorna om SQL Query-intervjuer för erfarna yrkesverksamma. Dessa frågor omfattar SQL-frågor om avancerade SQL JOIN-koncept, hämtning av dubbla rader, udda och jämna rader, den nionde högsta lönen etc.

Frågor. 31. Skriv en SQL-fråga för att hämta alla anställda som också är chefer från tabellen EmployeeDetails.
Ans. Här måste vi använda Self-Join eftersom kravet vill att vi ska analysera tabellen EmployeeDetails som två tabeller. Vi kommer att använda olika alias ”E” och ”M” för samma tabell EmployeeDetails.

SELECT DISTINCT E.FullNameFROM EmployeeDetails EINNER JOIN EmployeeDetails MON E.EmpID = M.ManagerID;

För att lära dig mer om Self Join tillsammans med några fler frågor kan du titta på nedanstående video som förklarar Self Join-konceptet på ett mycket enkelt sätt.

Self Join och dess demonstration

Ques.32. Skriv en SQL-fråga för att hämta dubbla poster från EmployeeDetails (utan att ta hänsyn till primärnyckeln – EmpId).
Ans. För att hitta dubbla poster från tabellen kan vi använda GROUP BY för alla fält och sedan använda HAVING-klausulen för att endast returnera de fält vars antal är större än 1, dvs. de rader som har dubbla poster.

SELECT FullName, ManagerId, DateOfJoining, City, COUNT(*)FROM EmployeeDetailsGROUP BY FullName, ManagerId, DateOfJoining, CityHAVING COUNT(*) > 1;

Ques.33. Skriv en SQL-fråga för att ta bort dubbletter från en tabell utan att använda en temporär tabell.
Ans. Här kan vi använda delete med alias och inner join. Vi kontrollerar om alla matchande poster är lika och tar sedan bort raden med högre 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-fråga för att hämta endast udda rader från tabellen.
Ans. Om vi har ett automatiskt ökande fält, t.ex. EmpId, kan vi helt enkelt använda nedanstående fråga-

SELECT * FROM EmployeeDetails WHERE MOD (EmpId, 2) <> 0;

Om vi inte har ett sådant fält kan vi använda nedanstående frågor.
Använda Row_number i SQL server och kontrollera att återstoden när den divideras med 2 är 1-

SELECT E.EmpId, E.Project, E.SalaryFROM ( SELECT *, Row_Number() OVER(ORDER BY EmpId) AS RowNumber FROM EmployeeSalary) EWHERE E.RowNumber % 2 = 1;

Använda en användardefinierad variabel i MySQL-

SELECT *FROM ( SELECT *, @rowNumber := @rowNumber+ 1 rn FROM EmployeeSalary JOIN (SELECT @rowNumber:= 0) r ) t WHERE rn % 2 = 1;

Fråga.35. Skriv en SQL-fråga för att hämta endast jämna rader från tabellen.
Ans. Om vi har ett automatiskt ökande fält, t.ex. EmpId, kan vi helt enkelt använda nedanstående fråga-

SELECT * FROM EmployeeDetails WHERE MOD (EmpId, 2) = 0;

Om vi inte har ett sådant fält kan vi använda nedanstående frågor.
Använda Row_number i SQL server och kontrollera att återstoden när den divideras med 2 är 1-

SELECT E.EmpId, E.Project, E.SalaryFROM ( SELECT *, Row_Number() OVER(ORDER BY EmpId) AS RowNumber FROM EmployeeSalary) EWHERE E.RowNumber % 2 = 0;

Använda en användardefinierad variabel i MySQL-

SELECT *FROM ( SELECT *, @rowNumber := @rowNumber+ 1 rn FROM EmployeeSalary JOIN (SELECT @rowNumber:= 0) r ) t WHERE rn % 2 = 0;

Frågor.36. Skriv en SQL-fråga för att skapa en ny tabell med data och struktur som kopierats från en annan tabell.
Ans.

CREATE TABLE NewTable SELECT * FROM EmployeeSalary;

Ques.37. Skriv en SQL-fråga för att skapa en tom tabell med samma struktur som en annan tabell.
Ans. Här kan vi använda samma fråga som ovan med ett falskt ”WHERE”-villkor –

CREATE TABLE NewTable SELECT * FROM EmployeeSalary where 1=0;

Ques.38. Skriv en SQL-fråga för att hämta de n bästa posterna?
Ans. I MySQL med LIMIT-

SELECT *FROM EmployeeSalaryORDER BY Salary DESC LIMIT N;

I SQL-server med TOP-kommandot-

SELECT TOP N *FROM EmployeeSalaryORDER BY Salary DESC;

Ques.39. Skriv en SQL-fråga för att hitta den nionde högsta lönen i tabellen.
Ans, Användning av nyckelordet Top (SQL Server)-

SELECT TOP 1 SalaryFROM ( SELECT DISTINCT TOP N Salary FROM Employee ORDER BY Salary DESC )ORDER BY Salary ASC;

Användning av begränsningsklausulen(MySQL)-

SELECT SalaryFROM EmployeeORDER BY Salary DESC LIMIT N-1,1;

Ques.40. Skriv en SQL-fråga för att hitta den tredje högsta lönen från en tabell utan att använda nyckelordet TOP/limit.
Ans. Detta är en av de vanligaste intervjufrågorna. För detta kommer vi att använda en korrelerad underfråga.
För att hitta den tredje högsta lönen kommer vi att hitta lönevärdet tills den inre frågan returnerar ett antal av 2 rader som har lönen större än andra distinkta löner.

SELECT SalaryFROM EmployeeSalary Emp1WHERE 2 = ( SELECT COUNT( DISTINCT ( Emp2.Salary ) ) FROM EmployeeSalary Emp2 WHERE Emp2.Salary > Emp1.Salary )

För den nionde högsta lönen-

SELECT SalaryFROM EmployeeSalary Emp1WHERE N-1 = ( SELECT COUNT( DISTINCT ( Emp2.Salary ) ) FROM EmployeeSalary Emp2 WHERE Emp2.Salary > Emp1.Salary )

Det här avslutar vårt inlägg om ofta ställda intervjufrågor och svar om SQL-förfrågningar. Jag hoppas att dessa frågor hjälper dig med dina databasintervjuer.
Om du tycker att vi har missat någon av de vanligaste intervjufrågorna så låt oss veta det i kommentarerna och vi kommer att lägga till dessa frågor i vår lista.

Kontrollera även vår artikel om – Database Interview Questions, som fokuserar på de teoretiska intervjufrågorna baserade på DBMS- och SQL-koncept.

Kuldeep är grundare och huvudförfattare av ArtOfTesting. Han är kunnig inom testautomatisering, prestandatestning, stora data och CI-CD. Han tar med sig sitt decennium av erfarenhet till sin nuvarande roll där han ägnar sig åt att utbilda QA-proffs. Du kan komma i kontakt med honom på LinkedIn.

Facebook Twitter WhatsApp LinkedIn Pinterest

.

Lämna ett svar

Din e-postadress kommer inte publiceras.