Một số câu hỏi phỏng vấn SQL

javascript logo

Chào các bạn, trong quá trình đi phỏng vấn vị trí lập trình viên PHP, JS gần đây tại một số công ty. Mình đã được hỏi một số câu hỏi liên quan đến SQL.

Mà cái bất lợi là 3 4 năm nay mình hầu như chỉ thao tác trên cơ sở dữ liệu MongoDB. Kiến thức căn bản cũng như lý thuyết về SQL của mình gần như bị quên lãng. Trông mình lúc đó ko khác gì new bây bi :D.

Do vậy mình đã tổng hợp một số lý thuyết và một số câu hỏi phỏng vấn về SQL cho các bạn tham khảo.

Một số câu hỏi phỏng vấn SQL:

1. SQL là gì?

SQL (Structured Query Language) là viết tắt của ngôn ngữ truy vấn có cấu trúc. Nó chủ yếu là một ngôn ngữ quản lý cơ sở dữ liệu.

2. MySQL với SQL server khác nhau như nào? (What the hell)

Xin thưa rằng:

        SQL Server là một hệ thống quản lý cơ sở dữ liệu (Database Management System – DBMS), hay còn được gọi là Microsoft SQL Server. Nó tập hợp và phân tích dữ liệu, cập nhật và quản trị cơ sở dữ liệu. Được sử dụng chủ yếu trên những phần mềm và có độ mở rộng lớn. SQL Server thường được sử dụng với .Net.

MySQL là một hệ thống quản lý cơ sở dữ liệu nguồn mở miễn phí. Nó cung cấp các chức năng và giao diện có sẵn, có hỗ trợ đa nền tảng và sở hữu các công cụ tiện lợi để giúp bạn làm việc nhanh chóng. MySQL thường được sử dụng với PHP.

Và điểm khác biệt lớn nhất giữa MySQL và SQL Server là:

  • Môi trường
  • Cộng đồng sử dụng
  • Và còn nhưng điểm khác nhau như chi phí, bảo mật, IDEs,..

3. Định nghĩa Table, Field, View, Primary key, Unique key  là gì?

  • Table: là tổ chức dữ liệu theo các hàng và cột riêng biệt.
  • Field: là column trong table
  • View:  là một đại diện ảo của một table. Có nhiều data biểu thị và hết hợp trong view.
  • Primary key: (Khóa chính) là một cột hoặc một tập hợp các cột xác định duy nhất mỗi hàng trong bảng.
  • Unique key: (Khóa duy nhất) là những gì xác định duy nhất một hàng trong bảng như được đề cập trong phần giải thích Primary key.

4. Index trong SQL là gì?

Index (chỉ mục) là phương pháp nâng cao hiệu suất, cụ thể là lấy thông tin từ cơ sở dữ liệu với tốc độ và hiệu quả cao hơn.

Tổng cộng, có ba loại chỉ mục:

  1. clustered (phân cụm): sắp xếp lại bảng và tìm kiếm thông tin. Thường dùng cho bảng chứa lượng bản ghi lớn
  2. non-clustered (không phân cụm): duy trì thứ tự của bảng.
  3. unique (duy nhất): cấm các trường có các giá trị trùng lặp.

Một bảng chỉ có thể có một chỉ mục clustered, nhưng lại có thể có nhiều chỉ mục non-clustered.

5. Sự khác biệt giữa kiểu char và varchar?

  • Varchar: chỉ sử dụng không gian được phân bổ và được đệm trắng 1 byte.
  • Char: char luôn sử dụng độ dài tối đa và được đệm trắng.

Ví dụ:

Char(5): 

  • ” -> 5 byte
  • ‘a’ -> 5 byte
  • ‘abcde’ -> 5 byte

Varchar(5):

  • ” -> 1 byte
  • ‘a’ -> 2 byte
  • ‘abcde’ -> 5 byte

6. Inner join, left join, right join là gì?

  • Inner join: Trả về tất cả các hàng mà ít nhất 1 bảng có những kết quả giống nhau giữa 2 bảng.  Đây là kiểu join mặc định của SQL nếu bạn không chỉ ra loại JOIN.
  • Left join: Trả về tất cả cách hàng bảng bên trái và các kết quả giống nhau giữa 2 bảng. Ví dụ kết quả sẽ bao gồm các kết quả từ bảng bên trái, kể cả khi lệnh JOIN không tìm thấy hàng nào giống nhau với bảng bên phải. Điều đó nghĩa là nếu mệnh đề ON không có kết quả khớp với bảng bên phải, lệnh JOIN sẽ trả về hàng về các bản ghi bảng bên trái, nhưng với NULL cho các hàng với bảng bên phải.
  • Right join: Trả về tất cả các hàng bên phải, và các kết quả khớp với bên bảng phía trái. Nó trái ngược với LEFT JOIN.

7. Storage Engine có những loại nào?

Khi tạo 1 table trong SQL sẽ có nhiều kiểu Storage Engine để bạn lựa chọn như: InnoDB, MyISAM, Memory, Archive, NDB, Merge, Federated.

Chúng ta sẽ sử dụng chủ yếu 2 loại là InnoDB, MyISAM:

1.MyISAM: Đây là Storage Engine mặc đinh khi tạo table.

Ưu điểm: Là Storage Engine hỗ trợ Full Text Search lập chỉ mục toàn văn, cung cấp thuật toán tìm kiếm khá giống Google. Kiến trúc đơn giản nên có tốc độ truy suất (đọc và tìm kiếm) nhanh nhất trong các loại Storage Engine.

MyISAM hoạt động theo cơ chế Table-level locking giới hạn hiệu suất read/write dữ liệu, vì vậy nó thường được sử dụng cho các công việc read-only hoặc read-mostly trong các cấu hình Web và lưu trữ dữ liệu.

Nhược điểm: MyISAM hoạt động theo cơ chế Table Level Locking, nên khi có hành động thực hiện (thêm/sửa/xóa) 1 bản ghi nào đó trong table thì table đó sẽ bị khóa lại, chờ tới khi hành động này được thực hiện xong thì hành động kia mới tiếp tục được thực hiện. Kiến trúc đơn giản, không ràng buộc nên loại Storage Engine này rất dễ bị crash, hỏng chỉ mục với những table có số lượng bản ghi lớn.

2. InnoDB: 

Đây là Storage Engine mới hơn có nhiều tính năng và ưu điểm vượt trội hơn so với MyISAM.

Ưu điểm: Engine này kiểm tra tính toàn vẹn và ràng buộc dữ liệu rất cao, khó xảy ra tình trạng hỏng chỉ mục và crash table. Hoạt động theo cơ chế Row Level Locking, vì vậy trong lúc thực hiện các hành động (thêm/sửa/xóa) trên 1 bản ghi, thì các hoạt động ở bản ghi khác trên table vẫn diễn ra bình thường. Hỗ trợ Transaction giúp đảm bảo an toàn khi thực hiện một khối lệnh SQL đảm bảo nhất quán dữ liệu.

Nhược điểm: Hoạt động cần nhiều RAM hơn.

InnoDB hỗ trợ Full Text Search từ MySQL 5.6.4 và sau đó. Nhưng kết quả có thể khác biệt đáng kể.

Trên đây là một số câu hỏi về SQL mình liệt kê. Hi vọng sẽ giúp ích cho các bạn chém gió trong buổi phỏng vấn.

Một số nội dung mình có tham khảo trên viblo, google.