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>1 фев 2023</li>
2 <ul><li>1 фев 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>Журналист, изучает Python. Любит разбираться в мелочах, общаться с людьми и понимать их.</p>
6 <p>Журналист, изучает Python. Любит разбираться в мелочах, общаться с людьми и понимать их.</p>
7 <p>Вся информация, с которой вы сталкиваетесь в интернете, содержится в базах данных. В них же хранятся данные о сотрудниках и клиентах крупных компаний, научных и социологических исследованиях, расписании рейсов ближайшего к вам аэропорта и много о чём ещё.</p>
7 <p>Вся информация, с которой вы сталкиваетесь в интернете, содержится в базах данных. В них же хранятся данные о сотрудниках и клиентах крупных компаний, научных и социологических исследованиях, расписании рейсов ближайшего к вам аэропорта и много о чём ещё.</p>
8 <p>Работать с этими циклопическими массивами информации вручную было бы долго, муторно и непродуктивно. Поэтому придумали<strong>SQL -</strong>специальный язык для общения с БД.</p>
8 <p>Работать с этими циклопическими массивами информации вручную было бы долго, муторно и непродуктивно. Поэтому придумали<strong>SQL -</strong>специальный язык для общения с БД.</p>
9 <p>SQL (<strong>Structured Query Language</strong>, или язык структурированных запросов) - это декларативный язык программирования (язык запросов), который используют для создания, обработки и хранения данных в реляционных БД.</p>
9 <p>SQL (<strong>Structured Query Language</strong>, или язык структурированных запросов) - это декларативный язык программирования (язык запросов), который используют для создания, обработки и хранения данных в реляционных БД.</p>
10 <p>На чистом SQL нельзя написать программу - он предназначен только для взаимодействия с базами данных: получения, добавления, изменения и удаления информации в них, управления доступом и так далее.</p>
10 <p>На чистом SQL нельзя написать программу - он предназначен только для взаимодействия с базами данных: получения, добавления, изменения и удаления информации в них, управления доступом и так далее.</p>
11 <p>Поэтому перед изучением SQL нужно разобраться,<a>как устроены базы данных</a>.</p>
11 <p>Поэтому перед изучением SQL нужно разобраться,<a>как устроены базы данных</a>.</p>
12 <p>Все БД можно поделить на два вида:<a>реляционные и нереляционные</a>. Язык SQL нужен для работы с первыми.</p>
12 <p>Все БД можно поделить на два вида:<a>реляционные и нереляционные</a>. Язык SQL нужен для работы с первыми.</p>
13 <p>SQL настолько тесно связан с реляционными БД, что все нереляционные БД в противовес стали называть NoSQL. Вот и получилось, что SQL - это язык программирования, а NoSQL - тип баз данных.</p>
13 <p>SQL настолько тесно связан с реляционными БД, что все нереляционные БД в противовес стали называть NoSQL. Вот и получилось, что SQL - это язык программирования, а NoSQL - тип баз данных.</p>
14 <p>Про<strong>реляционные БД </strong>часто говорят, что это набор двумерных таблиц. Прямо как в Excel: со столбцами, строками и ячейками. Это понятная визуализация, хотя и не совсем точная.</p>
14 <p>Про<strong>реляционные БД </strong>часто говорят, что это набор двумерных таблиц. Прямо как в Excel: со столбцами, строками и ячейками. Это понятная визуализация, хотя и не совсем точная.</p>
15 <p>Представим, что мы создаём<a>базу данных</a>для небольшой строительной фирмы. Она проектирует загородные дома и передаёт проекты подрядчикам, которые занимаются самим строительством:</p>
15 <p>Представим, что мы создаём<a>базу данных</a>для небольшой строительной фирмы. Она проектирует загородные дома и передаёт проекты подрядчикам, которые занимаются самим строительством:</p>
16 Примерная база данных воображаемой строительной фирмы<em>Скриншот: Skillbox Media</em><p>Чем же база данных отличается от таблицы? Тем, что в базе:</p>
16 Примерная база данных воображаемой строительной фирмы<em>Скриншот: Skillbox Media</em><p>Чем же база данных отличается от таблицы? Тем, что в базе:</p>
17 <ul><li>У столбцов и строк нет определённого положения. Нельзя сказать, что столбец status находится до или после столбца num_floors, а имя Анастасии Романиной - до или после имени Дмитрия Пожарова.</li>
17 <ul><li>У столбцов и строк нет определённого положения. Нельзя сказать, что столбец status находится до или после столбца num_floors, а имя Анастасии Романиной - до или после имени Дмитрия Пожарова.</li>
18 <li>Каждый столбец диктует свой домен, то есть тип данных, к которому могут относиться его значения. Например, в столбцах cost и num_floors могут храниться только числа, а в столбце client - только строки.</li>
18 <li>Каждый столбец диктует свой домен, то есть тип данных, к которому могут относиться его значения. Например, в столбцах cost и num_floors могут храниться только числа, а в столбце client - только строки.</li>
19 <li>Каждая строка должна быть уникальной и не может повторять какую-то другую строку.</li>
19 <li>Каждая строка должна быть уникальной и не может повторять какую-то другую строку.</li>
20 </ul><p>Из-за этих отличий применительно к базам данных используют другую терминологию. Столбец называется<strong>атрибутом</strong>, строка -<strong>записью или кортежем</strong>, а сама БД - их <strong>отношением</strong>друг к другу.</p>
20 </ul><p>Из-за этих отличий применительно к базам данных используют другую терминологию. Столбец называется<strong>атрибутом</strong>, строка -<strong>записью или кортежем</strong>, а сама БД - их <strong>отношением</strong>друг к другу.</p>
21 <p>SQL - это главный инструмент аналитика данных. Освоить эту профессию можно на курсе Skillbox "<a>Профессия Data-аналитик</a>".</p>
21 <p>SQL - это главный инструмент аналитика данных. Освоить эту профессию можно на курсе Skillbox "<a>Профессия Data-аналитик</a>".</p>
22 <p>Вернёмся к БД нашей строительной фирмы. Она может казаться удобной, но на самом деле не лишена недостатков.</p>
22 <p>Вернёмся к БД нашей строительной фирмы. Она может казаться удобной, но на самом деле не лишена недостатков.</p>
23 <p>Возьмём дом, который строится для Марии Медичиной. Сейчас он только проектируется, и мы ещё не выбрали для него подрядчика. Поэтому значение атрибута contractor равно NULL, то есть поле пустое. Но рано или поздно мы выберем подрядчика - например, ООО "Коттеджи". Тогда, кроме имени подрядчика, нам нужно будет заново указать его телефон. Сейчас значение этого атрибута тоже NULL. Пока что сделать это несложно.</p>
23 <p>Возьмём дом, который строится для Марии Медичиной. Сейчас он только проектируется, и мы ещё не выбрали для него подрядчика. Поэтому значение атрибута contractor равно NULL, то есть поле пустое. Но рано или поздно мы выберем подрядчика - например, ООО "Коттеджи". Тогда, кроме имени подрядчика, нам нужно будет заново указать его телефон. Сейчас значение этого атрибута тоже NULL. Пока что сделать это несложно.</p>
24 <p>В реальной же базе данных о подрядчике будет храниться гораздо больше информации: адрес, почта, ИНН, банковские реквизиты и так далее. Чтобы каждый раз переписывать всю эту информацию, придётся делать много лишних движений - а это не наш метод.</p>
24 <p>В реальной же базе данных о подрядчике будет храниться гораздо больше информации: адрес, почта, ИНН, банковские реквизиты и так далее. Чтобы каждый раз переписывать всю эту информацию, придётся делать много лишних движений - а это не наш метод.</p>
25 <p>Если подрядчик вдруг сменит номер телефона, во всех старых записях останется устаревшая информация. А таких записей могут быть сотни и тысячи (если наша компания станет совсем успешной). Ровно та же ситуация с данными клиентов. Уследить за таким числом нюансов проблемно, и наша БД рискует превратиться в хранилище фейков.</p>
25 <p>Если подрядчик вдруг сменит номер телефона, во всех старых записях останется устаревшая информация. А таких записей могут быть сотни и тысячи (если наша компания станет совсем успешной). Ровно та же ситуация с данными клиентов. Уследить за таким числом нюансов проблемно, и наша БД рискует превратиться в хранилище фейков.</p>
26 <p>Чтобы этого не происходило, в реляционных БД используют<strong>нормализацию</strong>. Это когда одну таблицу разбивают (<strong>декомпозируют</strong>) на несколько, а каждой записи присваивают уникальный ключ, по которому её можно идентифицировать.</p>
26 <p>Чтобы этого не происходило, в реляционных БД используют<strong>нормализацию</strong>. Это когда одну таблицу разбивают (<strong>декомпозируют</strong>) на несколько, а каждой записи присваивают уникальный ключ, по которому её можно идентифицировать.</p>
27 <p>Всего существует<a>шесть нормальных форм</a>. Чем выше номер формы, тем большему количеству правил она должна подчиняться. Приведём базу данных нашей строительной фирмы в соответствие с третьей нормальной формой.</p>
27 <p>Всего существует<a>шесть нормальных форм</a>. Чем выше номер формы, тем большему количеству правил она должна подчиняться. Приведём базу данных нашей строительной фирмы в соответствие с третьей нормальной формой.</p>
28 Приводим базу данных в соответствие с третьей нормативной формой<em>Скриншот: Skillbox Media</em><p>Теперь, если у любого клиента или подрядчика сменится телефон, нужно будет внести изменения всего один раз. Добавлять новые записи теперь тоже будет проще.</p>
28 Приводим базу данных в соответствие с третьей нормативной формой<em>Скриншот: Skillbox Media</em><p>Теперь, если у любого клиента или подрядчика сменится телефон, нужно будет внести изменения всего один раз. Добавлять новые записи теперь тоже будет проще.</p>
29 <p>Таблицы связывают между собой ключами. Они бывают трёх видов.</p>
29 <p>Таблицы связывают между собой ключами. Они бывают трёх видов.</p>
30 <p><strong>Первичный</strong> - указывает на запись, к которой он относится. В одном отношении не может быть нескольких записей с одним и тем же первичным ключом, и значение первичного ключа не может быть NULL. Первичным ключом может быть любое уникальное значение. Например, в таблице contractors так можно было бы использовать ИНН, если б он был в нашей базе.</p>
30 <p><strong>Первичный</strong> - указывает на запись, к которой он относится. В одном отношении не может быть нескольких записей с одним и тем же первичным ключом, и значение первичного ключа не может быть NULL. Первичным ключом может быть любое уникальное значение. Например, в таблице contractors так можно было бы использовать ИНН, если б он был в нашей базе.</p>
31 <p><strong>Внешний</strong>-<strong></strong>содержит ссылку на первичный ключ из другой таблицы и привязывает одну таблицу к другой.</p>
31 <p><strong>Внешний</strong>-<strong></strong>содержит ссылку на первичный ключ из другой таблицы и привязывает одну таблицу к другой.</p>
32 <p><strong>Родительский</strong>- это первичный ключ, на который ссылается внешний ключ.</p>
32 <p><strong>Родительский</strong>- это первичный ключ, на который ссылается внешний ключ.</p>
33 <p>Ещё одно отличие реляционных БД от обычных таблиц - в них нельзя вносить изменения напрямую. Для этого нужны<strong>СУБД, или системы управления базами данных</strong>.</p>
33 <p>Ещё одно отличие реляционных БД от обычных таблиц - в них нельзя вносить изменения напрямую. Для этого нужны<strong>СУБД, или системы управления базами данных</strong>.</p>
34 <p><a>СУБД</a> - это посредник, который получает от пользователя команды, что сделать с базой данных, и выполняет их. Эти-то команды и написаны на языке SQL.</p>
34 <p><a>СУБД</a> - это посредник, который получает от пользователя команды, что сделать с базой данных, и выполняет их. Эти-то команды и написаны на языке SQL.</p>
35 Схема связи пользователя и БД<em>Иллюстрация: Оля Ежак для Skillbox Media</em><p><strong>SQL - декларативный язык</strong>. Это значит, что при написании кода мы говорим, что хотим получить от программы. Логика того, как именно СУБД будет выполнять поставленную задачу, скрыта от нас.</p>
35 Схема связи пользователя и БД<em>Иллюстрация: Оля Ежак для Skillbox Media</em><p><strong>SQL - декларативный язык</strong>. Это значит, что при написании кода мы говорим, что хотим получить от программы. Логика того, как именно СУБД будет выполнять поставленную задачу, скрыта от нас.</p>
36 <p>Все SQL-команды делятся на <strong>четыре вида</strong>:</p>
36 <p>Все SQL-команды делятся на <strong>четыре вида</strong>:</p>
37 <ul><li><strong>DDL</strong>(Data Definition Language, или язык описания данных). Их используют, чтобы создавать, изменять и удалять целые таблицы.</li>
37 <ul><li><strong>DDL</strong>(Data Definition Language, или язык описания данных). Их используют, чтобы создавать, изменять и удалять целые таблицы.</li>
38 <li><strong>DML</strong>(Data Manipulation Language, или язык управления данными). Их применяют к содержимому таблиц, чтобы создавать, изменять, удалять атрибуты и записи. Если нужно получить какую-то информацию из базы данных, то пользуются именно DML-операторами.</li>
38 <li><strong>DML</strong>(Data Manipulation Language, или язык управления данными). Их применяют к содержимому таблиц, чтобы создавать, изменять, удалять атрибуты и записи. Если нужно получить какую-то информацию из базы данных, то пользуются именно DML-операторами.</li>
39 <li><strong>DCL</strong>(Data Control Language, или язык контроля данных). Они нужны, чтобы выдавать конкретным пользователям доступ к базам данных и отзывать его.</li>
39 <li><strong>DCL</strong>(Data Control Language, или язык контроля данных). Они нужны, чтобы выдавать конкретным пользователям доступ к базам данных и отзывать его.</li>
40 <li><strong>TCL</strong>(Transaction Control Language, или язык контроля транзакций). Позволяет управлять транзакциями. Транзакция - это набор из нескольких команд, которые выполняются поочерёдно. Если одна из команд внутри транзакции не срабатывает, то все уже совершённые действия отменяются. То есть транзакция может быть совершена либо полностью, либо никак.</li>
40 <li><strong>TCL</strong>(Transaction Control Language, или язык контроля транзакций). Позволяет управлять транзакциями. Транзакция - это набор из нескольких команд, которые выполняются поочерёдно. Если одна из команд внутри транзакции не срабатывает, то все уже совершённые действия отменяются. То есть транзакция может быть совершена либо полностью, либо никак.</li>
41 </ul><p>В <a>индексе TOPDB</a>популярность СУБД определяется по тому, как часто их гуглят. В декабре 2022 года первые пять мест в нём занимают именно реляционные СУБД - вместе они дают больше 70% поисковых запросов.</p>
41 </ul><p>В <a>индексе TOPDB</a>популярность СУБД определяется по тому, как часто их гуглят. В декабре 2022 года первые пять мест в нём занимают именно реляционные СУБД - вместе они дают больше 70% поисковых запросов.</p>
42 <em>Скриншот: Top Database index /<a>GitHub</a></em><p><a>Рейтинг DB-Engines</a>даёт похожие цифры. В декабре 2022 года доля реляционных СУБД составляет 71,7%.</p>
42 <em>Скриншот: Top Database index /<a>GitHub</a></em><p><a>Рейтинг DB-Engines</a>даёт похожие цифры. В декабре 2022 года доля реляционных СУБД составляет 71,7%.</p>
43 <em>Скриншот:<a>DB-Engines</a></em><p>Без баз данных не будет ни сайтов, ни сетевых приложений, ни крупных информационных систем - нужно же где-то хранить всю информацию. При этом реляционных БД - большинство, а чтобы управлять ими, нужен SQL. Поэтому мало какая вакансия<strong>бэкенд-разработчика</strong>обходится без требования владеть SQL. По крайней мере, мы такой не нашли.</p>
43 <em>Скриншот:<a>DB-Engines</a></em><p>Без баз данных не будет ни сайтов, ни сетевых приложений, ни крупных информационных систем - нужно же где-то хранить всю информацию. При этом реляционных БД - большинство, а чтобы управлять ими, нужен SQL. Поэтому мало какая вакансия<strong>бэкенд-разработчика</strong>обходится без требования владеть SQL. По крайней мере, мы такой не нашли.</p>
44 <p>Но умение работать с базами данных пригодится не только программисту.</p>
44 <p>Но умение работать с базами данных пригодится не только программисту.</p>
45 <p><strong>Аналитики данных</strong>напрямую работают с "сырой" информацией. Чем лучше и свободнее они общаются с БД, тем проще им добывать и обрабатывать нужные данные в нужном виде.</p>
45 <p><strong>Аналитики данных</strong>напрямую работают с "сырой" информацией. Чем лучше и свободнее они общаются с БД, тем проще им добывать и обрабатывать нужные данные в нужном виде.</p>
46 <p><strong>Маркетологам</strong>SQL тоже будет полезен для решения аналитических задач.</p>
46 <p><strong>Маркетологам</strong>SQL тоже будет полезен для решения аналитических задач.</p>
47 <p><strong>Тестировщикам</strong>понадобится обращаться к БД, потому что это важный компонент любого информационного продукта.</p>
47 <p><strong>Тестировщикам</strong>понадобится обращаться к БД, потому что это важный компонент любого информационного продукта.</p>
48 <p><strong>Руководители</strong>,<strong>менеджеры</strong>и <strong>бизнес-консультанты</strong>благодаря информации из БД смогут лучше понимать, как функционирует их бизнес, и принимать более взвешенные решения.</p>
48 <p><strong>Руководители</strong>,<strong>менеджеры</strong>и <strong>бизнес-консультанты</strong>благодаря информации из БД смогут лучше понимать, как функционирует их бизнес, и принимать более взвешенные решения.</p>
49 <p>Запросы в SQL похожи на <strong>естественный английский язык</strong>и выглядят как полноценные предложения.</p>
49 <p>Запросы в SQL похожи на <strong>естественный английский язык</strong>и выглядят как полноценные предложения.</p>
50 <p>Например, если мы захотим в базе данных нашей строительной фирмы получить номер телефона ООО "Коттеджи", нам нужно написать такую команду:</p>
50 <p>Например, если мы захотим в базе данных нашей строительной фирмы получить номер телефона ООО "Коттеджи", нам нужно написать такую команду:</p>
51 SELECT tel FROM contractors WHERE id=1;<p>Перевести на русский её можно так: "Выбери значение из столбца tel в таблице contractors, где значение столбца id равно единице". Символ ; означает конец команды.</p>
51 SELECT tel FROM contractors WHERE id=1;<p>Перевести на русский её можно так: "Выбери значение из столбца tel в таблице contractors, где значение столбца id равно единице". Символ ; означает конец команды.</p>
52 <p>SQL-инструкции общаются не напрямую с базой данных, а с СУБД. Многие производители СУБД хотели расширить функциональность запросов, поэтому добавляли к языку<strong>собственные расширения.</strong></p>
52 <p>SQL-инструкции общаются не напрямую с базой данных, а с СУБД. Многие производители СУБД хотели расширить функциональность запросов, поэтому добавляли к языку<strong>собственные расширения.</strong></p>
53 <p>Так у SQL появились несовместимые между собой<strong>диалекты</strong>. Например, PL/SQL, PL/pgSQL, T-SQL. Но структура запросов и основные "встроенные" команды от диалекта к диалекту неизменны.</p>
53 <p>Так у SQL появились несовместимые между собой<strong>диалекты</strong>. Например, PL/SQL, PL/pgSQL, T-SQL. Но структура запросов и основные "встроенные" команды от диалекта к диалекту неизменны.</p>
54 <p>Вот список самых распространённых операторов SQL.</p>
54 <p>Вот список самых распространённых операторов SQL.</p>
55 <p><strong>CREATE DATABASE</strong>-<strong></strong>создаёт БД.</p>
55 <p><strong>CREATE DATABASE</strong>-<strong></strong>создаёт БД.</p>
56 <p><strong>DROP DATABASE</strong>- удаляет БД.</p>
56 <p><strong>DROP DATABASE</strong>- удаляет БД.</p>
57 <p><strong>USE</strong>-<strong></strong>указывает СУБД, в какой БД работать в дальнейшем.</p>
57 <p><strong>USE</strong>-<strong></strong>указывает СУБД, в какой БД работать в дальнейшем.</p>
58 <p><strong>CREATE TABLE</strong>- создаёт новую таблицу внутри БД.</p>
58 <p><strong>CREATE TABLE</strong>- создаёт новую таблицу внутри БД.</p>
59 <p><strong>DROP TABLE</strong>- удаляет таблицу.</p>
59 <p><strong>DROP TABLE</strong>- удаляет таблицу.</p>
60 <p><strong>INSERT</strong>- добавляет данные в таблицу. Используется вместе с операторами<strong>INTO</strong>(указывает на таблицу) и <strong>VALUES</strong>(ему передают значения, которые нужно добавить).</p>
60 <p><strong>INSERT</strong>- добавляет данные в таблицу. Используется вместе с операторами<strong>INTO</strong>(указывает на таблицу) и <strong>VALUES</strong>(ему передают значения, которые нужно добавить).</p>
61 <p><strong>UPDATE</strong>- обновляет данные в таблице. UPDATE указывает на саму таблицу, а потом используется оператор<strong>SET</strong>, после которого и прописываются новые значения для атрибутов. Чтобы указать на конкретную запись, используют оператор WHERE.</p>
61 <p><strong>UPDATE</strong>- обновляет данные в таблице. UPDATE указывает на саму таблицу, а потом используется оператор<strong>SET</strong>, после которого и прописываются новые значения для атрибутов. Чтобы указать на конкретную запись, используют оператор WHERE.</p>
62 <p><strong>DELETE</strong>- удаляет данные из таблицы. Используется перед оператором FROM.</p>
62 <p><strong>DELETE</strong>- удаляет данные из таблицы. Используется перед оператором FROM.</p>
63 <p><strong>SELECT</strong> - выбирает данные. Ему передают название атрибута или атрибутов. Если нужно выбрать все атрибуты, то пишут<strong>SELECT *</strong>. Находится перед оператором FROM.</p>
63 <p><strong>SELECT</strong> - выбирает данные. Ему передают название атрибута или атрибутов. Если нужно выбрать все атрибуты, то пишут<strong>SELECT *</strong>. Находится перед оператором FROM.</p>
64 <p><strong>FROM -</strong>указывает на таблицу, к которой обращена команда.</p>
64 <p><strong>FROM -</strong>указывает на таблицу, к которой обращена команда.</p>
65 <p><strong>WHERE</strong>- указывает на условие или условия, которым должна удовлетворять строка. Пишется после оператора FROM. Необязательный элемент инструкции. Если его не указывать, то команда применяется ко всем записям в таблице.</p>
65 <p><strong>WHERE</strong>- указывает на условие или условия, которым должна удовлетворять строка. Пишется после оператора FROM. Необязательный элемент инструкции. Если его не указывать, то команда применяется ко всем записям в таблице.</p>
66 <p><strong>ORDER BY </strong>- сортирует результаты запроса. По умолчанию - в порядке возрастания. Для сортировки по убыванию можно использовать слово<strong>DESC</strong>.</p>
66 <p><strong>ORDER BY </strong>- сортирует результаты запроса. По умолчанию - в порядке возрастания. Для сортировки по убыванию можно использовать слово<strong>DESC</strong>.</p>
67 <p><strong>JOIN</strong>- объединяет значения нескольких колонок. Бывает<a>нескольких видов</a>: внутренний (INNER), внешний (OUTER), левый (LEFT) и правый (RIGHT).</p>
67 <p><strong>JOIN</strong>- объединяет значения нескольких колонок. Бывает<a>нескольких видов</a>: внутренний (INNER), внешний (OUTER), левый (LEFT) и правый (RIGHT).</p>
68 <p>Давайте напишем какой-нибудь запрос к базе данных нашей строительной фирмы.</p>
68 <p>Давайте напишем какой-нибудь запрос к базе данных нашей строительной фирмы.</p>
69 SELECT * FROM houses WHERE status &lt;&gt; "Построен" ORDER BY cost DESC;<p>Он означает: выбери все столбцы из таблицы houses, чей status "Не построен", и отсортируй их по убыванию атрибута cost. СУБД выдаст нам такую таблицу:</p>
69 SELECT * FROM houses WHERE status &lt;&gt; "Построен" ORDER BY cost DESC;<p>Он означает: выбери все столбцы из таблицы houses, чей status "Не построен", и отсортируй их по убыванию атрибута cost. СУБД выдаст нам такую таблицу:</p>
70 Пример выдачи по запросу status "Не построен" в столбце houses<em>Скриншот: Skillbox Media</em><p>Также в SQL существуют<strong>агрегатные функции</strong>. Они позволяют производить с данными дополнительные операции и указываются вместо атрибутов. Агрегатные функции записываются в формате FUNCTION (ATTRIBUTE).</p>
70 Пример выдачи по запросу status "Не построен" в столбце houses<em>Скриншот: Skillbox Media</em><p>Также в SQL существуют<strong>агрегатные функции</strong>. Они позволяют производить с данными дополнительные операции и указываются вместо атрибутов. Агрегатные функции записываются в формате FUNCTION (ATTRIBUTE).</p>
71 <p>Вот некоторые из них.</p>
71 <p>Вот некоторые из них.</p>
72 <p><strong>COUNT -</strong>считает количество записей в колонке.</p>
72 <p><strong>COUNT -</strong>считает количество записей в колонке.</p>
73 <p><strong>SUM -</strong>складывает содержимое значений колонки.</p>
73 <p><strong>SUM -</strong>складывает содержимое значений колонки.</p>
74 <p><strong>MIN -</strong>указывает на минимальное значение в колонке.</p>
74 <p><strong>MIN -</strong>указывает на минимальное значение в колонке.</p>
75 <p><strong>MAX -</strong>указывает на максимальное значение в колонке.</p>
75 <p><strong>MAX -</strong>указывает на максимальное значение в колонке.</p>
76 <p><strong>AVG -</strong>считает среднее значение в колонке.</p>
76 <p><strong>AVG -</strong>считает среднее значение в колонке.</p>
77 <p><strong>ROUND -</strong>округляет значение в колонке.</p>
77 <p><strong>ROUND -</strong>округляет значение в колонке.</p>
78 <p>Для работы с инструкциями, которые содержат агрегатные функции, есть специальные операторы.</p>
78 <p>Для работы с инструкциями, которые содержат агрегатные функции, есть специальные операторы.</p>
79 <p><strong>GROUP BY -</strong>группирует выходные значения для колонок, к которым применили агрегатную функцию.</p>
79 <p><strong>GROUP BY -</strong>группирует выходные значения для колонок, к которым применили агрегатную функцию.</p>
80 <p><strong>HAVING -</strong>работает как WHERE, но может применяться к агрегатным функциям.</p>
80 <p><strong>HAVING -</strong>работает как WHERE, но может применяться к агрегатным функциям.</p>
81 <p>Конечно, это далеко не все операторы, функции и ключевые слова, которые есть в SQL. Но уже этот набор даёт широкие возможности для работы с базами данных.</p>
81 <p>Конечно, это далеко не все операторы, функции и ключевые слова, которые есть в SQL. Но уже этот набор даёт широкие возможности для работы с базами данных.</p>
82 <ul><li><strong>SQL</strong> - это язык программирования для работы с реляционными базами данных.</li>
82 <ul><li><strong>SQL</strong> - это язык программирования для работы с реляционными базами данных.</li>
83 <li>Самые распространённые базы данных -<strong>реляционные</strong>. Их можно представить как набор двумерных таблиц, связанных друг с другом ключами.</li>
83 <li>Самые распространённые базы данных -<strong>реляционные</strong>. Их можно представить как набор двумерных таблиц, связанных друг с другом ключами.</li>
84 <li>SQL обращается к базам данных не напрямую, а через<strong>системы управления базами данных, или</strong><strong>СУБД</strong>.</li>
84 <li>SQL обращается к базам данных не напрямую, а через<strong>системы управления базами данных, или</strong><strong>СУБД</strong>.</li>
85 <li>Производители СУБД пишут для языка SQL собственные расширения -<strong>диалекты</strong>. Но базовый синтаксис у всех них одинаковый.</li>
85 <li>Производители СУБД пишут для языка SQL собственные расширения -<strong>диалекты</strong>. Но базовый синтаксис у всех них одинаковый.</li>
86 <li>SQL-запросы состоят из <strong>операторов</strong>и складываются в полноценные предложения, которые похожи на естественный английский язык.</li>
86 <li>SQL-запросы состоят из <strong>операторов</strong>и складываются в полноценные предложения, которые похожи на естественный английский язык.</li>
87 </ul><a>Практический курс: "SQL для анализа данных" Узнать больше</a>
87 </ul><a>Практический курс: "SQL для анализа данных" Узнать больше</a>