Вложенные запросы. Для новичка
Задача:
Вывести информацию о книгах (название книги, фамилию и инициалы автора, название жанра, цену и количество экземпляров книги), написанных в самых популярных жанрах, в отсортированном в алфавитном порядке по названию книг виде. Самым популярным считать жанр, общее количество экземпляров книг которого на складе максимально.
Есть три таблицы: авторы, книги и жанры. Нужно вывести самые популярные по жанрам книги
Говорят надо использовать вложенные запросы. Я туплю.
Оптимизировать вложенные запросы
Здравия желаю!:drink: Мучаю Nested Sets, но не в них суть. Как можно переделать вот такой.
Вложенные запросы MySQL
Здравствуйте, у меня возникла проблема с вложенными запросами в MySQL, а именно — есть у меня поле.
И еще вложенные запросы
Всех приветствую. Есть две таблицы с работниками и детьми. Нужно выбрать сотрудников.
Вложенные select запросы
Здравствуйте. Есть две таблицы: таблица, в которой записывается осмотры пациентов и таблица о.
Вложенные запросы: подзапросы в разделе Select. Как выполнить запрос?
День добрый! Прошу помочь разобраться с одним заданием. Я изучаю подзапросы в разделе Select.
Вложенные запросы
Доброго времени суток! Мне нужно построить запрос для вычисления второго по стоимости договора, .
Вложенные запросы
Объясните, пожалуйста, в чем разница двух запросов SELECT * FROM Courts WHERE >
Вложенные запросы
Доброго времени суток. Очень прошу помощи. Имеется 3 запроса, необходимо из этих трех сделать 1.
Вложенные запросы
Здравствуйте, нужно сделать SQL-запрос. Укажите команду SQL результатом которой была бы таблица.
Вложенные запросы
Нужно реализовать пару-тройку вложенных запросов(по сути просто что бы были), не знаю как их.
SQL — Запрос. Для каждого жанра найти три книги, количество доступных экземпляров которых максимально
Помогите решить: Для каждого жанра найти три книги, количество доступных экземпляров которых максимально. Если у четвертой и далее книг количество экземпляров такое же, как у третьей, то вывести их всех. Вывести название жанра, название книги, доступное количество экземпляров. Информация должна быть отсортирована по названию жанра в алфавитном порядке, затем по убыванию количества доступных книг и, наконец, по названию книг в алфавитном порядке.
Пояснение В табличном выражении для каждого жанра пронумеруйте книги с помощью оконной функции RANK(). В основном запросе, отберите все книги, ранг которых меньше или равен 3.
Вывести в алфавитном порядке всех авторов которые пишут только в одном жанре
Создание данного сайта явилось желание сделать конспект по языку запросов SQL. В основе конспект из готовых задании и решении задач по SQL, так как Базы данных для тренировки тут нет, то ниже указаны задачи и ответы на них. Примеры помогут вспомнить как должен выглядеть такой-то запрос, а ответ на них поможет сравнить на сколько верно написан запрос. В разделах Book собраны популярные книги по SQL и базам данных и есть ссылки на ресурсы, где можно их скачать. В разделе Task указаны популярные задачники и тренажеры по SQL. Сайт будет периодически пополняться тематической информацией.
-
Для занесения новой записи в таблицу используется SQL запрос, в котором указывается в какую таблицу, в какие поля заносить новые значения. Структура запроса:
- ключевые слова INSERT INTO;
- имя таблицы, в которую добавляется запись;
- открывающая круглая скобка «(»;
- список полей через запятую, в которые следует занести новые данные;
- закрывающая скобка «)»;
- ключевое слово VALUES;
- открывающая круглая скобка «(»;
- список значений через запятую, которые заносятся в соответствующие поля, при этом текстовые значения заключаются в кавычки, числовые значения записываются без кавычек, в качестве разделителя целой и дробной части используется точка;
- закрывающая скобка «)».
Занесите новую строку в таблицу book (текстовые значения (тип VARCHAR) заключать либо в двойные, либо в одинарные кавычки):



Занесите три последние записи в таблицу book, первая запись уже добавлена на предыдущем шаге:



-
Для того чтобы отобрать данные из определенных столбцов таблицы и одновременно задать столбцам другие имена (псевдонимы) используется SQL запрос следующей структуры:
- ключевое слово SELECT;
- имя столбца;
- ключевое слово AS;
- название столбца — псевдоним (можно русскими буквами), но это должно быть одно слово, если название состоит из двух слов – соединяйте их подчеркиванием, например, Количество_книг;
- запятая;
- имя столбца;
- .
- ключевое слово FROM;
- имя таблицы.
Результатом является таблица, в которую включены все данные из указанных после SELECT столбцов исходной таблицы. Каждому столбцу присваивается имя, заданное после AS, или столбец получает имя столбца исходной таблицы, если AS отсутствует.
Выбрать названия книг и авторов из таблицы book, для поля title задать имя(псевдоним) Название, для поля author – Автор:


С помощью SQL запросов можно осуществлять вычисления по каждой строке таблицы с помощью вычисляемого столбца. Для него в списке полей после оператора SELECT указывается выражение и задается имя.
Выражение может включать имена столбцов, константы, знаки операций, встроенные функции.
Результатом является таблица, в которую включены все данные из указанных после SELECT столбцов, а также новый столбец, в каждой строке которого вычисляется заданное выражение.
Задание:
Для упаковки каждой книги требуется 1 лист бумаги, цена которого 1 рубль 65 копеек. Посчитать стоимость упаковки для каждой книги (сколько денег потребуется, чтобы упаковать все экземпляры книги). В запросе вывести название книги, ее количество и стоимость упаковки, последний столбец назвать pack.


В SQL реализовано множество математических функций для работы с числовыми данными. В таблице приведены некоторые из них.
-
Пояснение:
- Существуют разные способы округления чисел. В SQL реализовано математическое округление. Для округления вещественного числа нужно в записи числа выбрать разряд в дробной части, до которого производится округление. Цифра, записанная в выбранном разряде: не меняется, если следующая за ней справа цифра — 0, 1, 2, 3 или 4; увеличивается на единицу, если следующая за ней справа цифра — 5,6,7,8 или 9.
В конце года цену всех книг на складе пересчитывают – снижают ее на 30%. Написать SQL запрос, который из таблицы book выбирает названия, авторов, количества и вычисляет новые цены книг. Столбец с новой ценой назвать new_price, цену округлить до 2-х знаков после запятой.


В SQL реализована возможность заносить в поле значение в зависимости от условия. Для этого используется функция IF:
IF(логическое_выражение, выражение_1, выражение_2)
Функция вычисляет логическое_выражение, если оно истина – в поле заносится значение выражения_1, в противном случае – значение выражения_2. Все три параметра IF() являются обязательными.
Допускается использование вложенных функций, вместо выражения_1 или выражения_2 может стоять новая функция IF.
При анализе продаж книг выяснилось, что наибольшей популярностью пользуются книги Михаила Булгакова, на втором месте книги Сергея Есенина. Исходя из этого решили поднять цену книг Булгакова на 10%, а цену книг Есенина — на 5%. Написать запрос, куда включить автора, название книги и новую цену, последний столбец назвать new_price. Значение округлить до двух знаков после запятой.
-
Пояснение:
- фамилию автора задавать с инициалами (как занесено в таблице), заключая в одинарные или двойные кавычки;
- для сравнения на равенство использовать знак =, например author=»Булгаков М.А.».


С помощью запросов можно включать в итоговую выборку не все строки исходной таблицы, а только те, которые отвечают некоторому условию. Для этого после указания таблицы, откуда выбираются данные, задается ключевое слово WHERE и логическое выражение, от результата которого зависит будет ли включена строка в выборку или нет. Если условие – истина, то строка(запись) включается в выборку, если ложь – нет.
Логическое выражение может включать операторы сравнения (равно «=», не равно «<>», больше «>», меньше « =», меньше или равно « Задание:
При анализе продаж книг выяснилось, что наибольшей популярностью пользуются книги Михаила Булгакова, на втором месте книги Сергея Есенина. Исходя из этого решили поднять цену книг Булгакова на 10%, а цену книг Есенина — на 5%. Написать запрос, куда включить автора, название книги и новую цену, последний столбец назвать new_price. Значение округлить до двух знаков после запятой.
-
Пояснение:
- фамилию автора задавать с инициалами (как занесено в таблице), заключая в одинарные или двойные кавычки;
- для сравнения на равенство использовать знак =, например author=»Булгаков М.А.».


Логическое выражение после ключевого слова WHERE кроме операторов сравнения и выражений может включать логические операции (И «and», ИЛИ «or», НЕ «not») и круглые скобки, изменяющие приоритеты выполнения операций.
-
Приоритеты операций:
- круглые скобки
- умножение (*), деление (/)
- сложение (+), вычитание (-)
- операторы сравнения (=, >, =, )
- NOT
- AND
- OR
Вывести название, автора, цену и количество всех книг, цена которых меньше 500 или больше 600, а стоимость всех экземпляров этих книг больше или равна 5000.


Логическое выражение после ключевого слова WHERE может включать операторы BETWEEN и IN. Приоритет у этих операторов такой же как у операторов сравнения, то есть они выполняются раньше, чем NOT, AND, OR.
Оператор BETWEEN позволяет отобрать данные, относящиеся к некоторому интервалу, включая его границы.
Задание:
Вывести название и авторов тех книг, цены которых принадлежат интервалу от 540.50 до 800 (включая границы), а количество или 2, или 3, или 5, или 7 .


Оператор LIKE используется для сравнения строк. В отличие от операторов отношения равно (=) и не равно (<>), LIKE позволяет сравнивать строки не на полное совпадение (не совпадение), а в соответствии с шаблоном. Шаблон может включать обычные символы и символы-шаблоны. При сравнении с шаблоном, его обычные символы должны в точности совпадать с символами, указанными в строке. Символы-шаблоны могут совпадать с произвольными элементами символьной строки.
Задание:
Вывести название и автора тех книг, название которых состоит из двух и более слов, а инициалы автора содержат букву «С». Считать, что в названии слова отделяются друг от друга пробелами и не содержат знаков препинания, между фамилией автора и инициалами обязателен пробел, инициалы записываются без пробела в формате: буква, точка, буква, точка.
-
Пояснение:
- При записи условия, необходимо учесть, что слово в названии обязательно должно содержать хотя бы один символ.
- Инициалы в этом задании — это первая буква имени или отчества, после которой стоит точка.

При выборке можно указывать столбец или несколько столбцов, по которым необходимо отсортировать отобранные строки. Для этого используются ключевые слова ORDER BY, после которых задаются имена столбцов. При этом строки сортируются по первому столбцу, если указан второй столбец, сортировка осуществляется только для тех строк, у которых значения первого столбца одинаковы. По умолчанию ORDER BY выполняет сортировку по возрастанию. Чтобы управлять направлением сортировки вручную, после имени столбца указывается ключевое слово ASC (по возрастанию) или DESC (по убыванию).
-
Логический порядок операций для запроса SQL следующий:
- FROM
- WHERE
- SELECT
- ORDER BY
Поскольку сортировка выполняется позже SELECT, для указания столбцов, по которым выполняется сортировка, можно использовать имена, присвоенные им после SELECT, а также порядковый номер столбца в перечислении.
Задание:
Вывести автора и название книг, количество которых принадлежит интервалу от 2 до 14 (включая границы). Информацию отсортировать по авторам (в обратном алфавитном порядке) и названиям (по алфавиту).


При группировке над элементами столбца, входящими в группу можно выполнить различные действия, например, просуммировать их или найти количество элементов в группе.
При группировке данных таблицы book по столбцу author, получается три группы. В первую группу входят две строки, в поле author которых стоит значение «Булгаков М.А.». В столбце amount к этой группе относится значения 3 и 5. Просуммировав эти значения, можно узнать общее количество книг Булгакова на складе. Для этого используется групповая функция SUM(). В скобках указывается столбец, по которому осуществляется суммирование.
Задание:
Вывести автора и название книг, количество которых принадлежит интервалу от 2 до 14 (включая границы). Информацию отсортировать по авторам (в обратном алфавитном порядке) и названиям (по алфавиту).
-
Пояснение:
- Название столбцов может состоять из нескольких слов, тогда их нужно заключать в кавычки. Но если слова написать через подчеркивание, тогда получится , что название состоит из одного слова, и кавычки можно не ставить.

К групповым функциям SQL относятся: MIN(), MAX() и AVG(), которые вычисляют минимальное, максимальное и среднее значение элементов столбца, относящихся к группе.
Задание:
Вывести минимальную, максимальную и среднюю цену книг каждого автора . Вычисляемые столбцы назвать Минимальная_цена, Максимальная_цена и Средняя_цена соответственно.


В качестве аргумента групповых функций SQL может использоваться не только столбец, но и любое допустимое в SQL арифметическое выражение.
Задание:
Для каждого автора вычислить суммарную стоимость книг S (имя столбца Стоимость), а также вычислить налог на добавленную стоимость для полученных сумм (имя столбца НДС ) , который включен в стоимость и составляет k = 18%, а также стоимость книг (Стоимость_без_НДС) без него. Значения округлить до двух знаков после запятой. В запросе для расчета НДС(tax) и Стоимости без НДС(S_without_tax) использовать следующие формулы:

-
Пояснение:
- Имена столбцов, присвоенные им с помощью AS, нельзя использовать в выражениях, используйте названия столбцов исходной таблицы.

Групповые функции позволяют вычислять итоговые значения по всей таблице. Например, можно посчитать общее количество книг на складе, вычислить суммарную стоимость и пр. Для этого после ключевого слова SELECT указывается групповая функция для выражения или имени столбца, а ключевые слова GROUP BY опускаются.
Задание:
Вывести цену самой дешевой книги, цену самой дорогой и среднюю цену книг на складе. Названия столбцов Минимальная_цена, Максимальная_цена, Средняя_цена соответственно. Среднюю цену округлить до двух знаков после запятой.


В запросы с групповыми функциями можно включать условие отбора строк, которое в обычных запросах записывается после WHERE. В запросах с групповыми функциями вместо WHERE используется ключевое слово HAVING , которое размещается после оператора GROUP BY.
Задание:
Вычислить среднюю цену и суммарную стоимость тех книг, количество экземпляров которых принадлежит интервалу от 5 до 14, включительно. Столбцы переименовать как показано в образце, значения округлить до 2-х знаков после запятой.
-
Пояснение:
- Если в запросе с групповыми функциями отсутствует GROUP BY, то для отбора записей используется ключевое слово WHERE.

-
WHERE и HAVING могут использоваться в одном запросе. При этом необходимо учитывать порядок выполнения SQL запроса на выборку на сервере:
- FROM
- WHERE
- GROUP BY
- HAVING
- SELECT
- ORDER BY
Сначала определяется таблица, из которой выбираются данные (FROM), затем из этой таблицы отбираются записи в соответствии с условием WHERE, выбранные данные агрегируются (GROUP BY), из агрегированных записей выбираются те, которые удовлетворяют условию после HAVING. Потом формируются данные результирующей выборки, как это указано после SELECT ( вычисляются выражения, присваиваются имена и пр. ). Результирующая выборка сортируется, как указано после ORDER BY.
Важно! Порядок ВЫПОЛНЕНИЯ запросов — это не порядок ЗАПИСИ ключевых слов в запросе на выборку. Порядок записи (синтаксис запроса) остается таким же, как рассматривался ранее в курсе. Порядок ВЫПОЛНЕНИЯ нужен для того, чтобы понять, почему, например, в WHERE нельзя использовать имена выражений из SELECT. Просто SELECT выполняется компилятором позже, чем WHERE, поэтому ему неизвестно, какое там выражение написано.
Задание:
Посчитать стоимость всех экземпляров каждого автора без учета книг «Идиот» и «Белая гвардия». В результат включить только тех авторов, у которых суммарная стоимость книг более 5000 руб. Результат отсортировать по убыванию стоимости.


Вложенный запрос, возвращающий одно значение, может использоваться в условии отбора записей WHERE как обычное значение совместно с операциями =, <>, >=, , Задание:
Вывести информацию (автора, название и цену) о книгах, цены которых меньше или равны средней цене книг на складе. Информацию вывести в отсортированном по убыванию цены виде. Среднее вычислить как среднее по цене книги.


Вложенный запрос, возвращающий одно значение, может использоваться в выражениях как обычный операнд, например, к нему можно что-то прибавить, отнять и пр.
Задание:
Вывести информацию (автора, название и цену) о тех книгах, цены которых превышают минимальную цену книги на складе не более чем на 150 рублей в отсортированном по возрастанию цены виде.


Вложенный запрос может возвращать несколько значений одного столбца. Оператор IN определяет, совпадает ли указанное в логическом выражении значение с одним из значений, содержащихся во вложенном запросе , при этом логическое выражение получает значение истина. Оператор NOT IN выполняет обратное действие – выражение истинно, если значение не содержится во вложенном запросе.
Задание:
Вывести информацию (автора, название и цену) о тех книгах, цены которых превышают минимальную цену книги на складе не более чем на 150 рублей в отсортированном по возрастанию цены виде.
-
Пояснение:
- Во вложенном запросе отберите те значения столбца amount, количество которых, вычисленное с помощью функции count(), равно 1.

Вложенный запрос, возвращающий несколько значений одного столбца, можно использовать для отбора записей с помощью операторов ANY и ALL совместно с операциями отношения (=, <>, =, ).
Операторы ANY и ALL используются в SQL для сравнения некоторого значения с результирующим набором вложенного запроса, состоящим из одного столбца. При этом тип данных столбца, возвращаемого вложенным запросом, должен совпадать с типом данных столбца (или выражения), с которым происходит сравнение.
Задание:
Вывести информацию о книгах(автор, название, цена), цена которых меньше самой большой из минимальных цен, вычисленной для каждого автора.


Вложенный запрос может располагаться после ключевого слова SELECT. В этом случае результат выполнения запроса выводится в отдельном столбце результирующей таблицы. При этом результатом запроса может быть либо одно значение, тогда оно будет повторяться во всех строках, либо несколько значений, количество которых равно количеству отобранных записей в основном запросе.
Задание:
Посчитать сколько и каких экземпляров книг нужно заказать поставщикам, чтобы на складе было одинаковое количество экземпляров каждой книги, равное значению самого большего количества экземпляров одной книги на складе. Столбцу с количеством заказываемых экземпляров книг присвоить имя Заказ.
Вывести список авторов-женщин, работающих в жанре романа, но не в жанре фантастики.
Предположим, что не все зарегистрированные в базе данных авторы имеют изданные книги. Вывести список всех авторов с указанием тематики изданных книг.
Найти авторов, работающих как с издательством «Мир», так и с издательством «АСТ».
Определить авторов, не печатающих свои книги в издательстве «АСТ».
Определить авторов, у каждого из которых было продано более 1000 экземпляров книг.
Определить авторов, общая стоимость книг которых, выпущенных издательством «Мир», составила наименьшую сумму.