Поиск по сайту:
Самое важное — уметь отличить важное от срочного (Е. Кащеев).

Подзапросы MySQL

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 5,00 из 5)
Загрузка...
02.03.2021
Как установить MySQL на Ubuntu 16.04

Подзапрос – это рекурсивный запрос SQL в рамках более крупного запроса, или подзапрос считается внутренним запросом. Напротив, внешний запрос называется запросом, который включает подзапрос. Подзапрос MySQL может быть встроен в запросы, включая SELECT, INSERT, UPDATE или DELETE. Кроме того, внутри другого подзапроса может быть вложен подзапрос. Подзапрос фразы следует заключать в квадратные скобки, где бы он ни использовался. Мы научим вас, как и когда использовать подзапрос MySQL для составления сложных запросов, и опишем идею связанного подзапроса. Откройте оболочку командной строки на рабочем столе и введите пароль, чтобы начать ее использовать. Нажмите Enter и продолжите.

 

Подзапрос в записях одной таблицы:

Создайте таблицу с именем «animals» в базе данных «data». Добавьте следующую запись о разных животных с разными свойствами, как показано. Получите эту запись с помощью запроса SELECT следующим образом:

>> SELECT * FROM data.animals;

Пример 01:

Давайте извлечем ограниченные записи этой таблицы с помощью подзапросов. Используя приведенный ниже запрос, мы знаем, что подзапрос будет выполнен первым, а его выходные данные будут использоваться в основном запросе в качестве входных. Подзапрос просто извлекает возраст, при котором цена животного составляет 1300.

>> SELECT * FROM data.animals WHERE Age > ( SELECT Age FROM data.animals WHERE Price=’1300’ );

Пример 02:

Давайте использовать одну и ту же таблицу в разных ситуациях. В этом примере мы будем использовать некоторую функцию вместо предложения WHERE в подзапросе. Мы взяли среднее значение всех цен на животных.

>> SELECT * FROM data.animals WHERE Price > ( SELECT AVG(Price) FROM data.animals);

Пример 03:

Давайте использовать предложение IN в основном запросе SELECT. Прежде всего, подзапрос получит цены больше 2500. После этого основной запрос выберет все записи таблицы «animals», в которых цена находится в результате подзапроса.

>> SELECT * FROM data.animals WHERE Price IN ( SELECT Price FROM data.animals WHERE Price > 2500 );

Пример 04:

Мы использовали подзапрос для получения имени животного, где цена равна 2500. В основном запросе все записи будут извлечены из таблицы, где имя животного равно цене 2500.

>> SELECT * FROM data.animals WHERE Name = ( SELECT Name FROM data.animals WHERE Price=’2500’ );

Подзапрос в нескольких записях таблиц:

Предположим, что в вашей базе данных есть две таблицы ниже, «student» и «teacher». Давайте попробуем несколько примеров подзапросов с использованием этих двух таблиц.

>> SELECT * FROM data.student;
>> SELECT * FROM data.teacher;

Пример 01:

Мы будем извлекать данные из одной таблицы с помощью подзапроса и использовать их в качестве входных данных для основного запроса. Это означает, что эти две таблицы могут как-то связаны. В приведенном ниже примере мы использовали подзапрос для получения имени ученика из таблицы «student», где имя учителя – «AndreyEx». Этот запрос вернет AndreyEx в основную таблицу запросов «teacher». Затем основной запрос выберет все записи, связанные с именем учителя «AndreyEx». Так как у нас есть две записи для этого имени, значит, мы получили такой результат.

>> SELECT * FROM data.teacher WHERE TeachName = ( SELECT TeachName FROM data.student WHERE TeachName = ‘AndreyEx’ );

Пример 02:

Чтобы разработать подзапрос для разных таблиц, попробуйте этот пример. У нас есть подзапрос, который извлекает имя учителя из таблицы student. Имя должно содержать букву «i» в любой позиции. Это означает, что все имена в столбце TeachName, содержащие «i» в своем значении, будут выбраны и возвращены в основной запрос. Основной запрос выберет все записи из таблицы ‘teacher’, где имя учителя находится в выходных данных, возвращаемых подзапросом. Поскольку подзапрос вернул 4 имени учителей, поэтому у нас будет запись всех этих имен, находящихся в таблице «teacher».

>> SELECT * FROM data.teacher WHERE TeachName IN ( SELECT TeachName FROM data.student WHERE TeachName LIKE ‘%i%’ );

Пример 03:

Рассмотрим две таблицы ниже, «порядок» и «порядок1».

>> SELECT * FROM data.order;
>> SELECT * FROM data.order1;

Давайте попробуем предложение ANY в этом примере, чтобы разработать подзапрос. Подзапрос выберет идентификатор из таблицы order1, где в столбце «Status» указано значение «Unpaid». «Id» может быть больше 1. Это означает, что в основной запрос будет возвращено более 1 значения для получения результатов «Unpaid» таблицы. В этом случае можно использовать любой идентификатор. Для этого запроса мы получили следующий результат.

>> SELECT Item, Sales, id FROM data.order WHERE id= ANY ( SELECT id FROM data.order1 WHERE Status= ’Unpaid’ );

Пример 04:

Предположим, у вас есть указанные ниже данные в таблице order1 перед применением любого запроса.

>> SELECT * FROM data.order1;

Давайте применим запрос внутри запроса, чтобы удалить некоторые записи из таблицы ‘order1’. Во-первых, подзапрос выберет значение «Status» из таблицы «order», где элементом является «Book». Подзапрос возвращает значение Paid. Теперь основной запрос удалит строки из таблицы «order1», в которой значение столбца «Status» равно «Paid».

>> DELETE FROM data.order1 WHERE Status= ( SELECT Status FROM data.order WHERE Item = ’Book’ );

После проверки у нас остались следующие записи в таблице order1 после выполнения запроса.

>> SELECT * FROM data.order1;

Вывод:

Во всех приведенных выше примерах вы эффективно работали с множеством подзапросов. Надеемся, теперь все ясно и чисто.

Читать  Как скопировать таблицу в MySQL

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Если статья понравилась, то поделитесь ей в социальных сетях:

Читайте также

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Рекомендуемое
Сжатие Brotli - это универсальный метод сжатия, широко поддерживаемый браузерами. Это…

Спасибо!

Теперь редакторы в курсе.