Nhảy tới nội dung

20 câu hỏi phỏng vấn SQL - Level Intern phần 3 ( từ câu 11 đến 15 )

· 8 phút để đọc
Phạm Quyết Thắng

11. Phân biệt INNER JOIN và OUTER JOIN.

INNER JOINOUTER JOIN là hai loại JOIN khác nhau trong SQL, và chúng có những điểm khác biệt quan trọng:

INNER JOIN:

  • Đặc điểm chính: INNER JOIN trả về các dòng dữ liệu từ cả hai bảng chỉ khi có điều kiện liên kết thỏa mãn.
  • Kết quả: Chỉ bao gồm các dòng mà có giá trị liên kết từ cả hai bảng.
  • Cú pháp sử dụng: SELECT ... FROM table1 INNER JOIN table2 ON condition;

OUTER JOIN (bao gồm LEFT, RIGHT và FULL OUTER JOIN):

  • Đặc điểm chính: OUTER JOIN trả về các dòng dữ liệu từ ít nhất một bảng, kể cả khi không có điều kiện liên kết thỏa mãn.
  • Kết quả:
    • LEFT JOIN (hoặc LEFT OUTER JOIN): Bao gồm tất cả các dòng từ bảng bên trái và các dòng từ bảng bên phải có điều kiện liên kết thỏa mãn.
    • RIGHT JOIN (hoặc RIGHT OUTER JOIN): Bao gồm tất cả các dòng từ bảng bên phải và các dòng từ bảng bên trái có điều kiện liên kết thỏa mãn.
    • FULL JOIN (hoặc FULL OUTER JOIN): Bao gồm tất cả các dòng từ cả hai bảng, kể cả khi không có điều kiện liên kết thỏa mãn.
  • Cú pháp sử dụng: SELECT ... FROM table1 LEFT (or RIGHT, or FULL) JOIN table2 ON condition; Ví dụ:
-- INNER JOIN
SELECT employees.employee_id, employees.employee_name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.department_id;

-- LEFT JOIN
SELECT customers.customer_id, customers.customer_name, orders.order_id
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id;

Trong ví dụ INNER JOIN, chỉ những dòng với điều kiện liên kết thỏa mãn được lấy. Trong ví dụ LEFT JOIN, tất cả các dòng từ bảng bên trái (customers) và các dòng từ bảng bên phải (orders) với điều kiện liên kết thỏa mãn được lấy.

12. DISTINCT được sử dụng như thế nào ?

Từ khoá DISTINCT trong một câu truy vấn SQL được sử dụng để loại bỏ các bản ghi trùng lặp từ kết quả truy vấn, chỉ hiển thị giá trị duy nhất trong cột được chọn.

Cú pháp của DISTINCT:

Cú pháp cơ bản của DISTINCT như sau:

SELECT DISTINCT cột1, cột2, ...
FROM tên_bảng
WHERE điều_kiện;
  • SELECT DISTINCT: Xác định cột hoặc các cột bạn muốn lấy dữ liệu duy nhất từ.
  • FROM: Xác định bảng từ đó bạn muốn lấy dữ liệu.
  • WHERE (tùy chọn): Xác định điều kiện để lọc dữ liệu. Ví dụ:
-- Lấy tất cả các giá trị duy nhất từ cột "department" trong bảng "employees"
SELECT DISTINCT department
FROM employees;

Trong ví dụ này, câu truy vấn sẽ trả về danh sách các bộ phận duy nhất từ cột "department" trong bảng "employees" mà không có các bản ghi trùng lặp. DISTINCT thường được sử dụng khi bạn chỉ quan tâm đến giá trị duy nhất trong một cột cụ thể.

13. Giải thích khái niệm chuẩn hóa normalization trong SQL.

Normalization là quá trình thiết kế cơ sở dữ liệu để giảm thiểu sự trùng lặp dữ liệu và tối ưu hóa cấu trúc dữ liệu, từ đó giúp cải thiện hiệu suất, duy trì tính nhất quán và giảm thiểu rủi ro mất mát dữ liệu trong hệ thống cơ sở dữ liệu.

Các mức độ của normalization thường được biểu diễn thông qua các mức độ chính (còn được gọi là các dạng bậc) như First Normal Form (1NF), Second Normal Form (2NF), Third Normal Form (3NF), và các mức độ cao hơn như Boyce-Codd Normal Form (BCNF) và Fourth Normal Form (4NF), Fifth Normal Form (5NF), và các mức độ khác nữa.

Các biện pháp chính của normalization bao gồm:

  • First Normal Form (1NF): Mỗi ô trong bảng chỉ chứa một giá trị và tất cả các giá trị trong cột đó đều thuộc vào cùng một kiểu dữ liệu.

  • Second Normal Form (2NF): Bảng đạt 1NF và mọi cột không phải là khóa chính phải phụ thuộc hoàn toàn vào khóa chính.

  • Third Normal Form (3NF): Bảng đạt 2NF và không có sự phụ thuộc chéo giữa các cột không phải là khóa chính.

  • Boyce-Codd Normal Form (BCNF): Mức độ cao hơn 3NF và đảm bảo rằng mọi chức năng phi tuyến tính phụ thuộc trên khóa chính.

Lợi ích của normalization:

  • Giảm thiểu sự trùng lặp dữ liệu: Đảm bảo mỗi thông tin chỉ được lưu trữ một lần, giúp giảm gian lận và tiết kiệm không gian lưu trữ.

  • Duy trì tính nhất quán: Cung cấp một cơ sở dữ liệu có cấu trúc tốt, giảm rủi ro dữ liệu không nhất quán.

  • Tối ưu hóa hiệu suất: Giúp tối ưu hóa truy xuất dữ liệu và thực hiện các thao tác cơ sở dữ liệu một cách hiệu quả.

Tuy nhiên, quá mức normalization cũng có thể dẫn đến hiệu suất kém do cần thực hiện nhiều phép JOIN trong các truy vấn, vì vậy quá trình normalization cần được thực hiện một cách cân nhắc dựa trên yêu cầu cụ thể của ứng dụng và môi trường sử dụng.

14. KHÓA CHÍNH (PRIMARY KEY) trong bảng cơ sở dữ liệu là gì?

Trong một bảng cơ sở dữ liệu, PRIMARY KEY là một cột hoặc một nhóm các cột có giá trị duy nhất cho mỗi dòng trong bảng. Chính key (Primary Key) định danh mỗi bản ghi trong bảng và đảm bảo tính duy nhất của dữ liệu.

Đặc điểm chính của PRIMARY KEY:

  • Duy nhất: Mỗi giá trị trong cột PRIMARY KEY phải là duy nhất trong toàn bảng.
  • Không null: Giá trị của PRIMARY KEY không được là giá trị NULL.
  • Nhận diện duy nhất: Đó là một cách duy nhất để xác định từng bản ghi trong bảng.

Cú pháp sử dụng:

Khi tạo bảng, bạn có thể xác định cột làm PRIMARY KEY bằng cách sử dụng từ khoá PRIMARY KEY:

CREATE TABLE table_name (
column1 datatype PRIMARY KEY,
column2 datatype,
...
);

Hoặc nếu bạn muốn sử dụng nhiều cột làm PRIMARY KEY:

CREATE TABLE table_name (
column1 datatype,
column2 datatype,
...
PRIMARY KEY (column1, column2, ... )
);

Ví dụ:

CREATE TABLE employees (
employee_id INT PRIMARY KEY,
employee_name VARCHAR(50),
department_id INT
);

Trong ví dụ này, cột "employee_id" được xác định làm PRIMARY KEY cho bảng "employees," và mỗi giá trị trong cột này phải là duy nhất.

15. KHÓA NGOẠI (FOREIGN KEY) là gì và nó được sử dụng như thế nào?

FOREIGN KEY trong cơ sở dữ liệu là một cột hoặc một nhóm các cột trong một bảng, tham chiếu đến khóa chính (PRIMARY KEY) hoặc khóa duy nhất (UNIQUE KEY) trong bảng khác. FOREIGN KEY tạo một mối quan hệ giữa hai bảng, thường được sử dụng để thiết lập các liên kết giữa dữ liệu của chúng.

Chức năng chính của FOREIGN KEY:

  • Xác định mối quan hệ: Khi sử dụng FOREIGN KEY, bạn có thể xác định mối quan hệ giữa hai bảng, một trong đó thường được gọi là bảng "cha" (referencing table) và một là bảng "con" (referenced table).
  • Bảo toàn tính toàn vẹn: FOREIGN KEY đảm bảo tính toàn vẹn dữ liệu bằng cách không cho phép các giá trị trong cột FOREIGN KEY của bảng "con" trỏ đến các giá trị không tồn tại trong cột khóa chính hoặc khóa duy nhất của bảng "cha."

Cú pháp:

Khi tạo bảng, bạn có thể thêm FOREIGN KEY như sau:

CREATE TABLE child_table (
column1 datatype,
column2 datatype,
foreign_key_column datatype,
FOREIGN KEY (foreign_key_column) REFERENCES parent_table(parent_key_column)
);
  • column1, column2: Các cột thông thường trong bảng "con."
  • foreign_key_column: Cột FOREIGN KEY trong bảng "con."
  • parent_table: Tên của bảng "cha."
  • parent_key_column: Tên của cột khóa chính trong bảng "cha." Ví dụ:
CREATE TABLE departments (
department_id INT PRIMARY KEY,
department_name VARCHAR(50)
);

CREATE TABLE employees (
employee_id INT PRIMARY KEY,
employee_name VARCHAR(50),
department_id INT,
FOREIGN KEY (department_id) REFERENCES departments(department_id)
);

Trong ví dụ này, cột "department_id" trong bảng "employees" là FOREIGN KEY, và nó tham chiếu đến cột "department_id" trong bảng "departments." Điều này tạo ra mối quan hệ giữa hai bảng, trong đó thông tin về phòng ban của mỗi nhân viên được liên kết với bảng phòng ban.