2.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.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.

2.3 Комментарии в SQL запросах

И еще один важный момент – это комментарии в SQL-запросах. Комментарии – это очень полезная вещь. Во-первых, в них можно писать пояснения и / или свои идеи. Во-вторых, с помощью комментариев можно отключить неработающий код. Или закомментировать старый вариант кода.

В SQL, как и в Java, есть однострочные и многострочные комментарии. Более того, многострочный комментарий выглядит совсем как в Java. Его вид:


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

Конечно, его можно использовать и в одну строку тоже. Пример:


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

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


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

Пример:


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

В примере выше мы закомментировали условие запроса, поэтому MySQL выполнит только запрос:


        SELECT * FROM employee
        

2.4 Произношение SQL

Если ты будешь общаться с иностранными заказчиками или проходить онлайн собеседование в американскую компанию, то тебя могут спросить про опыт работы с языком сиквел. Ты честно скажешь, что с ним не работал и тут же завалишь собеседование.

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

Тестирование задач происходит на других данных, не тех что в init_data. 
Чтобы нельзя было захардкодить результат.

undefined
1
Задача
Модуль 4. Работа с БД, 1 уровень, 1 лекция
Недоступна
task0101
Выбрать содержимое колонок id, name, age (в указанном порядке) из таблицы employee.
undefined
1
Задача
Модуль 4. Работа с БД, 1 уровень, 1 лекция
Недоступна
task0102
Выбрать содержимое колонок id, name, smth (в указанном порядке) из таблицы employee.
undefined
1
Задача
Модуль 4. Работа с БД, 1 уровень, 1 лекция
Недоступна
task0103
Выбрать содержимое колонок id, brand_logo, brand_name (в указанном порядке) из таблицы brand.
undefined
1
Задача
Модуль 4. Работа с БД, 1 уровень, 1 лекция
Недоступна
task0104
Выбрать содержимое всех колонок (используй *) из таблицы employee.
undefined
1
Задача
Модуль 4. Работа с БД, 1 уровень, 1 лекция
Недоступна
task0105
Выбрать содержимое всех колонок (используй *) из таблицы brand.
undefined
1
Задача
Модуль 4. Работа с БД, 1 уровень, 1 лекция
Недоступна
task0106
Выбрать содержимое всех колонок (используй *) из таблицы user_name.
undefined
1
Задача
Модуль 4. Работа с БД, 1 уровень, 1 лекция
Недоступна
task0107
Закомментируй вторую строку запроса. Используй однострочный комментарий.
undefined
1
Задача
Модуль 4. Работа с БД, 1 уровень, 1 лекция
Недоступна
task0108
Закомментируй вторую, третью и четвертую строки запроса. Используй один многострочный комментарий.
undefined
1
Задача
Модуль 4. Работа с БД, 1 уровень, 1 лекция
Недоступна
task0109
Закомментируй вторую, третью и четвертую строки запроса. Для комментирования второй строки используй однострочный комментарий. Для комментирования третьей и четвертой строк используй один многострочный комментарий.