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ápANSI
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ằngOUTER 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ủastored 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ộtclustered 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ộtnon-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 JOIN
và FULL 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.
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);