HTML Diff
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 &gt; 20<p>Если перевести на русский, получится что-то вроде:</p>
10 SELECT (Name, Age) FROM Clients WHERE Age &gt; 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 &gt; 20<p>Этот оператор помогает нам сгруппировать данные по определённым столбцам. В результате получим новую таблицу, составленную на основе выбранных данных.</p>
40 SELECT (Name, Age) FROM Clients WHERE Age &gt; 20<p>Этот оператор помогает нам сгруппировать данные по определённым столбцам. В результате получим новую таблицу, составленную на основе выбранных данных.</p>
41 <p>Например, сгруппируем результат предыдущего запроса по городам:</p>
41 <p>Например, сгруппируем результат предыдущего запроса по городам:</p>
42 SELECT (Name, Age) FROM Clients WHERE Age &gt; 20 GROUP BY City<p>Запрос вернёт клиентов старше 20 лет и сгруппирует их по городам. Главное - чтобы столбец City присутствовал в таблице.</p>
42 SELECT (Name, Age) FROM Clients WHERE Age &gt; 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 &gt; 20 GROUP BY City HAVING PaymentAmount &gt; 1000<p>Так как наш запрос растёт, будем каждую его часть выносить на новую строку - чтобы не запутаться. На корректность запроса это не повлияет, а читать его станет куда удобнее.</p>
45 SELECT (Name, PaymentAmount, Age) FROM Clients WHERE Age &gt; 20 GROUP BY City HAVING PaymentAmount &gt; 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 &gt; 20 GROUP BY City HAVING PaymentAmount &gt; 1000 ORDER BY Age<p>А чтобы отсортировать по убыванию, просто добавляем слово DESC:</p>
48 SELECT (Name, PaymentAmount, Age) FROM Clients WHERE Age &gt; 20 GROUP BY City HAVING PaymentAmount &gt; 1000 ORDER BY Age<p>А чтобы отсортировать по убыванию, просто добавляем слово DESC:</p>
49 SELECT (Name, PaymentAmount, Age) FROM Clients WHERE Age &gt; 20 GROUP BY City HAVING PaymentAmount &gt; 1000 ORDER BY Age DESC<p>Кроме этих шести операторов есть масса дополнительных - например, VIEW, UNION, LIKE. Они уникальны для каждого запроса и используются в зависимости от ситуации. Конечно, в этой статье мы не успеем разобрать все - если вам нужен полный список, можно заглянуть в эту<a>шпаргалку по SQL</a>.</p>
49 SELECT (Name, PaymentAmount, Age) FROM Clients WHERE Age &gt; 20 GROUP BY City HAVING PaymentAmount &gt; 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 &gt; 5<p>Результатом будет одна строка с двумя столбцами:</p>
75 SELECT CatName, CatAge FROM CatsAndOwners WHERE CatAge &gt; 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 &gt; 5 OR CatColor = 'Чёрная'<p>Результат:</p>
80 SELECT CatName FROM CatsAndOwners WHERE CatAge &gt; 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>