Bộ câu hỏi phỏng vấn SQL Server phần 2

Foreign key (khóa ngoại) là gì?


  • Một ràng buộc Foreign key ngăn chặn bất kỳ hành động nào có thể phá hủy liên kết giữa các bảng với các giá trị dữ liệu.
  • Foreign key trong một bảng trỏ đến Primary key trong bảng khác. Foreign key ngăn các hành động sẽ để lại các rows có giá trị foreign key nhưng không có primary key nào có giá trị đó.
  • Các ràng buộc foreign key được sử dụng để thực thi tính toàn vẹn tham chiếu.

Normalization là gì?


Đó là quá trình loại bỏ dữ liệu dư thừa và duy trì các data dependencies

Blocking là gì?


SQL Server blocking xảy ra khi một connection đang lock một record và connection khác cố gắng tìm hoặc cập nhật record đó.

Sự khác biệt giữa JOIN và UNION là gì?


  • SQL JOIN cho phép chúng ta "tìm kiếm" các records (bản ghi) trên bảng khác dựa trên các điều kiện cho trước giữa hai bảng.
  • Thao tác UNION cho phép chúng ta thêm 2 tập dữ liệu giống nhau để tạo ra một tập dữ liệu chứa tất cả dữ liệu từ các tập dữ liệu nguồn. Union không yêu cầu bất kỳ điều kiện nào để tham gia.

Thảo luận về mệnh đề INNER JOIN ON với WHERE?


Bạn có thể làm:

SELECT
   table1.this, table2.that, table2.somethingelse
FROM
   table1, table2
WHERE
   table1.foreignkey = table2.primarykey
   AND (some other conditions)

Hoặc:

SELECT
   table1.this, table2.that, table2.somethingelse
FROM
   table1 INNER JOIN table2
   ON table1.foreignkey = table2.primarykey
WHERE
   (some other conditions)

Bạn sẽ chọn cú pháp nào và tại sao?

  • INNER JOIN là cú pháp ANSI mà bạn nên sử dụng. INNER JOIN giúp con người dễ đọc và đó là ưu tiên hàng đầu. Nó cũng có thể dễ dàng thay thế bằng OUTER JOIN bất cứ khi nào có nhu cầu.
  • Các phép join ngầm (với nhiều bảng FROM) trở nên khó hiểu, khó đọc và khó duy trì hơn nhiều khi bạn cần bắt đầu thêm nhiều bảng hơn vào truy vấn của mình.

Kích thước bảng có bị giảm khi bạn xóa dữ liệu khỏi bảng không?


  • Không, kích thước bảng không bị giảm, thực sự máy chủ SQL đánh dấu các hàng (row) đó là hàng trống.
  • Sau khi bạn chèn dữ liệu mới, các hàng trống sẽ được cập nhật và sau đó kích thước của bảng được thay đổi dựa trên việc chèn dữ liệu. Nếu dữ liệu không được chèn vào, thì sau một thời gian, các hàng sẽ bị loại bỏ.

Làm sao để thực hiện IF… THEN trong SQL SELECT?


Câu lệnh CASE là câu lệnh gần với IF nhất trong SQL và được hỗ trợ trên tất cả các phiên bản của SQL Server:

SELECT CAST(
   CASE
      WHEN
         Obsolete = 'N'
         or InStock = 'Y'
      THEN 1
      ELSE 0
    END AS bit) as Saleable, *
FROM
   Product

Sự khác biệt giữa inner và outer join là gì?


  • Inner join trả về các rows khi có ít nhất một kết quả phù hợp trong cả hai bảng.
  • Outer join sẽ trả về các rows phù hợp từ cả hai bảng và các row chưa khớp từ bảng 1 hoặc bảng 2.

Ưu điểm của việc sử dụng Stored Procedures là gì?


  • Stored procedure có thể làm giảm lưu lượng mạng và độ trễ, tăng hiệu suất ứng dụng.
  • Các kế hoạch thực thi stored procedure có thể được sử dụng lại, lưu trong bộ nhớ của SQL Server, giảm chi phí máy chủ.
  • Stored procedure giúp thúc đẩy việc tái sử dụng mã.
  • Stored procedure có thể đóng gói các logic. Bạn có thể thay đổi mã của stored procedure mà không ảnh hưởng đến máy khách.
  • Stored procedure cung cấp bảo mật tốt hơn cho dữ liệu của bạn.

Định nghĩa các thuộc tính ACID?


  • Atomicity: nó đảm bảo quy tắc all-or-none cho việc sửa đổi cơ sở dữ liệu.
  • Consistency: Giá trị dữ liệu nhất quán trên cơ sở dữ liệu.
  • Isolation: Hai giao dịch (transactions) được cho là độc lập với nhau.
  • Durability: Dữ liệu không bị mất ngay cả khi máy chủ gặp sự cố.

Làm thế nào một index có thể giúp tăng hiệu suất?


  • Toàn bộ giá trị của việc có một index là để tăng tốc các truy vấn tìm kiếm bằng cách cắt giảm số lượng các records/rows trong bảng cần được kiểm tra.
  • Index là một cấu trúc dữ liệu (phổ biến nhất là một B-tree) lưu trữ các giá trị cho một column cụ thể trong một bảng.

Denormalization là gì?


Đó là quá trình cải thiện hiệu suất của cơ sở dữ liệu bằng cách thêm dữ liệu dự phòng (redundant data).

Sự khác biệt giữa Clustered index và Non-Clustered index là gì?


  • Clustered index là một loại index đặc biệt dùng để sắp xếp lại cách mà các bản ghi (record) trong bảng được lưu trữ dạng vật lý. Do đó, bảng chỉ có thể có một clustered index. Các nút lá của một clustered index chứa các trang dữ liệu.
  • Non-Clustered index là một loại index đặc biệt trong đó thứ tự logic của index không khớp với thứ tự được lưu trữ vật lý của các row trên đĩa. Nút lá của một non-clustered index không bao gồm các trang dữ liệu. Thay vào đó, các nút lá chứa các hàng index.

Sự khác biệt giữa "INNER JOIN" và "OUTER JOIN"?


Còn LEFT JOIN, RIGHT JOINFULL JOIN thì sao? Giả sử bạn đang join vào các columns không có trùng lắp, thì đây là một trường hợp rất phổ biến:

  • Một inner join của A và B cho kết quả của A giao B, ví dụ: phần bên trong của giao điểm biểu đồ Venn.
  • Một outer join của A và B cho kết quả của A hợp B, ví dụ: các phần bên ngoài của liên hợp biểu đồ Venn.
  • Một left outer join sẽ cho kết quả là tất cả các rows trong A, cộng với bất kỳ rows chung nào trong B.
  • Một right outer join sẽ cho kết quả là tất cả các rows trong B, cộng với bất kỳ rows chung nào trong A.
  • Một full outer join sẽ cho kết quả là sự kết hợp của A và B, tức là tất cả các rows trong A và tất cả các rows trong B. Nếu thứ gì đó trong A không có giá trị tương ứng trong B, thì phần B là null và ngược lại.

Collation là gì?


Collation định nghĩa một tập hợp các quy tắc dùng để xác định cách mà dữ liệu được sắp xếp và so sánh. Khi Collation đã được định nghĩa, bạn không thể thay đổi các quy tắc collation này cho đến khi bạn tạo lại hoặc xóa nó đi.

image

Row constructors là gì?


ROW Constructor hoặc Table Value Constructor có nghĩa là tạo một tập row bằng cách sử dụng mệnh đề VALUES(). Điều này cho phép nhiều row dữ liệu được chỉ định trong một câu lệnh DML duy nhất.

SELECT *
FROM (
VALUES
   (1, 'cust 1', '(111) 111-1111', 'address 1'),
   (2, 'cust 2', '(222) 222-2222', 'address 2'),
   (3, 'cust 3', '(333) 333-3333', 'address 3'),
   (4, 'cust 4', '(444) 444-4444', 'address 4'),
   (5, 'cust 5', '(555) 555-5555', 'address 5')
) AS C (CustID, CustName, phone, addr);
Avatar Techmely Team
VIẾT BỞI

Techmely Team