Các khóa ngoại cung cấp tính toàn vẹn tham chiếu. Dữ liệu trong cột khóa ngoại được xác thực - giá trị chỉ có thể là một giá trị đã tồn tại trong bảng &cột được xác định trong khóa ngoại. Nó rất hiệu quả trong việc ngăn chặn "dữ liệu xấu" - ai đó không thể nhập bất cứ thứ gì họ muốn - số, văn bản ASCII, v.v. Điều đó có nghĩa là dữ liệu được chuẩn hóa - các giá trị lặp lại đã được xác định và tách biệt với bảng của họ, vì vậy không còn lo ngại nữa về cách xử lý phân biệt chữ hoa chữ thường trong văn bản ... và các giá trị nhất quán. Điều này dẫn đến phần tiếp theo - khóa ngoại là thứ bạn sử dụng để nối các bảng lại với nhau.
Truy vấn của bạn cho các dự án mà người dùng có sẽ không hoạt động - bạn đang tham chiếu một cột từ USERS
bảng khi không có tham chiếu đến bảng trong truy vấn và không có truy vấn con nào được sử dụng để lấy thông tin đó trước khi liên kết nó với PROJECTS
bàn. Những gì bạn thực sự sử dụng là:
SELECT p.*
FROM PROJECTS p
JOIN USERS u ON u.user_id = p.creator
WHERE u.username = 'John Smith'