8 питань
Питання на співбесіді з SQL
Питання рівня Junior
1. Які бувають типи JOIN і чим вони відрізняються?
Відповідь
INNER JOINповертає лише рядки, для яких знайшлася пара в обох таблицях.LEFT JOINповертає всі рядки лівої таблиці, а там, де пари немає, колонки правої заповнюютьсяNULL.RIGHT JOINробить те саме для правої таблиці, аFULL JOINповертає всі рядки з обох боків.CROSS JOINдає декартів добуток без умови зіставлення.Додаткове питання: Як знайти клієнтів, у яких немає жодного замовлення?
2. Що таке первинний і зовнішній ключ?
Відповідь
Первинний ключ однозначно ідентифікує рядок у таблиці: значення унікальні й не можуть бути
NULL, і в таблиці він один. Зовнішній ключ це колонка, яка посилається на первинний або унікальний ключ іншої таблиці. Він гарантує цілісність: не можна вставити посилання на неіснуючий рядок. Поведінку при видаленні батьківського рядка задають черезON DELETE CASCADE,SET NULLабоRESTRICT.Додаткове питання: Чим природний ключ відрізняється від сурогатного і що ви оберете?
3. Як працює
GROUP BYразом з агрегатними функціями?Відповідь
GROUP BYоб'єднує рядки з однаковими значеннями вказаних колонок в одну групу. Агрегатні функціїCOUNT,SUM,AVG,MIN,MAXрахуються окремо для кожної групи. УSELECTможна вказувати лише колонки зGROUP BYабо агрегати. Наприклад,SELECT customer_id, COUNT(*) FROM orders GROUP BY customer_idрахує замовлення кожного клієнта.Додаткове питання: Чим
COUNT(*)відрізняється відCOUNT(column)?4. У чому різниця між
WHEREіHAVING?Відповідь
WHEREфільтрує окремі рядки до групування, тому в ньому не можна використовувати агрегатні функції.HAVINGфільтрує вже сформовані групи післяGROUP BYі працює з агрегатами. Наприклад,HAVING COUNT(*) > 5залишить лише клієнтів з більш ніж п'ятьма замовленнями. Умови на звичайні колонки краще писати уWHERE, бо так обробляється менше рядків.Додаткове питання: У якому порядку логічно виконуються частини запиту
SELECT?5. Як у SQL працює
NULLі як його правильно перевіряти?Відповідь
NULLозначає відсутність значення, а не нуль чи порожній рядок. Будь-яке порівняння зNULLдаєUNKNOWN, томуcol = NULLніколи не спрацює, треба писатиIS NULLабоIS NOT NULL. Агрегати на кшталтSUMіAVGігноруютьNULL. Підставити значення за замовчуванням можна черезCOALESCE.Додаткове питання: Чому
NOT INз підзапитом, що повертаєNULL, може дати порожній результат?
Питання рівня Middle
1. Що таке індекс, як він прискорює запити і яка в нього ціна?
Відповідь
Індекс це окрема структура даних, у PostgreSQL за замовчуванням B-tree, яка дозволяє знайти рядки без повного сканування таблиці. Він прискорює
WHERE,JOINіORDER BYпо проіндексованих колонках. Ціна в тому, що індекс займає місце і сповільнюєINSERT,UPDATEіDELETE, бо його теж треба оновлювати. У складеному індексі важливий порядок колонок, а перевіряють використання індексу черезEXPLAIN ANALYZE.Додаткове питання: Чому запит з
WHERE lower(email) = ...може не використати звичайний індекс поemail?2. Що таке транзакція і що означає ACID?
Відповідь
Транзакція це група операцій, яка виконується як одне ціле: або всі зміни фіксуються через
COMMIT, або всі скасовуються черезROLLBACK. Atomicity означає саме це «все або нічого». Consistency гарантує, що база переходить з одного коректного стану в інший з дотриманням обмежень. Isolation визначає, наскільки паралельні транзакції бачать зміни одна одної, а Durability гарантує, що зафіксовані дані не зникнуть після збою.Додаткове питання: Які рівні ізоляції є в PostgreSQL і який стоїть за замовчуванням?
3. Що таке проблема N+1 запитів і як її виправити?
Відповідь
N+1 виникає, коли код спершу отримує список із N записів одним запитом, а потім для кожного робить ще один запит за пов'язаними даними. Це N+1 звернень до бази замість одного чи двох, і на великих списках затримка стає помітною. Виправляють через
JOIN, один запит ізWHERE id IN (...)або eager loading в ORM. Помітити проблему допомагає лог SQL-запитів.Додаткове питання: Як ця проблема проявляється в GraphQL і що таке DataLoader?
Тренуй ці питання
Вчи картки, відповідай текстом або голосом і отримуй оцінку AI. Потрібен вхід в акаунт.
Відповідай уголос і отримуй оцінку
Тут питання з еталонними відповідями. У застосунку ShortLesson ти відповідаєш сам, текстом або голосом, а AI оцінює відповідь за критеріями і ставить додаткове питання, як на справжній співбесіді.
Застосунок незабаром з'явиться в магазинах.