Лабораторная работа
MySql вложенные запросы
Категория: | Лабораторная работа |
Дисциплина: | Системы управления базами данных |
Город: | Беларусь, Минск |
Учебное заведение: | БНТУ, ФИТР |
Стоимость работы: | 2 руб. |
Оценка: | 10 |
Объем страниц: | 5 |
Год сдачи: | 2020 |
Дата публикации: | 22.10.2020 |
Фрагменты для ознакомления
Отчёт
По лабораторной работе
Вложенные запросы в MySql
Вложенный запрос — это подзапрос, заключенный в круглые скобки и вложенный в WHERE (HAVING) фразу предложения SELECT или других предложений, использующих WHERE фразу.
Нетрудно догадаться, что вложенный подзапрос создан для того, чтобы при отборе строк таблицы, сформированной основным запросом, можно было использовать данные из других таблиц.
Существуют простые и коррелированные вложенные подзапросы. Они включаются в WHERE (HAVING) фразу с помощью условий IN, EXISTS или одного из условий сравнения (= | <> | < | <= | > | >=).
Ссылка со вложенными запросами показана на рисунке 3.1:

Рисунок 3.1 – Вложенные запросы
3.1 Простой вложенный запрос
Простые вложенные запросы используются для представления множества значений, исследование которых должно осуществляться в каком-либо предикате IN, что иллюстрируется в следующем примере (рисунок 3.1.1).

Рисунок 3.1.1 – Некоррелированный (простой вложенный) запрос
create table `fakultety` (
id int unsigned not null auto_increment,
`nazvanie` varchar(4) default null,
`kolichestvo_mest` tinyint(4) default null,
primary key (id)
);
create table `kafedry` (
id int unsigned not null auto_increment,
`nazvanie` varchar(46) default null,
`fakultety_id` int unsigned default null,
primary key (id),
foreign key (fakultety_id) references fakultety(id)
on update cascade
on delete cascade
);
create table `gruppy` (
id int unsigned not null auto_increment,
`nomer` int(11) default null,
`kafedry_id` int unsigned default null,
primary key (id),
foreign key (kafedry_id) references kafedry(id)
on update cascade
on delete cascade
);
SELECT f.name AS fakultetyName, f.kolichestvo_mest
FROM fakultety f
WHERE f.id
IN (SELECT DISTINCT fakultety_id
FROM kafedry
INNER JOIN gruppy ON kafedry.id = gruppy.kafedry_id
GROUP BY gruppy.kafedry_id HAVING COUNT(gruppy.kafedry_id) >= 2)
ORDER BY f.name asc;
В данном случае запрос был нацелен на получение количества мест на том факультете, где есть кафедры, в которых 2 и больше групп. Данный запрос не является коррелированным так как во вложенном запросе нет ссылки или условия на столбец со внешнего запроса.