1. Знайомство з мовою SQL

Якщо в тебе є база даних (БД), а в ній — таблиця з якимись даними,найчастіше завдання — знайти певні дані в цій таблиці. Саме для цього 40 років тому придумали мову SQL.

SQL розшифровується як Structured Query Language.

Найпростіший SQL-запит має такий вигляд:


        SELECT колонка1, колонка2, … колонкаN FROM таблиця
        

Припустимо, у тебе є таблиця employee зі списком співробітників вашого стартапу:

id name occupation salary age join_date
1 Шевченко Ігор Програміст 100,000 25 2012-06-30
2 Коваленко Максим Програміст 80,000 23 2013-08-12
3 Шевченко Данило Тестувальник 40,000 30 2014-01-01
4 Мельник Степан Директор 200,000 35 2015-05-12
5 Кірієнко Анастасія Офіс-менеджер 40,000 25 2015-10-10
6 Пончик кіт 1,000 3 2018-01-01

Ти хочеш написати запит, який відобразить імена співробітників та їх зарплати, тоді тобі потрібно написати запит:


        SELECT name, salary FROM employee
        

Ти отримаєш результат запиту:

name salary
Шевченко Ігор 100,000
Коваленко Максим 80,000
Шевченко Данило 40,000
Мельник Степан 200,000
Кірієнко Анастасія 40,000
Пончик 1,000

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


        SELECT * FROM employee
        

Ти отримаєш результат запиту:

id name occupation salary age join_date
1 Шевченко Ігор Програміст 100,000 25 2012-06-30
2 Коваленко Максим Програміст 80,000 23 2013-08-12
3 Шевченко Данило Тестувальник 40,000 30 2014-01-01
4 Мельник Степан Директор 200,000 35 2015-05-12
5 Кірієнко Анастасія Офіс-менеджер 40,000 25 2015-10-10
6 Пончик кіт 1,000 3 2018-01-01

2. Розширений вигляд SQL-запиту

Мову SQL спроєктували максимально user-friendly.

По-перше, реєстр тексту запиту не має значення. Ти можеш написати SELECT, Select або select — і все буде працювати. По-друге, перенесення рядків не враховується. СУБД все одно перетворить запит на один довгий рядок, так що можеш писати його як тобі завгодно.

Як ти вже, напевно, здогадуєшся, ключовими словами SELECT та FROM справа не обмежується. Інакше не було б стільки розмов навколо SQL. Розширений вигляд запиту SQL має вигляд:


  SELECT колонки
  FROM таблиця
  WHERE умова
  GROUP BY колонки
  HAVING колонки
  ORDER BY сортування
        

За допомогою ключового слова WHERE ти можеш встановити умову / фільтр для обраних рядків.

Приклад 1. Давай напишемо запит, який відбере співробітників із професією «Програміст»:


        SELECT * FROM employee WHERE occupation = 'Програміст'
        

І отримаємо такий результат запиту:

id name occupation salary age join_date
1 Шевченко Ігор Програміст 100,000 25 2012-06-30
2 Коваленко Максим Програміст 80,000 23 2013-08-12

Як бачиш, у результаті виконання запиту відображаються лише рядки, де професія співробітника називається «Програміст».

Ключові слова GROUP BY, ORDER BY та HAVING ми розглянемо в наступних лекціях. А в цій розберемо ще кілька прикладів зі словом WHERE.

Приклад 2. Тепер давай напишемо запит, який покаже нам усіх співробітників із зарплатнею більшою за 100К. Ось як він виглядатиме:


        SELECT * FROM employee WHERE salary > 100000

        

Отримаємо такий результат запиту:

id name occupation salary age join_date
4 Мельник Степан Директор 200,000 35 2015-05-12

Приклад 3. А тепер спробуємо щось складніше. Як відобразити всіх співробітників, яких було найнято в 2015 році? А ось так:


        SELECT * FROM employee WHERE YEAR(join_date) = 2015
        

Отримаємо такий результат запиту:

id name occupation salary age join_date
4 Мельник Степан Директор 200,000 35 2015-05-12
5 Кірієнко Анастасія Офіс-менеджер 40,000 25 2015-10-10

У цьому запиті ми використовуємо спеціальну функцію YEAR(), яка дозволяє отримати рік із дати, а потім порівнюємо рік дати з числом 2015 року.

3. Коментарі в SQL запитах

І ще один важливий момент — це коментарі в SQL-запитах. Коментарі — це дуже корисна річ. По-перше, у них можна писати пояснення та/або свої ідеї. По-друге, за допомогою коментарів можна вимкнути непрацюючий код. Або закоментувати старий варіант коду.

У SQL, як і в Java, є однорядкові та багаторядкові коментарі. Ба більше, багаторядковий коментар виглядає так само як і в Java. Його вигляд:


/*
 текст коментаря
 текст коментаря
 текст коментаря
*/
        

Звісно, його можна використовувати і в один рядок також. Приклад:


/*текст коментаря*/
        

Також є вигляд коментаря «від початку до кінця рядка», аналогічний джавовому «//». Втім, в SQL потрібно написати два символи мінус та пробіл. Загальний вигляд такого коментаря:


-- текст коментаря
        

Приклад:


        SELECT * FROM employee -- WHERE YEAR(join_date) = 2015 
        

У прикладі вище ми закоментували умову запиту, тому MySQL виконає лише запит:


        SELECT * FROM employee
        

4. Вимова SQL

Якщо ти спілкуватимешся з іноземними замовниками або проходитимеш онлайн-співбесіду в американській компанії, то тебе можуть запитати про досвід роботи з мовою сіквел. Ти чесно скажеш, що з нею не працював і одразу завалиш співбесіду.

А вся справа в тому, що мова SQL спочатку називалася SEQUEL, що вимовляється як сіквел (ˈsēkwəl), тому дуже часто в США та інших англомовних джерелах ви чутимете не «еск'юель», а «сіквел». Пишеться SQL, а читається сіквел. Ось такий історичний парадокс.