Добавить и вычесть из даты
SQL Server
DATEADD
select dateadd(d,5,getdate()) as actual_5_days
select dateadd(d,5,cast(getdate() as date)) as actual_5_days
select Invoicedate, dateadd(d,7,Invoicedate) as PaymentDate, Total from Invoice where total>20
select dateadd(WEEK,-1,cast(getdate() as date)) as week_before
Oracle
select sysdate+5 as actual_5_days from dual;
select to_char(sysdate+1/24,'dd/mm/yyyy hh24:mm:ss') as actual_1_hour from dual;
select to_char(TRUNC(sysdate)+5,'dd/mm/yyyy hh24:mm:ss') as actual_5_DAYS from dual;
select Invoicedate, Invoicedate+7 as PaymentDate, Total from chinook.Invoice where total>20
select sysdate as actual, sysdate-7 as week_before from dual;
select to_char(sysdate,'mm/dd/yyyy') as actual, to_char(sysdate-7,'mm/dd/yyyy') as week_before from dual;
PostgreSQL
select current_date as actual_date, current_date+5 as actual_5_days;
select current_timestamp as actual_date, current_timestamp+interval '1 hour' as actual_1_hour;
select "InvoiceDate","InvoiceDate"+ interval '7 days' as PaymentDate, "Total" from "Invoice" where "Total">20
select current_date as actual_date, current_date -7 as date_week_before
select current_timestamp as actual_date, current_timestamp - interval '7 days' as date_week_before
Подстановочные знаки
Подстановочный знак совпадает с любой последовательностью из нуля или более символов. Ниже приведена измененная версия предыдущего запроса, в которой используется шаблон, содержащий знак процента.
Оператор указывает SQL, что необходимо сравнивать содержимое столбца с шаблоном «Smith% Corp.». Этому шаблону соответствуют все перечисленные ниже имена.
Smith Corp.
Smithsen Corp.
Smithson Corp.
Smithsonian Corp.
А вот эти имена данному шаблону не соответствуют.
SmithCorp
Smithson Inc.
Подстановочный знак (символ подчеркивания) совпадает с любым отдельным символом. Например, если вы уверены, что название компании либо «Smithson», либо «Smithsen», то можете воспользоваться следующим запросом.
В таком случае шаблону будет соответствовать любое из представленных ниже имен.
Smithson Corp.
Smithsen Corp.
Smithsun Corp.
А вот ни одно из следующих ему соответствовать не будет.
Smithsoon Corp.
Smithsn Corp.
Подстановочные знаки можно помещать в любое место строки шаблона, и в одной строке может содержаться несколько подстановочных знаков. Следующий запрос допускает как написание «Smithson» и «Smithsen», так и любое другое окончание названия компании, включая «Corp.», «Inc.» или какое-то другое.
С помощью формы можно находить строки, которые не соответствуют шаблону. Проверку можно применять только к столбцам, имеющим строковый тип данных. Если в столбце содержится значение , то результатом проверки будет .
Вероятно, вы уже встречались с проверкой на соответствие шаблону в операционных системах, имеющих интерфейс командной строки (таких, как Unix). Обычно в этих системах звездочка () используется для тех же целей, что и символ процента () в SQL, а вопросительный знак () соответствует символу подчеркивания () в SQL, но в целом возможности работы с шаблонами строк в них такие же.
Простые примеры использования SELECT
Синтаксис:
> SELECT <fields1> FROM <table>
* где fields1 — поля для выборки через запятую, также можно указать все поля знаком *; table — имя таблицы, из которой вытаскиваем данные; conditions — условия выборки; fields2 — поле или поля через запятую, по которым выполнить сортировку; count — количество строк для выгрузки.
* запрос в квадратных скобках не является обязательным для выборки данных.
> SELECT * FROM users
* в данном примере мы получаем список всех записей из таблицы users.
2. Выборка данных с объединением двух таблиц (JOIN)
SELECT u.name, r.* FROM users u JOIN users_rights r ON r.user_id=u.id
* в данном примере идет выборка данных с объединением таблиц users и users_rights. Объединяются они по полям user_id (в таблице users_rights) и id (users). Извлекается поле name из первой таблицы и все поля из второй.
3. Выборка с интервалом по времени и/или дате
Варианты запросов и примеров могут быть самые разные. Мы рассмотрим те, с которыми чаще всего приходилось иметь дело автору.
а) известна точка начала и определенный временной интервал:
> SELECT * FROM users WHERE date >= DATE_SUB(NOW(), INTERVAL 1 HOUR)
* будут выбраны данные за последний час (поле date).
б) известны дата начала и дата окончания:
> SELECT * FROM users WHERE date >= ‘2017-10-25’ AND date <= ‘2017-11-25’
* выбираем данные в промежутке между 25.10.2017 и 25.11.2017.
в) известны даты начала и окончания + время:
> SELECT * FROM users WHERE DATE(date) BETWEEN ‘2018-03-25 00:15:00’ AND ‘2018-04-25 15:33:09’;
* выбираем данные в промежутке между 25.03.2018 0 часов 15 минут и 25.04.2018 15 часов 33 минуты и 9 секунд.
г) вытаскиваем данные за определенные месяц и год:
> SELECT * FROM study WHERE MONTH(date) = 4 AND YEAR(date) = 2018
* извлечем данные, где в поле date присутствуют значения для апреля 2018 года.
д) текущая дата минут год:
> SELECT * FROM study WHERE date < (CURDATE() — INTERVAL 1 YEAR)
* мы получим данные, которые имеют в колонке date дату, старше одного года.
4. Выборка максимального, минимального и среднего значения
> SELECT max(area), min(area), avg(area) FROM country
* max — максимальное значение; min — минимальное; avg — среднее.
5. Использование длины строки
> SELECT * FROM users WHERE CHAR_LENGTH(name) = 5;
* данный запрос должен показать всех пользователей, имя которых состоит из 5 символов.
6. Использование лимитов (LIMIT)
Применяется для ограничения количества выводимых результатов. Синтаксис:
<основной запрос> LIMIT <число1>
* где число1 — сколько результатов вернуть; число2 — сколько результатов пропустить, необязательный параметр — если его не писать, то отсчет начнется с первой строки.
а) извлечь максимум 15 строк:
> SELECT * FROM users LIMIT 15;
б) выбрать строки с 16 по 25 (запрос со смещением):
> SELECT * FROM users LIMIT 15, 10;
* 15 строк пропускаем, 10 извлекаем.
Детальный ответ
Как сделать выборку по дате в SQL
SQL является мощным языком для работы с базами данных. Одним из наиболее часто возникающих запросов является выборка данных на основе даты. В этой статье мы рассмотрим различные способы сделать выборку по дате в SQL.
1. Использование оператора WHERE
Простейший способ сделать выборку по дате в SQL — использовать оператор WHERE с условием, основанным на поле даты. Например, предположим, у нас есть таблица «orders» с полем «order_date». Чтобы получить все заказы, сделанные в определенную дату, мы можем написать следующий запрос:
В данном примере мы выбираем все поля из таблицы «orders», где поле «order_date» равно ‘2021-10-01’.
2. Использование операторов сравнения
Если мы хотим сделать выборку данных в указанном диапазоне дат, мы можем использовать операторы сравнения в комбинации с оператором WHERE. Например, чтобы получить все заказы, сделанные между 1 и 10 октября 2021 года, мы можем написать следующий запрос:
В этом запросе мы выбираем все поля из таблицы «orders», где поле «order_date» больше или равно ‘2021-10-01’ и меньше или равно ‘2021-10-10’.
3. Использование операторов BETWEEN и AND
Существует другой способ сделать выборку данных в указанном диапазоне дат с использованием операторов BETWEEN и AND. Например, чтобы получить все заказы, сделанные между 1 и 10 октября 2021 года, мы можем написать следующий запрос:
В этом запросе мы выбираем все поля из таблицы «orders», где поле «order_date» находится в диапазоне от ‘2021-10-01’ до ‘2021-10-10’.
4. Использование функций даты и времени
SQL также предоставляет ряд функций даты и времени, которые могут быть использованы для выполнения более сложных запросов по дате. Например, мы можем использовать функцию DATE_ADD для выборки данных, сделанных за последние 7 дней:
В этом запросе мы выбираем все поля из таблицы «orders», где поле «order_date» больше или равно текущей дате, вычитаем 7 дней, и меньше или равно текущей дате.
Заключение
В данной статье мы рассмотрели различные способы сделать выборку по дате в SQL. Вы можете использовать оператор WHERE, операторы сравнения, операторы BETWEEN и AND, а также функции даты и времени, чтобы получить нужные вам данные. Помните, что правильное понимание и использование этих конструкций помогут вам эффективно работать с базами данных и получать необходимую информацию.
Как выглядит структура SQL-запроса
Перед вами — пример классического SQL-запроса, который состоит из шести самых популярных операторов: два из них обязательные, а другие четыре — используются по обстоятельствам. Вместе они выглядят так:
- SELECT — выбирает отдельные столбцы или всю таблицу целиком (обязательный);
- FROM — из какой таблицы получить данные (обязательный);
- WHERE — условие, по которому SQL выбирает данные;
- GROUP BY — столбец, по которому мы будут группироваться данные;
- HAVING — условие, по которому сгруппированные данные будут отфильтрованы;
- ORDER BY — столбец, по которому данные будут отсортированы;
Давайте разберём каждую из частей этого запроса по порядку.
SELECT
Любая команда должна начинаться с ключевого слова — или действия, которое должно произойти. Например, выбрать строку, вставить новую, изменить старую или удалить таблицу целиком.
Одно из таких ключевых слов — SELECT. Оно выбирает отдельные столбцы или таблицу целиком, чтобы потом передать данные другим запросам на обработку.
В качестве примера выберем столбцы Name и Age из таблицы Clients:
На выходе будут все строки таблицы, принадлежащие столбцам Name и Age.
FROM
Эта часть ставится после SELECT и нужна затем, чтобы указать, из какой таблицы или источника данных приходит информация. Здесь прописывается имя таблицы, с которой мы хотим работать.
Например, ранее мы уже выбирали данные из таблицы Clients:
В SQL всё построено на таблицах. Поэтому, если нужно получить данные из другого места — указываем другую таблицу.
WHERE
Если нужно отфильтровать данные, используем слово WHERE. После него указывается условие, которому должны удовлетворять строки, чтобы они попали в результат выполнения запроса.
Например, этот запрос вернёт все строки из таблицы, где значения Age больше 20:
GROUP BY
Этот оператор помогает нам сгруппировать данные по определённым столбцам. В результате получим новую таблицу, составленную на основе выбранных данных.
Например, сгруппируем результат предыдущего запроса по городам:
Запрос вернёт клиентов старше 20 лет и сгруппирует их по городам. Главное — чтобы столбец City присутствовал в таблице.
HAVING
Нужен, чтобы собирать группы по определённым условиям. Его обычно используют в паре с GROUP BY, а по своей функциональности он похож на WHERE.
Например, укажем, чтобы в группы добавлялись только клиенты с суммой заказа от 1000 рублей:
Так как наш запрос растёт, будем каждую его часть выносить на новую строку — чтобы не запутаться. На корректность запроса это не повлияет, а читать его станет куда удобнее.
ORDER BY
Позволяет сортировать полученные строки по возрастанию или убыванию. Работает как с числами, так и с символами. В качестве параметра нужно указать столбец, по которому надо выполнить сортировку.
Допустим, если хотим отсортировать клиентов по возрасту — от младшего к старшему, — добавляем команду ORDER BY Age:
А чтобы отсортировать по убыванию, просто добавляем слово DESC:
Оператор SELECT sql
SQL-запрос Select предназначен для обычной выборки из базы данных. Т.е. если нам необходимо просто получить данные, не делая с ними никакой обработки и не внося изменений в базу данных, то можно смело использовать данный запмагарос.
Синтаксис оператора SELECT
Рассмотрим примеры sql запросов select:
Пример : если вы создали локальную базу данных и заполнили таблицы, как в рассмотренном ранее уроке (или же воспользовались сервисом sqlFiddle), то выполним следующий пример.
Необходимо выбрать все записи из таблицы
SELECT * FROM teachers; |
Задание 1_1. . Вывести все поля из таблицы Группы.
SELECT name, zarplata FROM teachers; |
Выберет все значения полей и в том же порядке (сначала , затем )
Задание 1_2. . Получить информацию только о фамилии и годе рождения из таблицы
Сортировка в SQL
SELECT name, zarplata, premia FROM teachers ORDER BY name; |
Выберет значения полей , , и отсортирует по полю (по алфавиту)
Пример: БД «Компьютерный магазин». Выбрать данные о скорости и памяти компьютеров. Требуется упорядочить результирующий набор по скорости процессора в порядке возрастания.
SELECT `Скорость`,`Память` FROM `pc` ORDER BY `Скорость` ASC |
Или
SELECT `Скорость`,`Память` FROM `pc` ORDER BY 1 ASC |
Результат:
Сортировку можно выполнять по двум полям:
SELECT `Скорость`,`Память` FROM `pc` ORDER BY `Скорость` ASC, `Память` ASC |
Задание sql select 1_1. База данных : Получить информацию только о скорости процессора и объеме оперативной памяти компьютеров.
Задание sql select 1_2. База данных : Требуется упорядочить результирующий набор по объему оперативной памяти в порядке убывания.
SELECT name, zarplata, premia FROM teachers ORDER BY name DESC; |
Выберет значения полей , , и отсортирует по полю по убыванию
Задание 1_3. . Вывести информацию о фамилиях и годах рождения. Упорядочить результирующий набор по году рождения в порядке убывания.
Удаление повторяющихся значений в SQL
Пример БД «Институт»: требуется узнать возможные варианты размера премий. Если не использовать , в результате будет выдаваться два одинаковых значения. Удалить в sql повторяющиеся значения можно при введении — в результате дублирующиеся значения не повторяются.
-
SELECT premia FROM teachers;
-
SELECT DISTINCT premia FROM teachers;
Рассмотрим другой пример из базы данных «Компьютерный магазин»:
Пример: База данных «Компьютерный магазин»: требуется получить информацию только о скорости процессора и объеме оперативной памяти компьютеров
SELECT Скорость, Память FROM PC; |
Результат:
В таблице первичным ключом является поле . Поскольку это поле отсутствует в запросе, в приведенном выше результирующем наборе имеются дубликаты строк.
Когда требуется получить уникальные строки (например, нас интересуют только различные комбинации скорости процессора и объема памяти, а не характеристики всех имеющихся компьютеров), то нужно использовать :
SELECT DISTINCT Скорость, Память FROM PC; |
Результат:
Задание sql select 1_3. База данных : Из таблицы выбрать различные страны-производители.
Задание sql select 1_1. БД «Институт» Выполните запрос на выборку и из таблицы учителей. Отсортируйте фамилии учителей по убыванию
Задание sql select 1_2. БД «Институт» Выведите возможные варианты длины курсов () из таблицы курсов (), удалив повторяющиеся значения
Задание 1_4. . Из таблицы личные данные вывести поля и . Получить уникальные строки
Составные условия отбора (AND, OR и NOT)
Простые условия отбора, описанные в предыдущих разделах, после применения к некоторой строке возвращают значения , или . С помощью правил логики эти простые условия можно объединять в более сложные, как изображено на рис. 11
Обратите внимание на то, что условия отбора, объединяемые с помощью операторов , и , сами могут быть составными
Рис. 11. Синтаксическая диаграмма предложения WHERE
Оператор OR используется для объединения двух условий отбора, из которых или одно, или другое (или оба) должно быть истинным.
Найти служащих, у которых фактический объем продаж меньше планового или меньше $300000.
Для объединения двух условий отбора, оба из которых должны быть истинными, следует использовать оператор .
Найти служащих, у которых фактический объем продаж меньше планового и меньше $300000.
И наконец, можно использовать оператор NOT, чтобы выбрать строки, для которых условие отбора ложно.
Найти служащих, у которых фактический объем продаж меньше планового, но не меньше $150000.
С помощью логических операторов , , и круглых скобок можно создавать очень сложные условия отбора, как в следующем примере.
Найти всех служащих, которые: (а) работают в Денвере, Нью-Йорке или Чикаго; или (б) не имеют менеджера и были приняты на работу после июня 2006 года; или (в) у которых продажи превысили плановый объем, но не превысили $600000.
Лично для меня остается загадкой, зачем может понадобиться такой список имен, однако приведенный пример является иллюстрацией довольно сложного запроса.
Как и в случае с простыми условиями отбора, значения влияют на интерпретацию составных условий отбора, вследствие чего результаты последних становятся не столь очевидными. В частности, результатом операции является значение , а не , как можно было ожидать. Табл. 1-3 являются таблицами истинности для операторов , и соответственно в случае тернарной логики (со значениями ).
Таблица 1. Таблица истинности оператора and
AND |
TRUE |
FALSE |
NULL |
TRUE |
TRUE |
FALSE |
NULL |
FALSE |
FALSE |
FALSE |
FALSE |
NULL |
NULL |
FALSE |
NULL |
Таблица 2. Таблица истинности оператора OR
OR |
TRUE |
FALSE |
NULL |
TRUE |
TRUE |
TRUE |
TRUE |
FALSE |
TRUE |
FALSE |
NULL |
NULL |
TRUE |
NULL |
NULL |
Таблица 3. Таблица истинности оператора NOT
NOT |
TRUE |
FALSE |
NULL |
FALSE |
TRUE |
NULL |
В соответствии со стандартом ANSI/ISO, если с помощью операторов , и объединяется более двух условий отбора, то оператор имеет наивысший приоритет, за ним следует и только потом . Однако чтобы гарантировать переносимость, всегда следует использовать круглые скобки; это позволит устранить все возможные неоднозначности.
В стандарте SQL2 (известном также как SQL-92 и SQL: 1992) появилось еще одно логическое условие отбора — проверка . На рис. 12 изображена синтаксическая диаграмма этой проверки. Оператор проверяет значение результата логического выражения.
Рис. 12. Синтаксическая диаграмма оператора IS
Например, проверку
можно использовать, чтобы отыскать строки, в которых нельзя выполнить сравнение из-за того, что либо столбец , либо столбец имеет значение . Подобным образом проверка
позволяет выбрать строки, в которых значение столбца если и превышает значение столбца , то незначительно. Как показывает данный пример, на самом деле проверка не привносит в SQL ничего нового, поскольку ее можно легко переписать в следующем виде.
Хотя проверка IS внесена в стандарт SQL с 1992 года, ее поддерживает очень небольшое количество SQL-продуктов. Так что для обеспечения максимальной переносимости следует избегать подобных проверок и записывать выражения только с помощью операторов , и . Однако избежать проверки удается не всегда.
Выполнение запросов к базе данных
Вы можете использовать метод фасада , чтобы начать запрос. Метод возвращает текущий экземпляр построителя запросов для данной таблицы, позволяя вам связать больше ограничений к запросу и, наконец, получить результаты, используя метод :
Метод возвращает экземпляр , содержащий результаты запроса, где каждый результат является экземпляром объекта PHP. Вы можете получить доступ к значению каждого столбца, обратившись к столбцу как к свойству объекта:
Если вам просто нужно получить одну строку из таблицы базы данных, вы можете использовать метод фасада . Этот метод вернет единственный объект :
Если вам не нужна вся строка, вы можете извлечь одно значение из записи с помощью метода . Этот метод вернет значение столбца напрямую:
Чтобы получить одну строку по значению столбца , используйте метод :
Если вы хотите получить экземпляр , содержащий значения одного столбца, вы можете использовать метод . В этом примере мы получим коллекцию из названий пользователей:
Вы можете указать столбец, который результирующая коллекция должна использовать в качестве ключей, указав второй аргумент методу :
Если вам нужно работать с тысячами записей базы данных, рассмотрите возможность использования метода фасада . Этот метод извлекает за раз небольшой фрагмент результатов и передает каждый фрагмент в функцию-аргумент для обработки. Например, давайте извлечем всю таблицу фрагментами по 100 записей за раз:
Вы можете остановить обработку последующих фрагментов, вернув из функции обработки :
Если вы обновляете записи базы данных во время фрагментирования результатов, то результаты ваших фрагментов могут измениться неожиданным образом. Если вы планируете обновлять полученные записи при фрагментировании, всегда лучше использовать вместо этого метод . Этот метод автоматически разбивает результаты на фрагменты на основе первичного ключа записи:
Метод работает аналогично в том смысле, что он выполняет запрос по частям. Однако вместо передачи каждого фрагмента непосредственно в функцию-обработчик, метод возвращает экземпляр , что позволяет вам взаимодействовать с результатами как с единым потоком:
Еще раз, если вы планируете обновлять полученные записи во время их итерации, лучше вместо этого использовать методы или . Эти методы автоматически разбивают результаты «постранично» на основе первичного ключа записи:
Построитель запросов также содержит множество методов для получения агрегированных значений, таких как , , , , и . После создания запроса вы можете вызвать любой из этих методов:
Конечно, вы можете комбинировать эти методы с другими выражениями, чтобы уточнить способ вычисления вашего совокупного значения:
Вместо использования метода для определения существования каких-либо записей, соответствующих ограничениям вашего запроса, используйте методы и :
Добавить и вычесть из даты
SQL Server
DATEADD
select dateadd(d,5,getdate()) as actual_5_days
select dateadd(d,5,cast(getdate() as date)) as actual_5_days
select Invoicedate, dateadd(d,7,Invoicedate) as PaymentDate, Total from Invoice where total>20
select dateadd(WEEK,-1,cast(getdate() as date)) as week_before
Oracle
select sysdate+5 as actual_5_days from dual;
select to_char(sysdate+1/24,'dd/mm/yyyy hh24:mm:ss') as actual_1_hour from dual;
select to_char(TRUNC(sysdate)+5,'dd/mm/yyyy hh24:mm:ss') as actual_5_DAYS from dual;
select Invoicedate, Invoicedate+7 as PaymentDate, Total from chinook.Invoice where total>20
select sysdate as actual, sysdate-7 as week_before from dual;
select to_char(sysdate,'mm/dd/yyyy') as actual, to_char(sysdate-7,'mm/dd/yyyy') as week_before from dual;
PostgreSQL
select current_date as actual_date, current_date+5 as actual_5_days;
select current_timestamp as actual_date, current_timestamp+interval '1 hour' as actual_1_hour;
select "InvoiceDate","InvoiceDate"+ interval '7 days' as PaymentDate, "Total" from "Invoice" where "Total">20
select current_date as actual_date, current_date -7 as date_week_before
select current_timestamp as actual_date, current_timestamp - interval '7 days' as date_week_before
Создание образца базы данных
Прежде чем мы сможем начать делать запросы в SQL, мы сначала создадим базу данных и пару таблиц, а затем заполним эти таблицы некоторыми примерами данных. Это позволит вам получить практический опыт, когда вы начнете делать запросы позже.
Для примера базы данных, которую мы будем использовать в этом руководстве, представьте следующий сценарий:
Вы и несколько ваших друзей празднуете свои дни рождения друг с другом. В каждом случае члены группы направляются в местный боулинг, участвуют в дружеском турнире, а затем все направляются к вам, где вы готовите любимое блюдо для именинника.
Теперь, что эта традиция продолжается некоторое время, вы решили начать отслеживать записи с этих турниров. Кроме того, чтобы упростить планирование обедов, вы решаете создать запись о днях рождения ваших друзей и их любимых блюдах, сторонах и десертах. Вместо того чтобы хранить эту информацию в физической книге, вы решаете использовать свои навыки работы с базами данных, записав ее в базу данных MySQL.
Если вы создали сервер в NetAngels на основе образа Ubuntu 18.04 Bionic LAMP, то откройте приглашение MySQL выполнив от пользователя root команду:
mysql
Примечание: Если зайти в MySQL таким образом не удается, то для аутентификации с использованием пароля используйте команду:
mysql -u root -p
Затем создайте базу данных, запустив:
Затем выберите эту базу данных, набрав:
Затем создайте две таблицы в этой базе данных. Мы будем использовать первую таблицу, чтобы отслеживать записи ваших друзей в боулинге. Следующая команда создаст таблицу под названием «tourneys» со столбцами для «name» каждого из ваших друзей, количества турниров, которые они выиграли («wins»), их лучший результат за все время и каков размер обувь для боулинга, которую они носят ():
Как только вы запустите команду и заполните ее заголовками столбцов, вы получите следующий вывод:
Заполните таблицу ‘tourneys’ некоторыми примерами данных:
Вы получите такой вывод:
После этого создайте еще одну таблицу в той же базе данных, которую мы будем использовать для хранения информации о любимых блюдах ваших друзей на день рождения. Следующая команда создает таблицу с именем dinners и столбцами для«имя» каждого из ваших друзей, их «дата рождения», их любимое «блюдо», их любимое «гарнир» и их любимый «десерт»:
Аналогично для этой таблицы вы получите отзыв, подтверждающий успешное выполнение команды:
Заполните эту таблицу также некоторыми примерами данных:
Как только эта команда завершится успешно, вы закончили настройку базы данных. Далее мы рассмотрим основную структуру команд запросов SELECT.