Främmande nycklar ger referensintegritet. Data i en främmande nyckelkolumn är validerad - värdet kan bara vara ett som redan finns i tabellen och kolumnen som definieras i den främmande nyckeln. Det är mycket effektivt för att stoppa "dålig data" - någon kan inte skriva in vad de vill - siffror, ASCII-text, etc. Det betyder att data är normaliserade - upprepande värden har identifierats och isolerats till sin egen tabell, så det finns inga fler problem om att hantera skiftlägeskänslighet i text... och värdena är konsekventa. Detta leder till nästa del - främmande nycklar är vad du använder för att sammanfoga tabeller.
Din fråga för projekten som en användare har skulle inte fungera - du hänvisar till en kolumn från USERS
tabell när det inte finns någon referens till tabellen i frågan och det inte finns någon underfråga som används för att få den informationen innan den länkas till PROJECTS
tabell. Det du verkligen skulle använda är:
SELECT p.*
FROM PROJECTS p
JOIN USERS u ON u.user_id = p.creator
WHERE u.username = 'John Smith'