Поширені запитання щодо інтерв’ю SQL для Amazon, Apple, Google

SQL використовується в широкому спектрі завдань програмування. Важливо ознайомитись із SQL, якщо ви збираєтеся незабаром пройти співбесіду щодо позиції програмного забезпечення. Це особливо актуально, якщо ви збираєтеся брати співбесіду у провідній технологічній компанії, такій як Amazon, Apple або Google.

Цей посібник розгляне базовий синтаксис SQL як оновлення, а потім перелічить деякі загальні запитання щодо інтерв’ю в SQL. Дано відповіді на всі запитання, і ви можете використовувати цю інформацію для вивчення свого співбесіди з програмування.

Приклад базового синтаксису SQL

SQL - це міжнародний стандарт (ISO), але ви знайдете деякі відмінності між реалізаціями. Цей посібник використовує MySQL як приклад, оскільки це найпопулярніша реалізація SQL.

Як користуватися конкретною базою даних

Ось команда SQL, яка використовується для вибору бази даних, що містить таблиці для ваших операторів SQL:

USE fcc_sql_guides_database; 

Речення SELECT і FROM

За допомогою SELECT виберіть, які стовпці даних ви хочете відображати в результатах. Є також параметри, за допомогою яких можна показати дані, що не є стовпцем таблиці.

У наступному прикладі показано два стовпці, вибрані з таблиці “студент”, і два обчислених стовпця. Перший із розрахункових стовпців - безглузде число, а інший - системна дата.

SELECT studentID, FullName, 3+2 AS five, now() AS currentDate FROM student; 
зображення-1

Речення WHERE

Речення WHERE визначає умову під час отримання даних. Речення WHERE використовується для обмеження кількості повернутих рядків. Він часто використовується в операторі SELECT, але може використовуватися і в інших операторах, таких як UPDATE та DELETE.

Ось основний синтаксис речення WHERE:

SELECT column1, column2 FROM table_name WHERE [condition]

Умова в реченні WHERE може включати логічні оператори, такі як>, <, =, LIKE, NOT, AND, OR.

Ось приклад SQL-статуту з використанням речення WHERE. Він вказує, що якщо хтось із студентів має певні бали SAT (1000, 1400), вони не будуть представлені:

SELECT studentID, FullName, sat_score, recordUpdated FROM student WHERE (studentID BETWEEN 1 AND 5 OR studentID = 8 OR FullName LIKE '%Maximo%') AND sat_score NOT IN (1000, 1400); 
зображення-1

ЗАМОВИТИ (ASC, DESC)

ORDER BY дає нам спосіб сортувати набір результатів за одним або кількома елементами в розділі SELECT.

Ось той самий список, що і вище, але відсортований за повним ім’ям студента. Порядок сортування за замовчуванням - за зростанням (ASC), але для сортування в протилежному порядку (за спаданням) ви використовуєте DESC, як у прикладі нижче:

SELECT studentID, FullName, sat_score FROM student WHERE (studentID BETWEEN 1 AND 5 OR studentID = 8 OR FullName LIKE '%Maximo%') AND sat_score NOT IN (1000, 1400) ORDER BY FullName DESC; 
зображення-1

ГРУПУЙТЕ ЗА І

GROUP BY дає нам можливість поєднувати рядки та сукупні дані. Речення HAVING подібне до вищезазначеного речення WHERE, за винятком того, що воно діє на згруповані дані.

Заява SQL нижче відповідає на запитання: „Які кандидати отримали найбільшу кількість внесків (упорядкованих за підрахунком (*)) у 2016 році, але лише ті, хто мав понад 80 внесків?“

Впорядкування цього набору даних за спаданням (DESC) ставить кандидатів із найбільшою кількістю внесків у верхню частину списку.

SELECT Candidate, Election_year, SUM(Total_$), COUNT(*) FROM combined_party_data WHERE Election_year = 2016 GROUP BY Candidate, Election_year HAVING count(*) > 80 ORDER BY count(*) DESC; 
зображення-1

Поширені запитання щодо інтерв’ю SQL

Що таке внутрішнє об'єднання в SQL?

Це тип об’єднання за замовчуванням, якщо жодне об’єднання не вказано. Він повертає всі рядки, у яких є принаймні одне збіг в обох таблицях.

SELECT * FROM A x JOIN B y ON y.aId = x.Id

Що таке ліве приєднання в SQL?

Ліве з'єднання повертає всі рядки з лівої таблиці, а відповідні рядки з правої таблиці. Рядки в лівій таблиці будуть повернуті, навіть якщо в правій таблиці не було збігів. Рядки з лівої таблиці, які не збігаються в правій таблиці, матимуть nullзначення правої таблиці.

SELECT * FROM A x LEFT JOIN B y ON y.aId = x.Id

Що таке правильне приєднання в SQL?

Праве з'єднання повертає всі рядки з правої таблиці, а відповідні рядки з лівої таблиці. На противагу лівому об’єднанню це поверне всі рядки з правої таблиці, навіть якщо в лівій таблиці немає відповідності. Рядки в правій таблиці, які не мають збігів у лівій таблиці, матимуть nullзначення для лівих стовпців таблиці.

SELECT * FROM A x RIGHT JOIN B y ON y.aId = x.Id

Що таке повне приєднання або повне зовнішнє приєднання в SQL?

Повне зовнішнє з'єднання і повне з'єднання - це одне і те ж. Повне зовнішнє приєднання або повне приєднання повертає всі рядки з обох таблиць, збігаючи рядки скрізь, де можна зробити збіг, і розміщуючи NULL в місцях, де не існує відповідного рядка.

SELECT Customers.CustomerName, Orders.OrderID FROM Customers FULL OUTER JOIN Orders ON Customers.CustomerID=Orders.CustomerID ORDER BY Customers.CustomerName

Який результат має наступна команда?

DROP VIEW view_name

Це призведе до помилки, оскільки ви не можете виконати операцію DML у поданні. Операція DML - це будь-яка операція, яка обробляє дані, такі як DROP, INSERT, UPDATE та DELETE.

Чи можемо ми виконати відкат після використання команди ALTER?

Ні, оскільки ALTER - це команда DDL, а сервер Oracle виконує автоматичний COMMIT, коли виконуються оператори DDL. Оператори DDL визначають такі структури даних, як CREATE tableі ALTER table.

Яке єдине обмеження, яке застосовує правила на рівні стовпців?

NOT NULL - це єдине обмеження, яке працює на рівні стовпця.

Що таке псевдостовпці в SQL? Наведіть кілька прикладів?

Псевдостовпець поводиться як стовпець, але насправді не зберігається в таблиці, оскільки всі це створені значення. Значення псевдоколонки можна вибрати, але їх не можна вставити, оновити чи видалити.

ROWNUM, ROWID, USER, CURRVAL, NEXTVAL etc.

Create a user "my723acct" with password "kmd26pt". Use the "user_data" and temporary data tablespaces provided by PO8 and provide to this user 10M of storage space in "user_data" and 5M of storage space in "temporary_data".

CREATE USER my723acct IDENTIFIED BY kmd26pt DEFAULT TABLESPACE user_data TEMPORARY TABLESPACE temporary_data QUOTA 10M on user_data QUOTA 5M on temporary_data

Create the role role_tables_and_views.

CREATE ROLE role_tables_and_views

Grant to the role of the previous question the privileges to connect to the database and the privileges to create tables and views.

The privilege to connect to the database is CREATE SESSION The privilege to create table is CREATE TABLE The privilege to create view is CREATE VIEW

 GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO role_tables_and_views

Grant the previous role in the question to the users anny and rita.

 GRANT role_tables_and_views TO anny, rita

Write a command to change the password of the user rita from "abcd" to "dfgh"

 ALTER USER rita IDENTIFIED BY dfgh

The users rita and anny do not have SELECT privileges on the table INVENTORY that was created by scott. Write a command to allow scott to grant the users SELECT privileges on theses  tables.

 GRANT select ON inventory TO rita, anny

User rita has been transferred and no longer needs the privilege that was granted to her through the rolerole_tables_and_views. Write a command to remove her from her previously given privileges. She should still be able to connect to the database.

REVOKE select ON scott.inventory FROM rita REVOKE create table, create view FROM rita

Користувач Rita, якого перевели, зараз переходить до іншої компанії. Оскільки створені нею об'єкти більше не використовуються, напишіть команду на видалення цього користувача та всіх її об'єктів.

Опція КАСКАД необхідна для видалення всіх об'єктів користувача з бази даних.

DROP USER rita CASCADE

Напишіть запит SQL, щоб знайти n-й найвищий показник "Зарплата" з таблиці "Співробітник".

 SELECT TOP 1 Salary FROM ( SELECT DISTINCT TOP N Salary FROM Employee ORDER BY Salary DESC ) ORDER BY Salary ASC

Висновок

Якщо ви думаєте, що зможете відповісти на всі ці запитання, ви можете бути готові до співбесіди. Удачі!