0 added
0 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#статьи</a></p>
1
<p><a>#статьи</a></p>
2
<ul><li>14 июл 2023</li>
2
<ul><li>14 июл 2023</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><p>Эти команды нужны разработчикам, аналитикам, маркетологам и всем, кто хочет выжимать из данных максимум пользы.</p>
4
</ul><p>Эти команды нужны разработчикам, аналитикам, маркетологам и всем, кто хочет выжимать из данных максимум пользы.</p>
5
<p>Иллюстрация: Оля Ежак для Skillbox Media</p>
5
<p>Иллюстрация: Оля Ежак для Skillbox Media</p>
6
<p>Любитель научной фантастики и технологического прогресса. Хорошо сочетает в себе заумного технаря и утончённого гуманитария. Пишет про IT и радуется этому.</p>
6
<p>Любитель научной фантастики и технологического прогресса. Хорошо сочетает в себе заумного технаря и утончённого гуманитария. Пишет про IT и радуется этому.</p>
7
<p>SQL - это язык запросов для управления реляционными базами данных. "Реляционные" означает, что все данные хранятся в виде взаимосвязанных таблиц. А SQL как раз используют для того, чтобы как-то влиять на элементы внутри этих таблиц: добавлять, удалять, изменять и так далее.</p>
7
<p>SQL - это язык запросов для управления реляционными базами данных. "Реляционные" означает, что все данные хранятся в виде взаимосвязанных таблиц. А SQL как раз используют для того, чтобы как-то влиять на элементы внутри этих таблиц: добавлять, удалять, изменять и так далее.</p>
8
<p>Язык SQL лежит в основе систем управления реляционными базами данных, таких как MySQL, PostgreSQL, Oracle и т.д. Таким образом, чтобы работать, скажем, с базой данных MySQL, нужно сперва изучить язык запросов SQL.</p>
8
<p>Язык SQL лежит в основе систем управления реляционными базами данных, таких как MySQL, PostgreSQL, Oracle и т.д. Таким образом, чтобы работать, скажем, с базой данных MySQL, нужно сперва изучить язык запросов SQL.</p>
9
<p>По синтаксису SQL-запросы максимально похожи на обычные предложения:</p>
9
<p>По синтаксису SQL-запросы максимально похожи на обычные предложения:</p>
10
SELECT (Name, Age) FROM Clients WHERE Age > 20<p>Если перевести на русский, получится что-то вроде:</p>
10
SELECT (Name, Age) FROM Clients WHERE Age > 20<p>Если перевести на русский, получится что-то вроде:</p>
11
Выбрать Имя и Возраст из Таблицы с клиентами, где Возраст больше 20<p>В этой статье мы научимся читать такие запросы, понимать, как они работают, а заодно попрактикуемся в создании собственных. В результате у нас получится простая база данных с котами и их владельцами.</p>
11
Выбрать Имя и Возраст из Таблицы с клиентами, где Возраст больше 20<p>В этой статье мы научимся читать такие запросы, понимать, как они работают, а заодно попрактикуемся в создании собственных. В результате у нас получится простая база данных с котами и их владельцами.</p>
12
<p>Подробнее о языке SQL и принципах его работы мы рассказывали в <a>одной из предыдущих статей</a>. Если хотите чуть лучше разбираться в технических нюансах языка, можно начать с неё. Но это не обязательно :)</p>
12
<p>Подробнее о языке SQL и принципах его работы мы рассказывали в <a>одной из предыдущих статей</a>. Если хотите чуть лучше разбираться в технических нюансах языка, можно начать с неё. Но это не обязательно :)</p>
13
<p>Перед тем как писать команды, разберёмся, какие есть виды запросов в SQL. Всего их четыре -<strong>DDL</strong>,<strong>DML</strong>,<strong>DCL</strong>и <strong>TCL</strong>. Каждый из них выполняет определённые действия - давайте разберём каждую категорию подробнее.</p>
13
<p>Перед тем как писать команды, разберёмся, какие есть виды запросов в SQL. Всего их четыре -<strong>DDL</strong>,<strong>DML</strong>,<strong>DCL</strong>и <strong>TCL</strong>. Каждый из них выполняет определённые действия - давайте разберём каждую категорию подробнее.</p>
14
<p><strong>DDL</strong>, или<strong>data definition language</strong>, нужен, чтобы определять данные. Эти запросы позволяют настраивать базу данных - создавать с нуля и прописывать её структуру.</p>
14
<p><strong>DDL</strong>, или<strong>data definition language</strong>, нужен, чтобы определять данные. Эти запросы позволяют настраивать базу данных - создавать с нуля и прописывать её структуру.</p>
15
<p>Примеры DDL-запросов:<strong>CREATE</strong>,<strong>DROP</strong>,<strong>RENAME</strong>,<strong>ALTER</strong>.</p>
15
<p>Примеры DDL-запросов:<strong>CREATE</strong>,<strong>DROP</strong>,<strong>RENAME</strong>,<strong>ALTER</strong>.</p>
16
<p><strong>DML</strong>, или<strong>data manipulation language</strong>, нужен, чтобы управлять данными в таблицах. Эти запросы помогают добавлять, обновлять, удалять и выбирать данные.</p>
16
<p><strong>DML</strong>, или<strong>data manipulation language</strong>, нужен, чтобы управлять данными в таблицах. Эти запросы помогают добавлять, обновлять, удалять и выбирать данные.</p>
17
<p>Примеры DML-запросов:<strong>SELECT</strong>,<strong>UPDATE</strong>,<strong>DELETE</strong>,<strong>INSERT</strong>.</p>
17
<p>Примеры DML-запросов:<strong>SELECT</strong>,<strong>UPDATE</strong>,<strong>DELETE</strong>,<strong>INSERT</strong>.</p>
18
<p><strong>DCL</strong>, или<strong>data control language</strong>, нужен, чтобы выдавать или отзывать права доступа для пользователей.</p>
18
<p><strong>DCL</strong>, или<strong>data control language</strong>, нужен, чтобы выдавать или отзывать права доступа для пользователей.</p>
19
<p>Примеры DCL-запросов:<strong>GRANT</strong>,<strong>REVOKE</strong>,<strong>DENY</strong>.</p>
19
<p>Примеры DCL-запросов:<strong>GRANT</strong>,<strong>REVOKE</strong>,<strong>DENY</strong>.</p>
20
<p><strong>TCL</strong>, или<strong>transaction control language</strong>, нужен, чтобы управлять транзакциями. Это могут быть запросы, связанные с подтверждением или откатом изменений в базе данных.</p>
20
<p><strong>TCL</strong>, или<strong>transaction control language</strong>, нужен, чтобы управлять транзакциями. Это могут быть запросы, связанные с подтверждением или откатом изменений в базе данных.</p>
21
<p>Примеры TCL-запросов:<strong>COMMIT</strong>,<strong>ROLLBACK</strong>,<strong>BEGIN</strong>.</p>
21
<p>Примеры TCL-запросов:<strong>COMMIT</strong>,<strong>ROLLBACK</strong>,<strong>BEGIN</strong>.</p>
22
Вроде бы несложно - всего четыре вида запросов, даже меньше, чем времён в английском языке<em>Инфографика: Оля Ежак для Skillbox Media</em><p>Теперь перейдём к тому, как SQL-запросы составляются и из каких элементов состоят.</p>
22
Вроде бы несложно - всего четыре вида запросов, даже меньше, чем времён в английском языке<em>Инфографика: Оля Ежак для Skillbox Media</em><p>Теперь перейдём к тому, как SQL-запросы составляются и из каких элементов состоят.</p>
23
<p>Перед вами - пример классического SQL-запроса, который состоит из шести самых популярных операторов: два из них обязательные, а другие четыре - используются по обстоятельствам. Вместе они выглядят так:</p>
23
<p>Перед вами - пример классического SQL-запроса, который состоит из шести самых популярных операторов: два из них обязательные, а другие четыре - используются по обстоятельствам. Вместе они выглядят так:</p>
24
<ul><li><strong>SELECT</strong> - выбирает отдельные столбцы или всю таблицу целиком (обязательный);</li>
24
<ul><li><strong>SELECT</strong> - выбирает отдельные столбцы или всю таблицу целиком (обязательный);</li>
25
<li><strong>FROM</strong> - из какой таблицы получить данные (обязательный);</li>
25
<li><strong>FROM</strong> - из какой таблицы получить данные (обязательный);</li>
26
<li><strong>WHERE</strong> - условие, по которому SQL выбирает данные;</li>
26
<li><strong>WHERE</strong> - условие, по которому SQL выбирает данные;</li>
27
<li><strong>GROUP</strong><strong>BY</strong> - столбец, по которому мы будут группироваться данные;</li>
27
<li><strong>GROUP</strong><strong>BY</strong> - столбец, по которому мы будут группироваться данные;</li>
28
<li><strong>HAVING</strong> - условие, по которому сгруппированные данные будут отфильтрованы;</li>
28
<li><strong>HAVING</strong> - условие, по которому сгруппированные данные будут отфильтрованы;</li>
29
<li><strong>ORDER</strong><strong>BY</strong> - столбец, по которому данные будут отсортированы;</li>
29
<li><strong>ORDER</strong><strong>BY</strong> - столбец, по которому данные будут отсортированы;</li>
30
</ul><p>Давайте разберём каждую из частей этого запроса по порядку.</p>
30
</ul><p>Давайте разберём каждую из частей этого запроса по порядку.</p>
31
<p>Любая команда должна начинаться с ключевого слова - или действия, которое должно произойти. Например, выбрать строку, вставить новую, изменить старую или удалить таблицу целиком.</p>
31
<p>Любая команда должна начинаться с ключевого слова - или действия, которое должно произойти. Например, выбрать строку, вставить новую, изменить старую или удалить таблицу целиком.</p>
32
<p>Одно из таких ключевых слов - SELECT. Оно выбирает отдельные столбцы или таблицу целиком, чтобы потом передать данные другим запросам на обработку.</p>
32
<p>Одно из таких ключевых слов - SELECT. Оно выбирает отдельные столбцы или таблицу целиком, чтобы потом передать данные другим запросам на обработку.</p>
33
<p>В качестве примера выберем столбцы Name и Age из таблицы Clients:</p>
33
<p>В качестве примера выберем столбцы Name и Age из таблицы Clients:</p>
34
SELECT (Name, Age) FROM Clients<p>На выходе будут все строки таблицы, принадлежащие столбцам Name и Age.</p>
34
SELECT (Name, Age) FROM Clients<p>На выходе будут все строки таблицы, принадлежащие столбцам Name и Age.</p>
35
<p>Эта часть ставится после SELECT и нужна затем, чтобы указать, из какой таблицы или источника данных приходит информация. Здесь прописывается имя таблицы, с которой мы хотим работать.</p>
35
<p>Эта часть ставится после SELECT и нужна затем, чтобы указать, из какой таблицы или источника данных приходит информация. Здесь прописывается имя таблицы, с которой мы хотим работать.</p>
36
<p>Например, ранее мы уже выбирали данные из таблицы Clients:</p>
36
<p>Например, ранее мы уже выбирали данные из таблицы Clients:</p>
37
SELECT (Name, Age) FROM Clients<p>В SQL всё построено на таблицах. Поэтому, если нужно получить данные из другого места - указываем другую таблицу.</p>
37
SELECT (Name, Age) FROM Clients<p>В SQL всё построено на таблицах. Поэтому, если нужно получить данные из другого места - указываем другую таблицу.</p>
38
<p>Если нужно отфильтровать данные, используем слово WHERE. После него указывается условие, которому должны удовлетворять строки, чтобы они попали в результат выполнения запроса.</p>
38
<p>Если нужно отфильтровать данные, используем слово WHERE. После него указывается условие, которому должны удовлетворять строки, чтобы они попали в результат выполнения запроса.</p>
39
<p>Например, этот запрос вернёт все строки из таблицы, где значения Age больше 20:</p>
39
<p>Например, этот запрос вернёт все строки из таблицы, где значения Age больше 20:</p>
40
SELECT (Name, Age) FROM Clients WHERE Age > 20<p>Этот оператор помогает нам сгруппировать данные по определённым столбцам. В результате получим новую таблицу, составленную на основе выбранных данных.</p>
40
SELECT (Name, Age) FROM Clients WHERE Age > 20<p>Этот оператор помогает нам сгруппировать данные по определённым столбцам. В результате получим новую таблицу, составленную на основе выбранных данных.</p>
41
<p>Например, сгруппируем результат предыдущего запроса по городам:</p>
41
<p>Например, сгруппируем результат предыдущего запроса по городам:</p>
42
SELECT (Name, Age) FROM Clients WHERE Age > 20 GROUP BY City<p>Запрос вернёт клиентов старше 20 лет и сгруппирует их по городам. Главное - чтобы столбец City присутствовал в таблице.</p>
42
SELECT (Name, Age) FROM Clients WHERE Age > 20 GROUP BY City<p>Запрос вернёт клиентов старше 20 лет и сгруппирует их по городам. Главное - чтобы столбец City присутствовал в таблице.</p>
43
<p>Нужен, чтобы собирать группы по определённым условиям. Его обычно используют в паре с GROUP BY, а по своей функциональности он похож на WHERE.</p>
43
<p>Нужен, чтобы собирать группы по определённым условиям. Его обычно используют в паре с GROUP BY, а по своей функциональности он похож на WHERE.</p>
44
<p>Например, укажем, чтобы в группы добавлялись только клиенты с суммой заказа от 1000 рублей:</p>
44
<p>Например, укажем, чтобы в группы добавлялись только клиенты с суммой заказа от 1000 рублей:</p>
45
SELECT (Name, PaymentAmount, Age) FROM Clients WHERE Age > 20 GROUP BY City HAVING PaymentAmount > 1000<p>Так как наш запрос растёт, будем каждую его часть выносить на новую строку - чтобы не запутаться. На корректность запроса это не повлияет, а читать его станет куда удобнее.</p>
45
SELECT (Name, PaymentAmount, Age) FROM Clients WHERE Age > 20 GROUP BY City HAVING PaymentAmount > 1000<p>Так как наш запрос растёт, будем каждую его часть выносить на новую строку - чтобы не запутаться. На корректность запроса это не повлияет, а читать его станет куда удобнее.</p>
46
<p>Позволяет сортировать полученные строки по возрастанию или убыванию. Работает как с числами, так и с символами. В качестве параметра нужно указать столбец, по которому надо выполнить сортировку.</p>
46
<p>Позволяет сортировать полученные строки по возрастанию или убыванию. Работает как с числами, так и с символами. В качестве параметра нужно указать столбец, по которому надо выполнить сортировку.</p>
47
<p>Допустим, если хотим отсортировать клиентов по возрасту - от младшего к старшему, - добавляем команду ORDER BY Age:</p>
47
<p>Допустим, если хотим отсортировать клиентов по возрасту - от младшего к старшему, - добавляем команду ORDER BY Age:</p>
48
SELECT (Name, PaymentAmount, Age) FROM Clients WHERE Age > 20 GROUP BY City HAVING PaymentAmount > 1000 ORDER BY Age<p>А чтобы отсортировать по убыванию, просто добавляем слово DESC:</p>
48
SELECT (Name, PaymentAmount, Age) FROM Clients WHERE Age > 20 GROUP BY City HAVING PaymentAmount > 1000 ORDER BY Age<p>А чтобы отсортировать по убыванию, просто добавляем слово DESC:</p>
49
SELECT (Name, PaymentAmount, Age) FROM Clients WHERE Age > 20 GROUP BY City HAVING PaymentAmount > 1000 ORDER BY Age DESC<p>Кроме этих шести операторов есть масса дополнительных - например, VIEW, UNION, LIKE. Они уникальны для каждого запроса и используются в зависимости от ситуации. Конечно, в этой статье мы не успеем разобрать все - если вам нужен полный список, можно заглянуть в эту<a>шпаргалку по SQL</a>.</p>
49
SELECT (Name, PaymentAmount, Age) FROM Clients WHERE Age > 20 GROUP BY City HAVING PaymentAmount > 1000 ORDER BY Age DESC<p>Кроме этих шести операторов есть масса дополнительных - например, VIEW, UNION, LIKE. Они уникальны для каждого запроса и используются в зависимости от ситуации. Конечно, в этой статье мы не успеем разобрать все - если вам нужен полный список, можно заглянуть в эту<a>шпаргалку по SQL</a>.</p>
50
<p>Со структурой запросов разобрались, пришло время посоздавать таблицы. В качестве примера будем наполнять базу данных с котами, живущими в разных городах России.</p>
50
<p>Со структурой запросов разобрались, пришло время посоздавать таблицы. В качестве примера будем наполнять базу данных с котами, живущими в разных городах России.</p>
51
<p>Первым делом создаём базу данных. Делается это с помощью команды CREATE DATABASE:</p>
51
<p>Первым делом создаём базу данных. Делается это с помощью команды CREATE DATABASE:</p>
52
CREATE DATABASE CatsCatsCats;<p>Внутри пока ничего нет. Но это пока.</p>
52
CREATE DATABASE CatsCatsCats;<p>Внутри пока ничего нет. Но это пока.</p>
53
<p>Запрос создаёт таблицу в базе данных. В общем виде команда выглядит так:</p>
53
<p>Запрос создаёт таблицу в базе данных. В общем виде команда выглядит так:</p>
54
CREATE TABLE table_name ( column1 datatype, column2 datatype, column3 datatype );<p>Чтобы задать свои параметры таблицы, на месте table_name пишем название, а в скобках указываем названия колонок и типы данных, которые они будут содержать.</p>
54
CREATE TABLE table_name ( column1 datatype, column2 datatype, column3 datatype );<p>Чтобы задать свои параметры таблицы, на месте table_name пишем название, а в скобках указываем названия колонок и типы данных, которые они будут содержать.</p>
55
<p>В SQL много типов данных. Вот примеры самых популярных:</p>
55
<p>В SQL много типов данных. Вот примеры самых популярных:</p>
56
<ul><li>INT - целое число;</li>
56
<ul><li>INT - целое число;</li>
57
<li>DATETIME - дата;</li>
57
<li>DATETIME - дата;</li>
58
<li>VARCHAR - строка;</li>
58
<li>VARCHAR - строка;</li>
59
<li>FLOAT - десятичное число.</li>
59
<li>FLOAT - десятичное число.</li>
60
</ul><p>В нашей таблице используется два типа: строки (VARCHAR) и целые числа (INT):</p>
60
</ul><p>В нашей таблице используется два типа: строки (VARCHAR) и целые числа (INT):</p>
61
CREATE TABLE CatsAndOwners ( CatID int(6) NOT NULL, CatName varchar(255) NOT NULL, CatAge int(6) NOT NULL, CatColor varchar(255) NOT NULL, CatOwnerName varchar(255) NOT NULL );<p>В примере выше мы добавили пять столбцов: уникальный номер кота CatID, его имя CatName, возраст CatAge, цвет CatColor и имя владельца CatOwnerName. А ещё задали, чтобы ни одно из полей не было пустым - NOT NULL.</p>
61
CREATE TABLE CatsAndOwners ( CatID int(6) NOT NULL, CatName varchar(255) NOT NULL, CatAge int(6) NOT NULL, CatColor varchar(255) NOT NULL, CatOwnerName varchar(255) NOT NULL );<p>В примере выше мы добавили пять столбцов: уникальный номер кота CatID, его имя CatName, возраст CatAge, цвет CatColor и имя владельца CatOwnerName. А ещё задали, чтобы ни одно из полей не было пустым - NOT NULL.</p>
62
<p>Цифры рядом с типами данных обозначают, сколько бит выделяется для поля. Например, varchar (255) значит, что строка может принимать размер от 0 до 255 бит - по объёму данных это приблизительно соответствует фразе "Я люблю язык SQL".</p>
62
<p>Цифры рядом с типами данных обозначают, сколько бит выделяется для поля. Например, varchar (255) значит, что строка может принимать размер от 0 до 255 бит - по объёму данных это приблизительно соответствует фразе "Я люблю язык SQL".</p>
63
<p>Созданная таблица пока выглядит пустовато. Читайте дальше, чтобы узнать, как наполнить её данными и научиться группировать их по своему усмотрению.</p>
63
<p>Созданная таблица пока выглядит пустовато. Читайте дальше, чтобы узнать, как наполнить её данными и научиться группировать их по своему усмотрению.</p>
64
<strong>CatID</strong>CatNameCatAgeCatColorCatOwnerName<p>Если вдруг забыли добавить столбец во время создания таблицы - ничего страшного. Новые колонки можно добавлять с помощью команды ALTER TABLE. Давайте добавим город проживания кота:</p>
64
<strong>CatID</strong>CatNameCatAgeCatColorCatOwnerName<p>Если вдруг забыли добавить столбец во время создания таблицы - ничего страшного. Новые колонки можно добавлять с помощью команды ALTER TABLE. Давайте добавим город проживания кота:</p>
65
ALTER TABLE CatsAndOwners ADD City varchar(255);<p>В запросе указываем, в какую таблицу хотим внести изменения, а затем с помощью ключевого слова ADD добавляем название столбца и его тип данных.</p>
65
ALTER TABLE CatsAndOwners ADD City varchar(255);<p>В запросе указываем, в какую таблицу хотим внести изменения, а затем с помощью ключевого слова ADD добавляем название столбца и его тип данных.</p>
66
<p>Теперь таблица выглядит так:</p>
66
<p>Теперь таблица выглядит так:</p>
67
<strong>CatID</strong>CatNameCatAgeCatColorCatOwnerName<strong>City</strong><p>Вообще, возможности команды ALTER TABLE немного шире, чем мы разобрали в этом примере. Она заточена не только на добавление новых колонок, но и на удаление и редактирование существующих. Подробнее об этом поговорим чуть дальше, а пока - продолжим наполнять таблицу.</p>
67
<strong>CatID</strong>CatNameCatAgeCatColorCatOwnerName<strong>City</strong><p>Вообще, возможности команды ALTER TABLE немного шире, чем мы разобрали в этом примере. Она заточена не только на добавление новых колонок, но и на удаление и редактирование существующих. Подробнее об этом поговорим чуть дальше, а пока - продолжим наполнять таблицу.</p>
68
<p>Позволяет добавить новую строку в таблицу. Для этого нужно указать, какие столбцы мы хотим заполнить и передать значения для них с помощью команды VALUES. Добавим несколько котов:</p>
68
<p>Позволяет добавить новую строку в таблицу. Для этого нужно указать, какие столбцы мы хотим заполнить и передать значения для них с помощью команды VALUES. Добавим несколько котов:</p>
69
INSERT INTO CatsAndOwners(CatID, CatName, CatAge, CatColor, CatOwnerName, City) VALUES (1, 'Мурка', 3, 'Чёрная', 'Дмитрий', 'Москва'); INSERT INTO CatsAndOwners(CatID, CatName, CatAge, CatColor, CatOwnerName, City) VALUES (2, 'Белла', 7, 'Белая', 'Максим', 'Саратов'); INSERT INTO CatsAndOwners(CatID, CatName, CatAge, CatColor, CatOwnerName, City) VALUES (3, 'Симба', 5, 'Рыжий', 'Екатерина', 'Санкт-Петербург'); INSERT INTO CatsAndOwners(CatID, CatName, CatAge, CatColor, CatOwnerName, City) VALUES (4, 'Лео', 2, 'Полосатый', 'Александр', 'Екатеринбург'); INSERT INTO CatsAndOwners(CatID, CatName, CatAge, CatColor, CatOwnerName, City) VALUES (5, 'Мася', 1, 'Серый', 'Анна', 'Москва');<p><strong>Обратите внимание:</strong>строки указываются в одинарных кавычках, а числа - без них. И, к сожалению, нельзя добавить несколько строк одной командой.</p>
69
INSERT INTO CatsAndOwners(CatID, CatName, CatAge, CatColor, CatOwnerName, City) VALUES (1, 'Мурка', 3, 'Чёрная', 'Дмитрий', 'Москва'); INSERT INTO CatsAndOwners(CatID, CatName, CatAge, CatColor, CatOwnerName, City) VALUES (2, 'Белла', 7, 'Белая', 'Максим', 'Саратов'); INSERT INTO CatsAndOwners(CatID, CatName, CatAge, CatColor, CatOwnerName, City) VALUES (3, 'Симба', 5, 'Рыжий', 'Екатерина', 'Санкт-Петербург'); INSERT INTO CatsAndOwners(CatID, CatName, CatAge, CatColor, CatOwnerName, City) VALUES (4, 'Лео', 2, 'Полосатый', 'Александр', 'Екатеринбург'); INSERT INTO CatsAndOwners(CatID, CatName, CatAge, CatColor, CatOwnerName, City) VALUES (5, 'Мася', 1, 'Серый', 'Анна', 'Москва');<p><strong>Обратите внимание:</strong>строки указываются в одинарных кавычках, а числа - без них. И, к сожалению, нельзя добавить несколько строк одной командой.</p>
70
<p>Блеск! Таблица наконец-то обзавелась данными:</p>
70
<p>Блеск! Таблица наконец-то обзавелась данными:</p>
71
<strong>CatID</strong>CatNameCatAgeCatColorCatOwnerName<strong>City</strong>1Мурка3ЧёрнаяДмитрийМосква2Белла7БелаяМаксимСаратов3Симба5РыжийЕкатеринаСанкт-Петербург4Лео2ПолосатыйАлександрЕкатеринбург5Мася1СерыйАннаМосква<p>Запрос нужен, чтобы доставать данные из таблицы. Ранее мы уже успели познакомиться с этой командой, - давайте немного освежим память. Достанем из таблицы список котов и их владельцев:</p>
71
<strong>CatID</strong>CatNameCatAgeCatColorCatOwnerName<strong>City</strong>1Мурка3ЧёрнаяДмитрийМосква2Белла7БелаяМаксимСаратов3Симба5РыжийЕкатеринаСанкт-Петербург4Лео2ПолосатыйАлександрЕкатеринбург5Мася1СерыйАннаМосква<p>Запрос нужен, чтобы доставать данные из таблицы. Ранее мы уже успели познакомиться с этой командой, - давайте немного освежим память. Достанем из таблицы список котов и их владельцев:</p>
72
SELECT CatName, CatOwnerName FROM CatsAndOwners;<p>Результат:</p>
72
SELECT CatName, CatOwnerName FROM CatsAndOwners;<p>Результат:</p>
73
CatNameCatOwnerNameМуркаДмитрийБеллаМаксимСимбаЕкатеринаЛеоАлександрМасяАнна<p>Если нужно выбрать все столбцы из таблицы, после слова SELECT добавим символ *. В этом случае на выходе получим всю таблицу целиком.</p>
73
CatNameCatOwnerNameМуркаДмитрийБеллаМаксимСимбаЕкатеринаЛеоАлександрМасяАнна<p>Если нужно выбрать все столбцы из таблицы, после слова SELECT добавим символ *. В этом случае на выходе получим всю таблицу целиком.</p>
74
SELECT * FROM CatsAndOwners;<p>Нужен, чтобы задавать условия для фильтрации строк. Например, можем выбрать только те, у которых значение CatAge больше 5:</p>
74
SELECT * FROM CatsAndOwners;<p>Нужен, чтобы задавать условия для фильтрации строк. Например, можем выбрать только те, у которых значение CatAge больше 5:</p>
75
SELECT CatName, CatAge FROM CatsAndOwners WHERE CatAge > 5<p>Результатом будет одна строка с двумя столбцами:</p>
75
SELECT CatName, CatAge FROM CatsAndOwners WHERE CatAge > 5<p>Результатом будет одна строка с двумя столбцами:</p>
76
<p>Оператор WHERE интересен тем, что внутри него можно указывать условия - причём сразу несколько. Делается это с помощью логических конструкций AND, OR и BETWEEN.</p>
76
<p>Оператор WHERE интересен тем, что внутри него можно указывать условия - причём сразу несколько. Делается это с помощью логических конструкций AND, OR и BETWEEN.</p>
77
<p>AND - это логическое И. Оно означает, что должны выполняться оба условия запроса одновременно. Например, кошка должна быть чёрной И проживать в Москве.</p>
77
<p>AND - это логическое И. Оно означает, что должны выполняться оба условия запроса одновременно. Например, кошка должна быть чёрной И проживать в Москве.</p>
78
SELECT CatName FROM CatsAndOwners WHERE CatColor = 'Чёрная' AND City = 'Москва'<p>Результат:</p>
78
SELECT CatName FROM CatsAndOwners WHERE CatColor = 'Чёрная' AND City = 'Москва'<p>Результат:</p>
79
<p>OR - это логическое ИЛИ. Оно означает, что должно выполниться или одно условие, или второе. Например, кошка должна быть ИЛИ старше пяти лет, ИЛИ быть чёрной.</p>
79
<p>OR - это логическое ИЛИ. Оно означает, что должно выполниться или одно условие, или второе. Например, кошка должна быть ИЛИ старше пяти лет, ИЛИ быть чёрной.</p>
80
SELECT CatName FROM CatsAndOwners WHERE CatAge > 5 OR CatColor = 'Чёрная'<p>Результат:</p>
80
SELECT CatName FROM CatsAndOwners WHERE CatAge > 5 OR CatColor = 'Чёрная'<p>Результат:</p>
81
<p><strong>BETWEEN</strong> - это оператор, который выбирает все элементы внутри заданного диапазона. Например, можно запросить всех кошек в возрасте от двух до шести лет.</p>
81
<p><strong>BETWEEN</strong> - это оператор, который выбирает все элементы внутри заданного диапазона. Например, можно запросить всех кошек в возрасте от двух до шести лет.</p>
82
SELECT CatName, CatAge FROM CatsAndOwners WHERE CatAge BETWEEN 2 AND 6<p>Результат:</p>
82
SELECT CatName, CatAge FROM CatsAndOwners WHERE CatAge BETWEEN 2 AND 6<p>Результат:</p>
83
CatNameCatAgeМурка3Симба5Лео2<p>Все вышеуказанные операторы можно использовать одним пакетом:</p>
83
CatNameCatAgeМурка3Симба5Лео2<p>Все вышеуказанные операторы можно использовать одним пакетом:</p>
84
SELECT CatName, CatAge FROM CatsAndOwners WHERE CatAge BETWEEN 2 AND 8 AND (City = 'Саратов' OR City = 'Санкт-Петербург') OR CatName = 'Мурка'<p>Результат:</p>
84
SELECT CatName, CatAge FROM CatsAndOwners WHERE CatAge BETWEEN 2 AND 8 AND (City = 'Саратов' OR City = 'Санкт-Петербург') OR CatName = 'Мурка'<p>Результат:</p>
85
CatNameCatAgeМурка3Белла7Симба5<p>Сортирует полученные строки в заданном столбце по убыванию или по возрастанию. Например, можем выбрать всех кошек и отсортировать их от самых старших к самым младшим:</p>
85
CatNameCatAgeМурка3Белла7Симба5<p>Сортирует полученные строки в заданном столбце по убыванию или по возрастанию. Например, можем выбрать всех кошек и отсортировать их от самых старших к самым младшим:</p>
86
SELECT CatName, CatAge FROM CatsAndOwners ORDER BY CatAge DESC<p>Результат:</p>
86
SELECT CatName, CatAge FROM CatsAndOwners ORDER BY CatAge DESC<p>Результат:</p>
87
CatNameCatAgeБелла7Симба5Мурка3Лео2Мася1<p>Чтобы отсортировать записи по возрастанию, нужно просто убрать из запроса параметр DESC:</p>
87
CatNameCatAgeБелла7Симба5Мурка3Лео2Мася1<p>Чтобы отсортировать записи по возрастанию, нужно просто убрать из запроса параметр DESC:</p>
88
SELECT CatName, CatAge FROM CatsAndOwners ORDER BY CatAge<p>Результат:</p>
88
SELECT CatName, CatAge FROM CatsAndOwners ORDER BY CatAge<p>Результат:</p>
89
CatNameCatAgeМася1Лео2Мурка3Симба5Белла7<p>Выбранные строки можно сгруппировать по столбцам. Например, можем посмотреть, сколько кошек живёт в разных городах.</p>
89
CatNameCatAgeМася1Лео2Мурка3Симба5Белла7<p>Выбранные строки можно сгруппировать по столбцам. Например, можем посмотреть, сколько кошек живёт в разных городах.</p>
90
SELECT City, COUNT(*) AS CatCount FROM CatsAndOwners GROUP BY City;<p>В этом примере мы применили агрегатную функцию COUNT, которая посчитала количество строк в каждой группе. К функциям-агрегаторам мы вернёмся позже, а пока - насладимся результатом:</p>
90
SELECT City, COUNT(*) AS CatCount FROM CatsAndOwners GROUP BY City;<p>В этом примере мы применили агрегатную функцию COUNT, которая посчитала количество строк в каждой группе. К функциям-агрегаторам мы вернёмся позже, а пока - насладимся результатом:</p>
91
CatName<strong>CatCount</strong>Москва2Саратов1Санкт-Петербург1Екатеринбург1<p>Также мы использовали оператор AS, чтобы задать название для новой колонки, в которую мы и собрали количество котов в разных городах.</p>
91
CatName<strong>CatCount</strong>Москва2Саратов1Санкт-Петербург1Екатеринбург1<p>Также мы использовали оператор AS, чтобы задать название для новой колонки, в которую мы и собрали количество котов в разных городах.</p>
92
<p>Запрос позволяет ограничить количество строк в финальной выдаче. Например, можем указать, чтобы выводились только первые две строки из таблицы:</p>
92
<p>Запрос позволяет ограничить количество строк в финальной выдаче. Например, можем указать, чтобы выводились только первые две строки из таблицы:</p>
93
SELECT * FROM CatsAndOwners LIMIT 2;<p>Результат:</p>
93
SELECT * FROM CatsAndOwners LIMIT 2;<p>Результат:</p>
94
<strong>CatID</strong>CatNameCatAgeCatColorCatOwnerName<strong>City</strong>1Мурка3ЧёрнаяДмитрийМосква2Белла7БелаяМаксимСаратов<p>Позволяет изменить данные в таблице. Допустим, кошка Симба сходила в парикмахерскую для животных и сменила цвет шёрстки на пурпурный. Отражаем эти изменения в таблице с помощью такого кода:</p>
94
<strong>CatID</strong>CatNameCatAgeCatColorCatOwnerName<strong>City</strong>1Мурка3ЧёрнаяДмитрийМосква2Белла7БелаяМаксимСаратов<p>Позволяет изменить данные в таблице. Допустим, кошка Симба сходила в парикмахерскую для животных и сменила цвет шёрстки на пурпурный. Отражаем эти изменения в таблице с помощью такого кода:</p>
95
UPDATE CatsAndOwners SET CatColor = 'Пурпурный' WHERE CatName = 'Симба';<p>Всё просто: рядом с командой UPDATE пишем название таблицы, которую нужно обновить, затем рядом с SET указываем, какой именно столбец меняем и на какое значение, а в конце - определяем конкретную ячейку.</p>
95
UPDATE CatsAndOwners SET CatColor = 'Пурпурный' WHERE CatName = 'Симба';<p>Всё просто: рядом с командой UPDATE пишем название таблицы, которую нужно обновить, затем рядом с SET указываем, какой именно столбец меняем и на какое значение, а в конце - определяем конкретную ячейку.</p>
96
<p>Результат:</p>
96
<p>Результат:</p>
97
<strong>CatID</strong>CatNameCatAgeCatColorCatOwnerName<strong>City</strong>1Мурка3ЧёрнаяДмитрийМосква2Белла7БелаяМаксимСаратов3Симба5ПурпурныйЕкатеринаСанкт-Петербург4Лео2ПолосатыйАлександрЕкатеринбург5Мася1СерыйАннаМосква<p>Удаляет строку. Например, можем удалить из таблицы всех кошек, которые живут в Саратове:</p>
97
<strong>CatID</strong>CatNameCatAgeCatColorCatOwnerName<strong>City</strong>1Мурка3ЧёрнаяДмитрийМосква2Белла7БелаяМаксимСаратов3Симба5ПурпурныйЕкатеринаСанкт-Петербург4Лео2ПолосатыйАлександрЕкатеринбург5Мася1СерыйАннаМосква<p>Удаляет строку. Например, можем удалить из таблицы всех кошек, которые живут в Саратове:</p>
98
DELETE FROM CatsAndOwners WHERE City = 'Саратов';<p>Результат:</p>
98
DELETE FROM CatsAndOwners WHERE City = 'Саратов';<p>Результат:</p>
99
<strong>CatID</strong>CatNameCatAgeCatColorCatOwnerName<strong>City</strong>1Мурка3ЧёрнаяДмитрийМосква3Симба5ПурпурныйЕкатеринаСанкт-Петербург4Лео2ПолосатыйАлександрЕкатеринбург5Мася1СерыйАннаМосква<p>Удаляет столбец. Например, можно удалить имена кошачьих хозяев:</p>
99
<strong>CatID</strong>CatNameCatAgeCatColorCatOwnerName<strong>City</strong>1Мурка3ЧёрнаяДмитрийМосква3Симба5ПурпурныйЕкатеринаСанкт-Петербург4Лео2ПолосатыйАлександрЕкатеринбург5Мася1СерыйАннаМосква<p>Удаляет столбец. Например, можно удалить имена кошачьих хозяев:</p>
100
ALTER TABLE CatsAndOwners DROP COLUMN CatOwnerName;<p>Заметьте, что сначала нужно применить команду ALTER TABLE. Как мы помним, она заточена на то, чтобы добавлять, менять или удалять колонки в таблице.</p>
100
ALTER TABLE CatsAndOwners DROP COLUMN CatOwnerName;<p>Заметьте, что сначала нужно применить команду ALTER TABLE. Как мы помним, она заточена на то, чтобы добавлять, менять или удалять колонки в таблице.</p>
101
<p>Результат:</p>
101
<p>Результат:</p>
102
<strong>CatID</strong>CatNameCatAgeCatColor<strong>City</strong>1Мурка3ЧёрнаяМосква3Симба5ПурпурныйСанкт-Петербург4Лео2ПолосатыйЕкатеринбург5Мася1СерыйМосква<p>Если таблица больше не нужна, можем удалить её. Сделать это просто:</p>
102
<strong>CatID</strong>CatNameCatAgeCatColor<strong>City</strong>1Мурка3ЧёрнаяМосква3Симба5ПурпурныйСанкт-Петербург4Лео2ПолосатыйЕкатеринбург5Мася1СерыйМосква<p>Если таблица больше не нужна, можем удалить её. Сделать это просто:</p>
103
DROP TABLE CatsAndOwners;<p>Применяйте команду на свой страх и риск. Предварительно советуем всё-таки сохранить таблицу - вдруг пригодится.</p>
103
DROP TABLE CatsAndOwners;<p>Применяйте команду на свой страх и риск. Предварительно советуем всё-таки сохранить таблицу - вдруг пригодится.</p>
104
<p>Агрегатные функции используют для того, чтобы производить вычисления с данными в таблице: считать количество строк, суммировать значения в столбце, найти среднее значение и так далее.</p>
104
<p>Агрегатные функции используют для того, чтобы производить вычисления с данными в таблице: считать количество строк, суммировать значения в столбце, найти среднее значение и так далее.</p>
105
<p>В SQL доступны пять агрегатных функций:</p>
105
<p>В SQL доступны пять агрегатных функций:</p>
106
<ul><li>COUNT - посчитать количество строк;</li>
106
<ul><li>COUNT - посчитать количество строк;</li>
107
<li>SUM - посчитать сумму значений в столбце;</li>
107
<li>SUM - посчитать сумму значений в столбце;</li>
108
<li>AVG - получить среднее значение в столбце;</li>
108
<li>AVG - получить среднее значение в столбце;</li>
109
<li>MIN - получить минимальное значение в столбце;</li>
109
<li>MIN - получить минимальное значение в столбце;</li>
110
<li>MAX - получить максимальное значение в столбце.</li>
110
<li>MAX - получить максимальное значение в столбце.</li>
111
</ul><p>Попробуем вычислить совокупный возраст всех кошек:</p>
111
</ul><p>Попробуем вычислить совокупный возраст всех кошек:</p>
112
SELECT SUM(CatAge) AS TotalAge FROM CatsAndOwners;<p>Результат:</p>
112
SELECT SUM(CatAge) AS TotalAge FROM CatsAndOwners;<p>Результат:</p>
113
<p>Теперь найдём наименьший возраст кошки:</p>
113
<p>Теперь найдём наименьший возраст кошки:</p>
114
SELECT MIN(CatAge) AS MinAge FROM CatsAndOwners;<p>Результат:</p>
114
SELECT MIN(CatAge) AS MinAge FROM CatsAndOwners;<p>Результат:</p>
115
<p>А теперь высшая математика - вычислим средний возраст кошек для каждого города:</p>
115
<p>А теперь высшая математика - вычислим средний возраст кошек для каждого города:</p>
116
SELECT City, AVG(CatAge) AS AverageAge FROM CatsAndOwners GROUP BY City;<p>Результат:</p>
116
SELECT City, AVG(CatAge) AS AverageAge FROM CatsAndOwners GROUP BY City;<p>Результат:</p>
117
<strong>City</strong><strong>AverageAge</strong><strong>CatCount</strong>Москва2Санкт-Петербург5Екатеринбург2<p>Выделим важные пункты из этой статьи, которые стоит запомнить:</p>
117
<strong>City</strong><strong>AverageAge</strong><strong>CatCount</strong>Москва2Санкт-Петербург5Екатеринбург2<p>Выделим важные пункты из этой статьи, которые стоит запомнить:</p>
118
<ul><li>SQL - это язык структурированных запросов. Он нужен, чтобы управлять информацией в реляционных базах данных - то есть тех, которые состоят из связанных между собой таблиц.</li>
118
<ul><li>SQL - это язык структурированных запросов. Он нужен, чтобы управлять информацией в реляционных базах данных - то есть тех, которые состоят из связанных между собой таблиц.</li>
119
<li>Каждый запрос нацелен на то, чтобы совершать какое-то действие с данными в таблице: выводить на экран, добавлять новые, считать средние значения, удалять и так далее.</li>
119
<li>Каждый запрос нацелен на то, чтобы совершать какое-то действие с данными в таблице: выводить на экран, добавлять новые, считать средние значения, удалять и так далее.</li>
120
<li>Все запросы делятся на четыре группы: DDL, DML, DCL и TCL. DDL отвечает за определение данных. DML - за управление данными. DCL - за выдачу прав доступа. TCL - за управление транзакциями.</li>
120
<li>Все запросы делятся на четыре группы: DDL, DML, DCL и TCL. DDL отвечает за определение данных. DML - за управление данными. DCL - за выдачу прав доступа. TCL - за управление транзакциями.</li>
121
<li>Классический запрос состоит из шести операторов. Два из них обязательные: SELECT и FROM. Остальные четыре - используются в зависимости от задачи: WHERE, GROUP BY, HAVING и ORDER BY.</li>
121
<li>Классический запрос состоит из шести операторов. Два из них обязательные: SELECT и FROM. Остальные четыре - используются в зависимости от задачи: WHERE, GROUP BY, HAVING и ORDER BY.</li>
122
<li>Помимо базовых команд, в SQL существует множество дополнительных - изучить их можно, например, в шпаргалке от <a>W3Schools</a>. А ещё лучше - берите эти команды на вооружение и экспериментируйте, ведь теория без практики мертва.</li>
122
<li>Помимо базовых команд, в SQL существует множество дополнительных - изучить их можно, например, в шпаргалке от <a>W3Schools</a>. А ещё лучше - берите эти команды на вооружение и экспериментируйте, ведь теория без практики мертва.</li>
123
</ul><p>Data Science с нуля: пробуем профессии на практике за 5 дней</p>
123
</ul><p>Data Science с нуля: пробуем профессии на практике за 5 дней</p>
124
<p>Вы разберётесь в трёх главных направлениях data science: машинном обучении, разработке на Python и визуализации данных. Решите, какая сфера вам ближе, и выполните 4 реальные задачи с данными.</p>
124
<p>Вы разберётесь в трёх главных направлениях data science: машинном обучении, разработке на Python и визуализации данных. Решите, какая сфера вам ближе, и выполните 4 реальные задачи с данными.</p>
125
<p><a>Пройти бесплатно</a></p>
125
<p><a>Пройти бесплатно</a></p>
126
<a><b>Попробуйте data science на бесплатном курсе</b>Пройдите курс по data science и изучите 3 направления в работе с данными. Решите, в какой сфере хотите развиваться дальше, и получите ценные подарки. Пройти курс →</a>
126
<a><b>Попробуйте data science на бесплатном курсе</b>Пройдите курс по data science и изучите 3 направления в работе с данными. Решите, в какой сфере хотите развиваться дальше, и получите ценные подарки. Пройти курс →</a>