Язык SQL

Модуль 4. Работа с БД
1 уровень , 1 лекция
Открыта

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. 
Чтобы нельзя было захардкодить результат.

1
Задача
Модуль 4. Работа с БД, 1 уровень, 1 лекция
Недоступна
task0101
Выбрать содержимое колонок id, name, age (в указанном порядке) из таблицы employee.
1
Задача
Модуль 4. Работа с БД, 1 уровень, 1 лекция
Недоступна
task0102
Выбрать содержимое колонок id, name, smth (в указанном порядке) из таблицы employee.
1
Задача
Модуль 4. Работа с БД, 1 уровень, 1 лекция
Недоступна
task0103
Выбрать содержимое колонок id, brand_logo, brand_name (в указанном порядке) из таблицы brand.
1
Задача
Модуль 4. Работа с БД, 1 уровень, 1 лекция
Недоступна
task0104
Выбрать содержимое всех колонок (используй *) из таблицы employee.
1
Задача
Модуль 4. Работа с БД, 1 уровень, 1 лекция
Недоступна
task0105
Выбрать содержимое всех колонок (используй *) из таблицы brand.
1
Задача
Модуль 4. Работа с БД, 1 уровень, 1 лекция
Недоступна
task0106
Выбрать содержимое всех колонок (используй *) из таблицы user_name.
1
Задача
Модуль 4. Работа с БД, 1 уровень, 1 лекция
Недоступна
task0107
Закомментируй вторую строку запроса. Используй однострочный комментарий.
1
Задача
Модуль 4. Работа с БД, 1 уровень, 1 лекция
Недоступна
task0108
Закомментируй вторую, третью и четвертую строки запроса. Используй один многострочный комментарий.
1
Задача
Модуль 4. Работа с БД, 1 уровень, 1 лекция
Недоступна
task0109
Закомментируй вторую, третью и четвертую строки запроса. Для комментирования второй строки используй однострочный комментарий. Для комментирования третьей и четвертой строк используй один многострочный комментарий.
Комментарии (38)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Codemilex Уровень 2
7 февраля 2025
SQL - Скоя’таэль🧝‍♂️
Vsevolod Уровень 10
8 ноября 2024
В заключении лекции есть такой вот отрывок текста: "Тестирование задач происходит на других данных, не тех что в init_data. Чтобы нельзя было захардкодить результат." Скажите, пожалуйста, он вообще имеет отношение к лекции?
Virgilion Уровень 41
19 ноября 2024
Думаю что, да - это для тех, кто в JavaRush University, у них есть задачи как для квестов Servlets & JSP, так и для SQL & Hibernate.
Олег Уровень 106 Expert
15 сентября 2024
Максимальный фокус, максимальное понимание, задачи щёлкнул впервые за долгое время.
Nikolai Уровень 39
27 мая 2024
Почему никто не говорит о самом важном: кот "Васька" - тоже сотрудник компании
Дмитрий Уровень 32
15 апреля 2024
Сукель
Denis Gritsay Уровень 41
8 мая 2024
😆 cукаэль
Павел Уровень 19 Expert
21 февраля 2024
Прикол. На лекциях ментор рассказал, что postgres круто. Я установил его, разобрался как открыть бд из файла .sql в docker (всего за два дня) и терперь нужно делать задачи на MySql. Советую не заморачиваться, а делать задачи в браузере. Например на странице https://www.sql-practice.com. Особенно хорошо получается если в тренажере убирать параметр auto_increment.
23 октября 2023

Пишется SQL, а читается сиквел. Вот такой вот исторический парадокс.
Запомним!) сиквл,сиквл,сиквл,сиквл,сиквл,сиквл,сиквл,сиквл... SEQUEL
Andrei Paşa Уровень 27
29 сентября 2023
Познакомился с SQL ещё в Delphi 3.0 и всегда говорю "сиквел" только потому, что его удобнее, проще и быстрее произнести, чем "эскьюэль". Сколько драк пришлось пережить из-за этого, но теперь у меня есть исторический факт, за что отдельное Спасибо! :)
JaVu Уровень 9
21 сентября 2023
Забавно, я его тож называл сиквел, не знал, что это норма:D
Madina Baizhanova Уровень 29
22 августа 2023