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.
Чтобы нельзя было захардкодить результат.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ