Facebook Twitter WhatsApp LinkedIn Pinterest

Hello friends! w tym poście, zobaczymy niektóre z najczęstszych zapytań SQL zadawane w wywiadach. Te SQL zapytania wywiadu pytania i odpowiedzi są przeznaczone zarówno dla świeżych i doświadczonych.
W rzeczywistości, zostałem poproszony o większość z tych pytań podczas wywiadów w różnych fazach mojej kariery.

Jeśli chcesz pominąć podstawowe pytania i zacząć od niektórych podchwytliwych zapytań SQL to możesz bezpośrednio przejść do naszych pytań SQL zapytania wywiadu dla doświadczonych sekcji.

Rozważ poniższe dwie tabele dla odniesienia podczas próby tworzenia zapytań dla pytań zadawanych tutaj.

Table – EmployeeDetails

.

.

.

.

EmpId FullName ManagerId DateOfJoining City
121 John Snow 321 01/31/2014 Toronto
321 Walter White 986 01/30/2015 Kalifornia
421 Kuldeep Rana 876 27/11/2016 New Delhi

Table – EmployeeSalary

.

.

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

Dla Państwa wygody, Zebrałem 10 najlepszych pytań dla Ciebie. Możesz spróbować rozwiązać te pytania i kliknąć na linki, aby przejść do odpowiednich odpowiedzi.

  1. Zapytanie do bazy danych, aby pobrać rekordy, które są obecne w jednej tabeli, ale nie ma ich w innej tabeli.
  2. Zapytanie do bazy danych, aby pobrać wszystkich pracowników, którzy nie pracują nad żadnym projektem.
  3. Zapytanie do bazy danych, aby pobrać wszystkich pracowników z EmployeeDetails, którzy dołączyli w roku 2020.
  4. Pobierz wszystkich pracowników z EmployeeDetails, którzy mają rekord wynagrodzenia w EmployeeSalary.
  5. Napisz zapytanie SQL, aby pobrać liczbę pracowników w zależności od projektu.
  6. Pobierz nazwiska pracowników i wynagrodzenie, nawet jeśli wartość wynagrodzenia nie jest obecna dla pracownika.
  7. Napisz zapytanie SQL, aby pobrać wszystkich pracowników, którzy są również menedżerami.
  8. Napisz zapytanie SQL, aby pobrać zduplikowane rekordy z EmployeeDetails.
  9. Napisz zapytanie SQL, aby pobrać tylko nieparzyste wiersze z tabeli.
  10. Napisz zapytanie, aby znaleźć trzecią najwyższą pensję z tabeli bez słowa kluczowego top lub limit.

Możesz również przejść do naszych poniższych dwóch sekcji dotyczących pytań kwalifikacyjnych dla świeżych i doświadczonych profesjonalistów.

Treść

SQL Query Interview Questions for Freshers

Tutaj znajduje się lista najlepszych pytań i odpowiedzi wywiadu SQL query dla świeższych kandydatów, które pomogą im w ich wywiadach. W tych zapytaniach skupimy się tylko na podstawowych komendach SQL.

Pytania.1. Napisz zapytanie SQL, aby pobrać EmpId i FullName wszystkich pracowników pracujących w Manager z id – '986′.
Ans. Możemy użyć tabeli EmployeeDetails, aby pobrać szczegóły pracowników z klauzulą where dla manager-

SELECT EmpId, FullNameFROM EmployeeDetailsWHERE ManagerId = 986;

Ques.2Napisz zapytanie SQL, aby pobrać różne projekty dostępne z tabeli EmployeeSalary.
Ans. Odnosząc się do tabeli EmployeeSalary, możemy zauważyć, że ta tabela zawiera wartości projektów odpowiadające każdemu pracownikowi, lub możemy powiedzieć, że będziemy mieli zduplikowane wartości projektów podczas wybierania wartości projektów z tej tabeli.
Więc, użyjemy klauzuli distinct, aby uzyskać unikalne wartości Projektu.

SELECT DISTINCT(Project)FROM EmployeeSalary;

Kwestie.3. Napisz zapytanie SQL, aby pobrać liczbę pracowników pracujących w projekcie 'P1′.
Ans. Tutaj użyjemy funkcji agregującej count() z klauzulą SQL where-

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

Kwestie.4.Napisz zapytanie SQL, aby znaleźć maksymalne, minimalne i średnie wynagrodzenie pracowników. Możemy użyć funkcji agregującej SQL, aby pobrać wartości maksymalne, minimalne i średnie-

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

Ques.5Napisz zapytanie SQL w celu znalezienia pracowników, których wynagrodzenie mieści się w przedziale od 9000 do 15000.
Ans. Tutaj możemy użyć operatora 'Between’ z klauzulą where.

SELECT EmpId, SalaryFROM EmployeeSalaryWHERE Salary BETWEEN 9000 AND 15000;

Ques.6. Napisz zapytanie SQL w celu znalezienia pracowników, którzy mieszkają w Toronto i pracują pod kierownikiem z ManagerId – 321.
Ans. Ponieważ musimy spełnić oba warunki – pracownicy mieszkający w 'Toronto’ i pracujący w projekcie 'P2′. Więc, użyjemy operatora AND tutaj-

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

Ques.7. Write an SQL query to fetch all the employees who either live in California or work under a manager with ManagerId – 321.
Ans. This interview question requires us to satisfy either of the conditions – employees living in 'California’ and working under Manager with ManagerId '321′. Użyjemy więc tutaj operatora OR-

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

Ques.8Napisz zapytanie SQL, aby wyszukać wszystkich pracowników, którzy pracują w projekcie innym niż P1.
Ans. Tutaj możemy użyć operatora NOT, aby wyszukać wiersze, które nie spełniają podanego warunku.

SELECT EmpIdFROM EmployeeSalaryWHERE NOT Project='P1';

Or using the not equal to operator-

SELECT EmpIdFROM EmployeeSalaryWHERE Project <> 'P1';

Aby poznać różnicę między operatorami NOT i <> SQL, sprawdź ten link – Różnica między operatorami NOT i !=.

Pytania.9.Napisz zapytanie SQL, aby wyświetlić całkowitą pensję każdego pracownika, dodając wartość Salary do wartości zmiennej.
Ans. Tutaj możemy po prostu użyć operatora '+’ w SQL.

SELECT EmpId,Salary+Variable as TotalSalary FROM EmployeeSalary;

Ques.10Napisz zapytanie SQL, aby wyszukać pracowników, których nazwisko zaczyna się od dwóch dowolnych znaków, po których następuje tekst „hn” i kończy się dowolnym ciągiem znaków.
Ans. Dla tego pytania możemy utworzyć zapytanie SQL używając operatora like ze znakami wieloznacznymi '_’ i '%’, gdzie '_’ pasuje do pojedynczego znaku, a '%’ do '0 lub wielu znaków’.

SELECT FullNameFROM EmployeeDetailsWHERE FullName LIKE '__hn%';

Ques.11Napisz zapytanie SQL w celu pobrania wszystkich identyfikatorów pracowników, które są obecne w jednej z tabel – 'EmployeeDetails’ i 'EmployeeSalary’.
Ans. W celu uzyskania unikalnych identyfikatorów pracowników z obu tabel, możemy użyć klauzuli Union, która może połączyć wyniki dwóch zapytań SQL i zwrócić unikalne wiersze.

SELECT EmpId FROM EmployeeDetailsUNION SELECT EmpId FROM EmployeeSalary;

Ques.12Napisz zapytanie SQL w celu pobrania wspólnych rekordów z dwóch tabel.
Ans. SQL Server – Użycie operatora INTERSECT-

SELECT * FROM EmployeeSalaryINTERSECTSELECT * FROM ManagerSalary;

MySQL – Ponieważ MySQL nie posiada operatora INTERSECT, możemy użyć podzapytania-

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

Ques.13Napisz zapytanie SQL w celu pobrania rekordów, które są obecne w jednej tabeli, ale nie ma ich w innej tabeli.
Ans. SQL Server – Użycie operatora MINUS-

SELECT * FROM EmployeeSalaryMINUSSELECT * FROM ManagerSalary;

MySQL – Ponieważ MySQL nie posiada operatora MINUS, więc możemy użyć złączenia LEFT-

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

Ques.14Napisz zapytanie SQL aby pobrać EmpIds, które są obecne w obu tabelach – 'EmployeeDetails’ i 'EmployeeSalary.
Ans. używając podzapytania-

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

Ques.15. Napisz zapytanie SQL aby pobrać EmpIds, które są obecne w EmployeeDetails ale nie w EmployeeSalary.
Ans. używając podzapytania-

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

Ques.16Napisz zapytanie SQL pobierające pełne imiona pracowników i zastępujące spację ’-’.
Ans. Korzystając z funkcji 'Replace’-

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

Ques.17. Napisz zapytanie SQL pobierające pozycję danego znaku(ów) w polu.
Ans. Korzystając z funkcji 'Instr’-

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

Ques.18.Napisz zapytanie SQL, aby wyświetlić razem EmpId i ManagerId.
Ans. Tutaj możemy użyć polecenia CONCAT.

SELECT CONCAT(EmpId, ManagerId) as NewIdFROM EmployeeDetails;

Ques.19. Napisz zapytanie, aby pobrać tylko pierwsze imię (ciąg znaków przed spacją) z kolumny FullName tabeli EmployeeDetails.
Ans. W tym pytaniu jesteśmy zobowiązani najpierw pobrać lokalizację znaku spacji w polu FullName, a następnie wyodrębnić pierwsze imię z pola FullName.
Do znalezienia lokalizacji użyjemy metody LOCATE w MySQL i CHARINDEX w SQL SERVER, a do pobrania łańcucha przed spacją użyjemy metody SUBSTRING LUB MID.
MySQL – używając MID

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

SQL Server – używając SUBSTRING

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

Pyt.20.Napisz zapytanie SQL, które ma za zadanie wypisać wielką literą nazwisko pracownika oraz małą literą wartości miasta.
Ans. Możemy użyć funkcji SQL Upper i Lower, aby osiągnąć zamierzone rezultaty.

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

Ques.21. Napisz zapytanie SQL, aby znaleźć liczbę całkowitych wystąpień określonego znaku – 'n’ w polu FullName.
Ans. Możemy tutaj skorzystać z funkcji 'Length’. Możemy odjąć całkowitą długość pola FullName z długością FullName po zastąpieniu znaku – 'n’.

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

Zapytania.22. Napisać zapytanie SQL aktualizujące nazwiska pracowników poprzez usunięcie spacji wiodących i końcowych.
Ans. Korzystając z polecenia 'Update’ z funkcją 'LTRIM’ i 'RTRIM’.

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

Ques.23. Wyszukać wszystkich pracowników, którzy nie pracują nad żadnym projektem.
Ans. Jest to jedno z bardzo podstawowych pytań wywiadu, w którym ankieter chce sprawdzić, czy dana osoba wie o powszechnie stosowanym – Is NULL operator.

SELECT EmpId FROM EmployeeSalary WHERE Project IS NULL;

Ques.24.Napisz zapytanie SQL w celu pobrania nazwisk pracowników z wynagrodzeniem większym lub równym 5000 i mniejszym lub równym 10000.
Ans. W tym przypadku użyjemy BETWEEN w klauzuli 'where’, aby zwrócić EmpId pracowników z wynagrodzeniem spełniającym wymagane kryteria, a następnie użyjemy go jako podzapytania, aby znaleźć pełną nazwę pracownika z tabeli EmployeeDetails.

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

Ques.25. Napisać zapytanie SQL w celu znalezienia aktualnej daty czasu.
Ans. MySQL-

SELECT NOW();

SQL Server-

SELECT getdate();

Oracle-

SELECT SYSDATE FROM DUAL;

Ques.26.Napisz zapytanie SQL, aby pobrać wszystkie szczegóły pracowników z tabeli EmployeeDetails, którzy dołączyli w roku 2020.
Ans. Używając BETWEEN dla zakresu dat ’01-01-2020′ AND ’31-12-2020′ –

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

Możemy również wyodrębnić część roku z daty dołączenia (używając YEAR w mySQL)-

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

Ques.27.Napisać zapytanie SQL pobierające wszystkie rekordy pracowników z tabeli EmployeeDetails, którzy posiadają rekord wynagrodzenia w tabeli EmployeeSalary.
Ans. Using 'Exists’-

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

Ques.28. Napisz zapytanie SQL pobierające liczbę pracowników posortowanych według projektu w porządku malejącym.
Ans. Zapytanie ma dwa wymagania – najpierw pobrać liczbę pracowników w projekcie, a następnie posortować wynik według tej liczby.
Dla liczenia według projektów będziemy używać klauzuli GROUP BY, a dla sortowania użyjemy klauzuli ORDER BY na aliasie project-count.

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

Kwerenda.29. Napisz zapytanie pobierające nazwiska pracowników i rekordy wynagrodzeń. Wyświetl szczegóły pracownika, nawet jeśli rekord wynagrodzenia nie jest obecny dla pracownika.
Ans. Jest to ponownie jedno z bardzo częstych pytań kwalifikacyjnych, w których ankieter chce po prostu sprawdzić podstawową wiedzę na temat SQL JOINS.
W tym przypadku możemy użyć lewego złączenia z tabelą EmployeeDetail po lewej stronie tabeli EmployeeSalary.

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

Pytania.30. Napisz zapytanie SQL, aby dołączyć do 3 tabel.
Ans. Biorąc pod uwagę 3 tabele TableA, TableB, i TableC, możemy użyć 2 klauzule joins jak poniżej-

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

Aby uzyskać więcej pytań na temat SQL Joins, można również sprawdzić nasze najlepsze SQL Joins Pytania Wywiad.

SQL Query Pytania Wywiad dla doświadczonych

Oto lista niektórych z najczęściej zadawanych pytań SQL zapytania wywiadu dla doświadczonych profesjonalistów. Pytania te obejmują zapytania SQL na zaawansowanych koncepcji SQL JOIN, pobieranie duplikatów wierszy, nieparzyste i parzyste wiersze, nth najwyższe wynagrodzenie, itp.

Pytania. 31. Napisz zapytanie SQL, aby pobrać wszystkich pracowników, którzy są również menedżerami z tabeli EmployeeDetails.
Ans. Tutaj musimy użyć Self-Join, ponieważ wymaganie chce, abyśmy przeanalizowali tabelę EmployeeDetails jako dwie tabele. Będziemy używać różnych aliasów 'E’ i 'M’ dla tej samej tabeli EmployeeDetails.

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

Aby dowiedzieć się więcej o Self Join wraz z kilkoma innymi zapytaniami, możesz obejrzeć poniższy film, który wyjaśnia koncepcję Self Join w bardzo prosty sposób.

Self Join i jego demonstracja

Ques.32. Napisz zapytanie SQL pobierające zduplikowane rekordy z tabeli EmployeeDetails (bez uwzględniania klucza głównego – EmpId).
Ans. Aby znaleźć zduplikowane rekordy z tabeli, możemy użyć GROUP BY na wszystkich polach, a następnie użyć klauzuli HAVING, aby zwrócić tylko te pola, których licznik jest większy niż 1 tj. wiersze posiadające zduplikowane rekordy.

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

Ques.33. Napisz zapytanie SQL usuwające duplikaty z tabeli bez użycia tabeli tymczasowej.
Ans. Tutaj możemy użyć delete z aliasem i inner join. Sprawdzimy równość wszystkich pasujących rekordów i usuniemy wiersz z wyższym 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. Napisz zapytanie SQL pobierające tylko nieparzyste wiersze z tabeli.
Ans. W przypadku gdy mamy pole auto-increment np. EmpId to możemy po prostu użyć poniższego zapytania-

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

W przypadku gdy nie mamy takiego pola to możemy użyć poniższych zapytań.
Uzyskanie numeru wiersza w serwerze SQL i sprawdzenie, czy reszta po podzieleniu przez 2 wynosi 1-

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

Uzyskanie zmiennej zdefiniowanej przez użytkownika w MySQL-

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

Kwerenda.35. Napisz zapytanie SQL, aby pobrać tylko parzyste wiersze z tabeli.
Ans. W przypadku, gdy mamy pole autoinkrementacji np. EmpId to możemy po prostu użyć poniższego zapytania-

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

W przypadku, gdy nie mamy takiego pola to możemy użyć poniższych zapytań.
Użycie Row_number w serwerze SQL i sprawdzenie, czy reszta po podzieleniu przez 2 wynosi 1-

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

Użycie zmiennej zdefiniowanej przez użytkownika w MySQL-

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

Kwerendy.36. Napisz zapytanie SQL tworzące nową tabelę z danymi i strukturą skopiowanymi z innej tabeli.
Ans.

CREATE TABLE NewTable SELECT * FROM EmployeeSalary;

Ques.37. Napisz zapytanie SQL tworzące pustą tabelę o takiej samej strukturze jak pewna inna tabela.
Ans. Tutaj możemy użyć tego samego zapytania co powyżej z fałszywym warunkiem 'WHERE’-

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

Ques.38. Napisz zapytanie SQL pobierające n najlepszych rekordów?
Ans. W MySQL używając LIMIT-

SELECT *FROM EmployeeSalaryORDER BY Salary DESC LIMIT N;

W serwerze SQL używając polecenia TOP-

SELECT TOP N *FROM EmployeeSalaryORDER BY Salary DESC;

Ques.39. Napisz zapytanie SQL w celu znalezienia n-tej najwyższej pensji z tabeli.
Ans, Używając słowa kluczowego Top (SQL Server)-

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

Używając klauzuli limit(MySQL)-

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

Ques.40. Napisz zapytanie SQL, aby znaleźć 3. najwyższe wynagrodzenie z tabeli bez użycia słowa kluczowego TOP/limit.
Ans. Jest to jedno z najczęściej zadawanych pytań w wywiadzie. Do tego celu użyjemy skorelowanego podzapytania.
W celu znalezienia 3 najwyższej pensji, znajdziemy wartość pensji, aż wewnętrzne zapytanie zwróci liczbę 2 wierszy posiadających pensję większą niż inne odrębne pensje.

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

Dla n-tej najwyższej pensji-

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

To kończy nasz post o często zadawanych pytaniach wywiadu SQL i odpowiedzi. Mam nadzieję, że te pytania pomogą Ci w Twoich wywiadach z bazami danych.

Zapoznaj się z naszym artykułem – Database Interview Questions, skupiającym się na teoretycznych pytaniach wywiadu opartych na DBMS i koncepcjach SQL.

Kuldeep jest założycielem i głównym autorem ArtOfTesting. Jest wykwalifikowany w automatyzacji testów, testowaniu wydajności, big data i CI-CD. Wnosi swoje dziesięcioletnie doświadczenie do swojej obecnej roli, w której poświęca się edukacji profesjonalistów QA. Możesz połączyć się z nim na LinkedIn.

Facebook Twitter WhatsApp LinkedIn Pinterest

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.