top of page

Ôn tập 30 câu hỏi phỏng vấn về truy vấn SQL



SQL hoặc Ngôn ngữ truy vấn có cấu trúc là ngôn ngữ tiêu chuẩn để xử lý cơ sở dữ liệu quan hệ. Với lượng dữ liệu khổng lồ hiện nay, chúng ta phải hiểu cách sử dụng truy vấn để truy xuất dữ liệu cần thiết. Trong bài viết này về Câu hỏi phỏng vấn truy vấn SQL, chúng ta sẽ thảo luận về một số truy vấn mà bạn phải thực hành để giúp bạn chuẩn bị cho các cuộc phỏng vấn của mình nhé.

Để bạn hiểu rõ hơn, chúng ta sẽ thực tập dựa trên bảng dữ liệu sau.

EmployeeInfo Table:


EmployeePosition Table:





Và bây giờ chúng ta hãy thực tập những câu lệnh SQL thường gặp trong các buổi phỏng vấn:

Q1. Viết truy vấn để tìm EmpFname từ bảng EmployeeInfo bằng chữ in hoa và sử dụng tên ALIAS làm EmpName.


SELECT UPPER(EmpFname) AS EmpName FROM EmployeeInfo;


Q2. Viết câu truy vấn lấy số lượng nhân viên đang làm việc tại phòng 'HR'.


SELECT COUNT(*) FROM EmployeeInfo WHERE Department = 'HR';


Q3. Viết truy vấn để lấy ngày hiện tại.

Bạn có thể viết một truy vấn như sau trong SQL Server:


SELECT GETDATE();


Q4. Viết truy vấn để lấy bốn ký tự đầu tiên của EmpLname từ bảng EmployeeInfo


SELECT SUBSTRING(EmpLname, 1, 4) FROM EmployeeInfo;


Q5. Viết truy vấn để chỉ tìm tên địa điểm (chuỗi trước dấu ngoặc) từ cột Địa chỉ của bảng EmployeeInfo.

Sử dụng SUBSTRING trong SQL Server


SELECT SUBSTRING(Address, 1, CHARINDEX('(',Address)) FROM EmployeeInfo;


Q6. Viết truy vấn để tạo một bảng mới bao gồm dữ liệu và cấu trúc được sao chép từ bảng kia.

Sử dụng lệnh SELECT INTO command:


SELECT * INTO NewTable FROM EmployeeInfo WHERE 1 = 0;


Q7. Viết truy vấn q để tìm tất cả các nhân viên có mức lương từ 50000 đến 100000.


SELECT * FROM EmployeePosition WHERE Salary BETWEEN '50000' AND '100000';


Q8. Viết truy vấn để tìm tên nhân viên bắt đầu bằng 'S'


SELECT * FROM EmployeeInfo WHERE EmpFname LIKE 'S%';



Q9. Viết một truy vấn để lấy N bản ghi hàng đầu.

Bằng cách sử dụng lệnh TOP trong SQL Server:


SELECT TOP N * FROM EmployeePosition ORDER BY Salary DESC;


Sử dụng lệnh LIMIT trong MySQL:


SELECT * FROM EmpPosition ORDER BY Salary DESC LIMIT N;


Q10. Viết truy vấn để lấy EmpFname và EmpLname trong một cột duy nhất dưới dạng “FullName”. Họ và tên phải cách nhau bằng dấu cách.


SELECT CONCAT(EmpFname, ' ', EmpLname) AS 'FullName' FROM EmployeeInfo;


Q11. Viết truy vấn tìm số lượng nhân viên có DOB từ 02/05/1970 đến 31/12/1975 và được nhóm theo giới tính


SELECT COUNT(*), Gender FROM EmployeeInfo WHERE DOB BETWEEN '02/05/1970 ' AND '31/12/1975' GROUP BY Gender;


Q12. Viết một truy vấn để tìm nạp tất cả các bản ghi từ bảng EmployeeInfo được sắp xếp theo thứ tự giảm dần bởi EmpLname và Department theo thứ tự tăng dần.

Để sắp xếp các bản ghi theo thứ tự tăng dần và giảm dần , bạn phải sử dụng câu lệnh ORDER BY trong SQL .


SELECT * FROM EmployeeInfo ORDER BY EmpFname desc, Department asc;


Q13. Viết truy vấn để lấy thông tin chi tiết về nhân viên có EmpLname kết thúc bằng bảng chữ cái 'A' và chứa năm bảng chữ cái.

Để tìm nạp chi tiết tính toán một giá trị nhất định, bạn phải sử dụng toán tử LIKE trong SQL.


SELECT * FROM EmployeeInfo WHERE EmpLname LIKE '____a';


Q14. Viết một truy vấn để lấy thông tin chi tiết của tất cả nhân viên ngoại trừ những nhân viên có tên “Sanjay” và “Sonia” từ bảng EmployeeInfo.


SELECT * FROM EmployeeInfo WHERE EmpFname NOT IN ('Sanjay','Sonia');


Q15. Viết truy vấn để lấy thông tin chi tiết của nhân viên có địa chỉ là “DELHI(DEL)”.


SELECT * FROM EmployeeInfo WHERE Address LIKE 'DELHI(DEL)%';


Q16. Viết truy vấn để lấy tất cả nhân viên cùng giữ vị trí quản lý.


SELECT E.EmpFname, E.EmpLname, P.EmpPosition

FROM EmployeeInfo E INNER JOIN EmployeePosition P ON

E.EmpID = P.EmpID AND P.EmpPosition IN ('Manager');


Q17. Viết một truy vấn để lấy số lượng nhân viên của bộ phận được sắp xếp theo số lượng của bộ phận theo thứ tự tăng dần.


SELECT Department, count(EmpID) AS EmpDeptCount

FROM EmployeeInfo GROUP BY Department

ORDER BY EmpDeptCount ASC;


Q18. Viết truy vấn để tính các bản ghi chẵn và lẻ từ một bảng.

Để truy xuất các bản ghi chẵn từ một bảng, bạn phải sử dụng hàm MOD( ) như sau:


SELECT EmpID FROM (SELECT rowno, EmpID from EmployeeInfo) WHERE MOD(rowno,2)=0;

Tương tự, để lấy các bản ghi lẻ từ một bảng, bạn có thể viết truy vấn như sau:


SELECT EmpID FROM (SELECT rowno, EmpID from EmployeeInfo) WHERE MOD(rowno,2)=1;


Q19. Viết một truy vấn SQL để lấy thông tin chi tiết về nhân viên từ bảng EmployeeInfo có ngày tham gia vào bảng EmployeePosition .

SELECT * FROM EmployeeInfo E

WHERE EXISTS

(SELECT * FROM EmployeePosition P WHERE E.EmpId = P.EmpId);


Q20. Viết một truy vấn để lấy ra hai mức lương tối thiểu và tối đa từ bảng EmployeePosition.

Để lấy hai mức lương tối thiểu, bạn có thể viết một truy vấn như sau:


SELECT DISTINCT Salary FROM EmployeePosition E1

WHERE 2 >= (SELECTCOUNT(DISTINCT Salary)FROM EmployeePosition E2

WHERE E1.Salary >= E2.Salary) ORDER BY E1.Salary DESC;

Để truy xuất hai mức lương tối đa, bạn có thể viết truy vấn như sau:


WHERE 2 >= (SELECTCOUNT(DISTINCT Salary) FROM EmployeePosition E2

WHERE E1.Salary <= E2.Salary) ORDER BY E1.Salary DESC;


Q21. Viết truy vấn tìm mức lương cao thứ N trong bảng mà không sử dụng từ khóa TOP/limit.


SELECT Salary

FROM EmployeePosition E1

WHERE N-1 = (

SELECT COUNT( DISTINCT ( E2.Salary ) )

FROM EmployeePosition E2

WHERE E2.Salary > E1.Salary );


Q22. Viết truy vấn để truy xuất các bản ghi trùng lặp từ một bảng.


SELECT EmpID, EmpFname, Department COUNT(*)

FROM EmployeeInfo GROUP BY EmpID, EmpFname, Department

HAVING COUNT(*) > 1;


Q23. Viết câu truy vấn lấy danh sách nhân viên làm việc trong cùng bộ phận.


Select DISTINCT E.EmpID, E.EmpFname, E.Department

FROM EmployeeInfo E, Employee E1

WHERE E.Department = E1.Department AND E.EmpID != E1.EmpID;


Q24. Viết truy vấn để lấy 3 bản ghi cuối cùng từ bảng EmployeeInfo.


SELECT * FROM EmployeeInfo WHERE

EmpID <=3 UNION SELECT * FROM

(SELECT * FROM EmployeeInfo E ORDER BY E.EmpID DESC)

AS E1 WHERE E1.EmpID <=3;


Q25. Viết truy vấn để tìm mức lương cao thứ ba từ bảng EmpPosition .


SELECT TOP 1 salary

FROM(

SELECT TOP 3 salary

FROM employee_table

ORDER BY salary DESC) AS emp

ORDER BY salary ASC;


Q26. Viết truy vấn để hiển thị bản ghi đầu tiên và cuối cùng từ bảng EmployeeInfo.

Để hiển thị bản ghi đầu tiên từ bảng EmployeeInfo, bạn có thể viết truy vấn như sau:


SELECT * FROM EmployeeInfo WHERE EmpID = (SELECT MIN(EmpID) FROM EmployeeInfo);


Để hiển thị bản ghi cuối cùng từ bảng EmployeeInfo, bạn có thể viết một truy vấn như sau:


SELECT * FROM EmployeeInfo WHERE EmpID = (SELECT MAX(EmpID) FROM EmployeeInfo);


Q27. Viết truy vấn để rà soát email từ cơ sở dữ liệu của bạn


SELECT Email FROM EmployeeInfo WHERE NOT REGEXP_LIKE(Email, ‘[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}’, ‘i’);


Q28. Viết câu truy vấn truy xuất các Phòng ban có ít hơn 2 nhân viên làm việc trong đó.


SELECT DEPARTMENT, COUNT(EmpID) as 'EmpNo' FROM EmployeeInfo GROUP BY DEPARTMENT HAVING COUNT(EmpD) < 2;


Q29. Viết một truy vấn để truy xuất EmpPostion cùng với tổng tiền lương được trả cho mỗi người trong số họ.


SELECT EmpPosition, SUM(Salary) from EmployeePosition GROUP BY EmpPosition;


Q30. Viết truy vấn để tìm nạp 50% bản ghi từ bảng EmployeeInfo.


FROM EmployeeInfo WHERE

EmpID <= (SELECT COUNT(EmpID)/2 from EmployeeInfo);


Vậy là chúng ta đã kết thúc bài 30 Câu hỏi phỏng vấn về truy vấn SQL. Hy vọng bộ Câu hỏi phỏng vấn truy vấn SQL này sẽ giúp bạn thành công trong cuộc phỏng vấn xin việc. Chúc bạn may mắn!

Nguồn: Edureka

23 lượt xem0 bình luận

Comments


bottom of page