Шпоры по базам данных / Шпора по SQL 3
.docБлюдо (ном_бл, назв_бл, категория) – справочник блюд;
Продукт (ном_прод; назв_прод, калорийность) – справочник продуктов;
Рецепт (ном_бл, ном_пр, кол_прод_в_блюде) – сколько некоторого продукта в некотором блюде.
Извлечь все пары продуктов, имеющих одинаковую калорийность. Указать номера и названия продуктов, их калорийность (для продуктов, не имеющих пары, соответствующие значения – Null)
Select x.ном_прод, x.назв_прод, x.калорийность, y.ном_прод, y.назв_прод
From Продукт as x Left Join Продукт as y ON
(x.калорийность = y.калорийность
And x.ном_прод <> y.ном_прод)
Блюдо (ном_бл, назв_бл, категория) – справочник блюд;
Продукт (ном_прод; назв_прод, калорийность) – справочник продуктов;
Рецепт (ном_бл, ном_пр, кол_прод_в_блюде) – сколько некоторого продукта в некотором блюде.
Извлечь блюда, для которых заданы продукты, и продукты, используемые в блюдах. Результат должен содержать колонки: номер (блюда или продукта), название, тип ("блюдо" или "продукт" соответственно) и быть упорядоченным по названиям.
Select ном_прод As ном, назв_прод As назв, “Продукт” As категория
From Продукт
Where ном_прод In (Select ном_прод From Рецепт)
Union
Select ном_бл As ном, назв_бл As назв, “Блюдо” As категория
From Блюдо
Where ном_бл In (Select ном_бл From Рецепт)
Order by назв
Stud (no_st, fio, spec, kurs, no_gr) – справочник студентов;
Predm (no_pr, naim_pr, kol_chasov, kafedra, spec, kurs) – справочник предметов;
Uspev (no_st, no_pr, ocenka, data_sdachi) – сдача конкр. студентом конкр. предмета.
Сдача студентами предметов: фамилия студента, название предмета, полученная оценка (для студентов, не сдавших ни одного предмета, и предметов, не сданных ни одним студентом, – должны быть Null-значения).
select stud.fio, predm.naim_pr, uspev.ocenka
from (stud left join uspev on stud.no_st = uspev.no_st) left join predm on uspev.no_pr=predm.no_pr
UNION select stud.fio, predm.naim_pr, uspev.ocenka
from (stud right join uspev on stud.no_st = uspev.no_st) right join predm on uspev.no_pr=predm.no_pr;
Stud (no_st, fio, spec, kurs, no_gr) – справочник студентов;
Predm (no_pr, naim_pr, kol_chasov, kafedra, spec, kurs) – справочник предметов;
Uspev (no_st, no_pr, ocenka, data_sdachi) – сдача конкр. студентом конкр. предмета.
Извлечь номера и названия предметов, по которым получил отличную оценку хотя бы один студент первого курса специальности АСУ
Select distinct Predm.no_pr, Predm.naim_pr
From Stud, Predm, Uspev
Where Stud.no_st = Uspev.no_st
And Predm.no_pr = Uspev.no_pr
And Uspev.ocenka=5
And Stud.spec=”АСУ”
And Stud.kurs=1
Stud (no_st, fio, spec, kurs, no_gr) – справочник студентов;
Predm (no_pr, naim_pr, kol_chasov, kafedra, spec, kurs) – справочник предметов;
Uspev (no_st, no_pr, ocenka, data_sdachi) – сдача конкр. студентом конкр. предмета.
Извлечь номера и названия предметов, сданных на "хорошо" и "отлично" всеми студентами первого курса специальности АСУ
SELECT [predm].[no_pr], [predm].[naim_pr]
FROM (uspev INNER JOIN predm ON [uspev].[no_pr]=[predm].[no_pr]) INNER JOIN stud ON [uspev].[no_st]=[stud].[no_st]
WHERE ([uspev].[ocenka]=4 Or [uspev].[ocenka]=5) And [stud].[kurs]=1 And [stud].[spec]="asu";
Stud (no_st, fio, spec, kurs, no_gr) – справочник студентов;
Predm (no_pr, naim_pr, kol_chasov, kafedra, spec, kurs) – справочник предметов;
Uspev (no_st, no_pr, ocenka, data_sdachi) – сдача конкр. студентом конкр. предмета.
Извлечь номера и фио студентов, сдавших на "отлично" в точности все те предметы, которые сдал на "отлично" студент Иванов П.С.
SELECT DISTINCT [Stud].[no_st], [Stud].[fio]
FROM Uspev, Stud
WHERE Uspev.no_pr In( Select no_pr From Uspev, Stud Where Uspev.no_st = Stud.no_st And Stud.fio ="иванов п.с." And Uspev.ocenka = 5) And Uspev.no_st = Stud.no_st And Uspev.ocenka = 5 And Stud.fio <> "иванов п.с.";
Блюдо (ном_бл, назв_бл, категория) – справочник блюд;
Продукт (ном_прод; назв_прод, калорийность) – справочник продуктов;
Рецепт (ном_бл, ном_пр, кол_прод_в_блюде) – сколько некоторого продукта в некотором блюде.
Извлечь номера и названия всех блюд с указанием названия каждого используемого продукта и его количества (для блюд, для которых не указано ни одного продукта, соответствующие значения – Null).
Select Рецепт_Блюдо.ном_бл, Рецепт_Блюдо.назв_бл, Продукт.назв_прод, Рецепт_Блюдо.кол_прод_в_блюде
From (
Select Блюдо.ном_бл As ном_бл,
Блюдо.назв_бл As назв_бл,
Рецепт.кол_прод_в_блюде As кол_прод_в_блюде,
Рецепт.ном_прод As ном_прод
From Блюдо Left Join Рецепт On
Рецепт.ном_бл = Блюдо.ном_бл
) As Рецепт_Блюдо Left Join Продукт On
Продукт.ном_прод = Рецепт_Блюдо.ном_прод
Блюдо (ном_бл, назв_бл, категория) – справочник блюд;
Продукт (ном_прод; назв_прод, калорийность) – справочник продуктов;
Рецепт (ном_бл, ном_пр, кол_прод_в_блюде) – сколько некоторого продукта в некотором блюде.
Извлечь номера и названия всех блюд, для которых не указаны входящие в него продукты, либо указан всего один продукт
Select Блюдо.ном_бл
From Блюдо
Where Блюдо.ном_бл Not In (
Select Блюдо.ном_бл
From Блюдо
Where ( Select Count(*) As прод_count
From Рецепт
Where Рецепт.ном_бл = Блюдо.ном_бл)>1)
Блюдо (ном_бл, назв_бл, категория) – справочник блюд;
Продукт (ном_прод; назв_прод, калорийность) – справочник продуктов;
Рецепт (ном_бл, ном_пр, кол_прод_в_блюде) – сколько некоторого продукта в некотором блюде.
Извлечь сведения о блюдах с калорийностью ниже 500: номер, название, количество продуктов, входящих в блюдо (калорийность блюда рассчитывать как произведение калорийности продукта на количество продукта в блюде, просуммированное по всем продуктам, входящим в блюдо)
Select Рецепт_нов.ном_бл, Блюдо.назв_бл, сум_кол_прод_в_блюде, сум_калорийность
From (
Select Рецепт.ном_бл As ном_бл, sum (Рецепт.кол_прод_в_блюде * Продукт.калорийность) As Сум_калорийность,
Count{sum} (Рецепт.кол_прод_в_блюде) As сум_кол_прод_в_блюде
From Рецепт, Продукт
Where Продукт.ном_прод = Рецепт.ном_прод
Group By Рецепт.ном_бл) As Рецепт_нов,
Блюдо
Where Рецепт_нов.сум_калорийность <500
And Блюдо.ном_бл = Рецепт_нов.ном_бл
{sum, если считать поле кол_прод_в_блюде;
count, если считать поле ном_пр, т.е. сколько разных продуктов в блюде}
Блюдо (ном_бл, назв_бл, категория) – справочник блюд;
Продукт (ном_прод; назв_прод, калорийность) – справочник продуктов;
Рецепт (ном_бл, ном_пр, кол_прод_в_блюде) – сколько некоторого продукта в некотором блюде.
Извлечь номера и названия блюд, содержащих в количестве более 100 ед. хотя бы один продукт из тех, которые содержит блюдо "Жюльен с грибами а ля рюс"
SELECT ном_бл, назв_бл
FROM блюдо xb
WHERE ном_бл IN (
SELECT ном_бл
FROM рецепт XР
WHERE кол_прод_в_блюде > 100
AND ном_пр IN (
SELECT ном_пр
FROM рецепт YР
WHERE ном_бл IN (
SELECT ном_бл
FROM блюдо Yb
WHERE назв_бл= "жюльен")))
Блюдо (ном_бл, назв_бл, категория) – справочник блюд;
Продукт (ном_прод; назв_прод, калорийность) – справочник продуктов;
Рецепт (ном_бл, ном_пр, кол_прод_в_блюде) – сколько некоторого продукта в некотором блюде.
Извлечь номера и названия блюд, содержащих в количестве более 100 ед., по крайней мере, все те продукты, которые содержит блюдо "Солянка балтийская"
SELECT ном_бл, назв_бл
FROM Блюдо
WHERE ном_бл IN (
SELECT ном_бл
FROM Рецепт
WHERE кол_прод_в_блюде > 100 AND
NOT EXISTS (
SELECT *
FROM Рецепт
WHERE ном_бл IN (
SELECT ном_бл
FROM Блюдо
WHERE назв_бл = 'Солянка') AND
ном_пр NOT IN (
SELECT ном_пр
FROM Рецепт
WHERE Блюдо.ном_бл = Рецепт.ном_бл)))
Блюдо (ном_бл, назв_бл, категория) – справочник блюд;
Продукт (ном_прод; назв_прод, калорийность) – справочник продуктов;
Рецепт (ном_бл, ном_пр, кол_прод_в_блюде) – сколько некоторого продукта в некотором блюде.
Извлечь статистику уровней калорийности продуктов: калорийность, количество продуктов, имеющих эту калорийность, количество блюд, содержащих продукты этой калорийности
SELECT Kal.калорийность, Pr.kol_pr, Bl.kol_bl
FROM [Select distinct П_2.калорийность
from Продукт П_2]. AS Kal,
[SELECT DISTINCT К.калорийность,
count(t.ном_прод) as kol_pr
FROM [Select distinct П_2.калорийность
from Продукт П_2 ]. AS К,
(SELECT Distinct П_4.калорийность, П_4.ном_прод
from Продукт П_4, (Select distinct П_5.калорийность
from Продукт П_5 ) П_6
where П_4.калорийность=П_6.калорийность)
AS t
WHERE К.калорийность=t.калорийность
GROUP BY К.калорийность]. AS Pr,
[SELECT Distinct П_3.калорийность, count(Р_3.ном_бл) as kol_bl
from Продукт П_3, Рецепт Р_3
where П_3.ном_прод=Р_3.ном_пр
group by П_3.калорийность]. AS Bl
WHERE Kal.калорийность=Pr.калорийность
and Kal.калорийность=Bl.калорийность;
Блюдо (ном_бл, назв_бл, категория) – справочник блюд;
Продукт (ном_прод; назв_прод, калорийность) – справочник продуктов;
Рецепт (ном_бл, ном_пр, кол_прод_в_блюде) – сколько некоторого продукта в некотором блюде.
Использование блюд и продуктов: название блюда, название продукта, необходимое количество (для блюд с отсутствующими сведениями о продуктах, и продуктов с отсутствующими сведениями об их использовании в блюдах, – соответствующие значения должны быть Null)
SELECT distinct Блюдо.назв_бл as nm_bl,
Продукт.назв_прод as nm_pr,Рецепт.Кол_прод_в_блюде as kol
from Блюдо,Продукт,Рецепт
Where Блюдо.ном_бл=Рецепт.ном_бл
and Продукт.ном_прод=Рецепт.ном_пр
union
SELECT distinct Блюдо.назв_бл as nm_bl,' ' as nm_pr,' ' as kol
from Блюдо, Рецепт
Where ( Блюдо.ном_бл not in (Select Рецепт.ном_бл
From Рецепт))
UNION
SELECT distinct ' ' as nm_bl,Продукт.назв_прод as nm_pr,' ' as kol
from Продукт, Рецепт
Where ( Продукт.ном_прод not in (Select Рецепт.ном_пр
From Рецепт));
Блюдо (ном_бл, назв_бл, категория) – справочник блюд;
Продукт (ном_прод; назв_прод, калорийность) – справочник продуктов;
Рецепт (ном_бл, ном_пр, кол_прод_в_блюде) – сколько некоторого продукта в некотором блюде.
Извлечь номера и названия блюд, не содержащих в количестве более 100 ед. ни одного продукта, кроме тех, которые содержит блюдо "Солянка донская"
SELECT блюдо.ном_бл, [назв_бл]
FROM Блюдо
WHERE NOT EXISTS (
SELECT ном_пр
FROM Рецепт1
WHERE кол_прод_в_блюде > 100 AND
рецепт1.ном_бл = блюдо.ном_бл AND
ном_пр NOT IN (
SELECT ном_пр
FROM Рецепт1, блюдо
WHERE рецепт1.ном_бл = блюдо.ном_бл AND
назв_бл = 'Солянка'));
Stud (no_st, fio, spec, kurs, no_gr) – справочник студентов;
Predm (no_pr, naim_pr, kol_chasov, kafedra, spec, kurs) – справочник предметов;
Uspev (no_st, no_pr, ocenka, data_sdachi) – сдача конкр. студентом конкр. предмета.
Извлечь сведения о студентах со средним баллом выше 4,7: номер, ф.и.о., значения минимального, максимального и среднего баллов (не учитывать "хвосты")
SELECT [stud].[no_st], [stud].[fio], MIN([uspev].[ocenka]) AS minoc, MAX([uspev].[ocenka]) AS maxoc, AVG([uspev].[ocenka]) AS Sredn
FROM stud, uspev
WHERE stud.no_st = uspev.no_st AND stud.no_st IN ( SELECT uspev.no_st FROM uspev GROUP BY uspev.no_st HAVING AVG(uspev.ocenka) >"4.7")
GROUP BY [stud].[no_st], [stud].[fio]
Блюдо (ном_бл, назв_бл, категория) – справочник блюд;
Продукт (ном_прод; назв_прод, калорийность) – справочник продуктов;
Рецепт (ном_бл, ном_пр, кол_прод_в_блюде) – сколько некоторого продукта в некотором блюде.
Извлечь сведения о блюдах с калорийностью выше калорийности блюда номер 123: номер, название, калорийность (калорийность блюда рассчитывать как произведение калорийности продукта на количество продукта в блюде, просуммированное по всем продуктам, входящим в блюдо)
select блюдо.назв_бл, sum(продукт.калорийность*рецепт.кол_прод_в_блюде) as Калорийность
from (блюдо inner join рецепт on блюдо.ном_бл=рецепт.ном_бл) inner join продукт on рецепт.ном_прод=продукт.ном_прод
group by блюдо.ном_бл, блюдо.назв_бл
having sum(продукт.калорийность*рецепт.кол_прод_в_блюде)>
any (select sum(продукт.калорийность*рецепт.кол_прод_в_блюде)
from рецепт inner join продукт on рецепт.ном_прод=продукт.ном_прод
where рецепт.ном_бл=123
group by ном_бл)
Stud (no_st, fio, spec, kurs, no_gr) – справочник студентов;
Predm (no_pr, naim_pr, kol_chasov, kafedra, spec, kurs) – справочник предметов;
Uspev (no_st, no_pr, ocenka, data_sdachi) – сдача конкр. студентом конкр. предмета.
Извлечь статистику успеваемости по специальностям и курсам: специальность, курс, минимальный, максимальный, средний баллы (не учитывать "хвосты")
SELECT [spec], [kurs], MIN([uspev].[ocenka]) AS minocen, MAX([uspev].[ocenka]) AS maxocen, AVG([uspev].[ocenka]) AS Sredn
FROM stud, uspev
WHERE [stud].[no_st]=[uspev].[no_st]
GROUP BY [spec], [kurs];
Блюдо (ном_бл, назв_бл, категория) – справочник блюд;
Продукт (ном_прод; назв_прод, калорийность) – справочник продуктов;
Рецепт (ном_бл, ном_пр, кол_прод_в_блюде) – сколько некоторого продукта в некотором блюде.
Извлечь номера и названия продуктов, с указанием номеров и названий блюд, в которые эти продукты не входят
SELECT продукт.ном_пр, [назв_пр], Блюдо.ном_бл, [назв_бл]
FROM продукт, блюдо
WHERE ном_пр NOT IN ( SELECT ном_пр FROM рецепт1 WHERE рецепт1.ном_бл = блюдо.ном_бл)
Блюдо (ном_бл, назв_бл, категория) – справочник блюд;
Продукт (ном_прод; назв_прод, калорийность) – справочник продуктов;
Рецепт (ном_бл, ном_пр, кол_прод_в_блюде) – сколько некоторого продукта в некотором блюде.
Извлечь все блюда категории "диетические" и продукты с калорийностью меньше 500. Результат должен содержать колонки: номер (блюда или продукта), название, тип ("блюдо" или "продукт" соответственно) и быть упорядоченным по названиям.
SELECT Блюдо.ном_бл as nom, Блюдо.назв_бл as name,'блюдо' as tip
from Блюдо
where Блюдо.категория='диетические'
UNION
SELECT Продукт.ном_прод as nom,
Продукт.назв_прод as name,'продукт' as tip
from Продукт
where Продукт.калорийность<500
ORDER BY name;
Stud (no_st, fio, spec, kurs, no_gr) – справочник студентов;
Predm (no_pr, naim_pr, kol_chasov, kafedra, spec, kurs) – справочник предметов;
Uspev (no_st, no_pr, ocenka, data_sdachi) – сдача конкр. студентом конкр. предмета.
Извлечь номера и фио студентов, не сдавших на "отлично" ни одного предмета, которые не сдал на "отлично" студент Иванов П.С.
SELECT [no_st], [fio]
FROM stud
WHERE stud.no_st IN (SELECT no_st FROM uspev WHERE (no_pr IN (SELECT uspev.no_pr FROM uspev, stud WHERE uspev.ocenka<5 AND stud.fio="Иванов П.С." AND stud.no_st=uspev.no_st)) GROUP BY no_st HAVING max(ocenka)<5);
Блюдо (ном_бл, назв_бл, категория) – справочник блюд;
Продукт (ном_прод; назв_прод, калорийность) – справочник продуктов;
Рецепт (ном_бл, ном_пр, кол_прод_в_блюде) – сколько некоторого продукта в некотором блюде.
Извлечь статистику калорийности по категориям блюд: категория, минимальная, максимальная, средняя калорийность продуктов, входящих в блюда данной категории.
SELECT [блюдо].[категория], min(калорийность) AS мин, max(калорийность) AS макс, avg(калорийность) AS сред
FROM блюдо, (SELECT блюдо.ном_бл AS ном_бл, калорийность
FROM (блюдо inner join рецепт on [блюдо].[ном_бл]=[рецепт].[ном_бл]) inner join продукт on [продукт].[ном_прод]=[рецепт].[ном_прод]
GROUP BY блюдо.ном_бл,калорийность)
WHERE [блюдо].[ном_бл]=ном_бл
GROUP BY [блюдо].[категория];
Stud (no_st, fio, spec, kurs, no_gr) – справочник студентов;
Predm (no_pr, naim_pr, kol_chasov, kafedra, spec, kurs) – справочник предметов;
Uspev (no_st, no_pr, ocenka, data_sdachi) – сдача конкр. студентом конкр. предмета.
Извлечь сведения о студентах со средним баллом выше среднего балла студента номер 992027: номер, ф.и.о., значения минимального, максимального и среднего баллов (не учитывать "хвосты").
SELECT stud.no_st, stud.fio, minimum, maximum, average
FROM stud, [SELECT stud.no_st AS no_st, min(uspev.ocenka) AS minimum, max(uspev.ocenka) AS maximum, avg(uspev.ocenka) AS average
FROM stud, uspev
WHERE stud.no_st=uspev.no_st
GROUP BY stud.no_st]. AS [%$##@_Alias]
WHERE average>
(SELECT avg([ocenka])
FROM uspev
WHERE no_st=992027
GROUP BY [no_st];)
AND stud.no_st=no_st;
Stud (no_st, fio, spec, kurs, no_gr) – справочник студентов;
Predm (no_pr, naim_pr, kol_chasov, kafedra, spec, kurs) – справочник предметов;
Uspev (no_st, no_pr, ocenka, data_sdachi) – сдача конкр. студентом конкр. предмета.
Извлечь статистику уровней успеваемости по специальностям: специальность, оценка, количество студентов, получивших эту оценку, количество предметов, по которым получена эта оценка (не учитывать "хвосты").
SELECT [stud].[spec], [uspev].[ocenka], count([uspev].[no_st]) AS kolvo_st, count([uspev].[no_pr]) AS kolvo_pr
FROM stud, uspev
WHERE [stud].[no_st]=[uspev].[no_st]
GROUP BY stud.spec, uspev.ocenka;
Stud (no_st, fio, spec, kurs, no_gr, data_rojd) – справочник студентов;
Prepod (no_pr, fio, kafedra, data_rojd) – справочник препреподавателей;
Rukov (no_st, no_pr, ocenka, data) – руководство конкр. студентом конкр. преподавателем.
Извлечь всех преподавателей, а также тех студентов, которые имеют руководителей. Результат должен содержать колонки: номер (преподавателя или студента), ф.и.о., категорию ("студент" или "преподаватель" соответственно) и быть упорядоченным по ф.и.о.
SELECT no_pr AS no, fio, "Преподаватель" AS kateg
FROM prepod
UNION SELECT no_st AS no, fio, "Студент" AS kateg
FROM stud
WHERE no_st IN(SELECT no_st FROM rukov)
ORDER BY fio;
Stud (no_st, fio, spec, kurs, no_gr) – справочник студентов;
Predm (no_pr, naim_pr, kol_chasov, kafedra, spec, kurs) – справочник предметов;
Uspev (no_st, no_pr, ocenka, data_sdachi) – сдача конкр. студентом конкр. предмета.
Извлечь номера и фамилии всех студентов с указанием названия каждого сданного предмета и полученной оценки (для студентов, не сдавших ни одного предмета, соответствующие значения – Null).
SELECT stud.no_st, stud.fio, predm.naim_pr AS naim_pr, uspev.ocenka AS ocenka
FROM stud, predm, uspev
WHERE stud.no_st=uspev.no_st
AND predm.no_pr=uspev.no_pr
UNION SELECT stud.no_st, stud.fio, " " AS naim_pr, " " AS ocenka
FROM stud
WHERE stud.no_st NOT IN (SELECT DISTINCT no_st FROM uspev);
Stud (no_st, fio, spec, kurs, no_gr) – справочник студентов;
Predm (no_pr, naim_pr, kol_chasov, kafedra, spec, kurs) – справочник предметов;
Uspev (no_st, no_pr, ocenka, data_sdachi) – сдача конкр. студентом конкр. предмета.
Извлечь номера и фамилии всех студентов с указанием номера и названия каждого несданного предмета из числа положенных для данного курса данной специальности (для студентов, сдавших все положенные предметы, соответствующие значения должны быть Null).
SELECT stud.no_st, stud.fio, predm.no_pr AS nop, predm.naim_pr AS name
FROM stud, predm
WHERE
predm.kurs=stud.kurs
AND NOT EXISTS(
SELECT no_st, no_pr
FROM uspev
WHERE uspev.no_pr=predm.no_pr
AND uspev.no_st=stud.no_st)
UNION SELECT stud.no_st, stud.fio, NULL AS nop, NULL AS name
FROM stud, predm
WHERE stud.no_st NOT IN(
SELECT stud.no_st
FROM stud, predm
WHERE predm.kurs=stud.kurs
AND NOT EXISTS(
SELECT no_st, no_pr
FROM uspev
WHERE uspev.no_pr=predm.no_pr
AND uspev.no_st=stud.no_st));
Stud (no_st, fio, spec, kurs, no_gr) – справочник студентов;
Predm (no_pr, naim_pr, kol_chasov, kafedra, spec, kurs) – справочник предметов;
Uspev (no_st, no_pr, ocenka, data_sdachi) – сдача конкр. студентом конкр. предмета.
Извлечь номера и фио студентов, сдавших на "отлично" по крайней мере все те предметы, которые сдал на "отлично" студент Иванов П.С.
SELECT [stud].[no_st], [stud].[fio]
FROM stud, uspev
WHERE stud.no_st=uspev.no_st AND uspev.no_pr IN (SELECT DISTINCT [uspev].[no_pr] AS no_pr FROM uspev, stud WHERE [stud].[fio]="AAA" And [stud].[no_st]=[uspev].[no_st] And [uspev].[ocenka]=5)
GROUP BY [stud].[no_st], [stud].[fio]
HAVING min(uspev.ocenka)=5 AND max(uspev.ocenka)=5;
Блюдо (ном_бл, назв_бл, категория) – справочник блюд;
Продукт (ном_прод; назв_прод, калорийность) – справочник продуктов;
Рецепт (ном_бл, ном_пр, кол_прод_в_блюде) – сколько некоторого продукта в некотором блюде.
Извлечь номера и названия продуктов, которые используются в количестве больше 100 ед. хотя бы в одном блюде категории "малокалорийные".
SELECT Продукт.ном_прод, Продукт.назв_прод
FROM Продукт INNER JOIN (Блюдо INNER JOIN Рецепт ON Блюдо.ном_бл = Рецепт.ном_бл) ON Продукт.ном_прод = Рецепт.ном_пр
WHERE ((([Рецепт]![кол_прод_в_блюде])>100) AND (([Блюдо]![категория])="малокалорийные"));
II Вариант (лучше)-димин
SELECT [продукт].[ном_пр], [назв_пр]
FROM продукт
WHERE ном_пр IN ( SELECT ном_пр FROM рецепт,блюдо WHERE кол_прод_в_блюде > 100 AND рецепт.ном_бл = блюдо.ном_бл AND категория = “малокалорийные”);
Stud (no_st, fio, spec, kurs, no_gr) – справочник студентов;
Predm (no_pr, naim_pr, kol_chasov, kafedra, spec, kurs) – справочник предметов;
Uspev (no_st, no_pr, ocenka, data_sdachi) – сдача конкр. студентом конкр. предмета.
Извлечь номера и фио студентов, сдавших на "отлично" хотя бы один предмет из тех, которые сдал на "отлично" студент Иванов П.С.
SELECT DISTINCT [stud].[no_st], [stud].[fio]
FROM stud, uspev
WHERE stud.no_st = uspev.no_st AND uspev.ocenka = 5 AND uspev.no_pr IN ( SELECT uspev.no_pr FROM stud, uspev WHERE uspev.no_st = stud.no_st AND stud.fio = 'Иванов' AND uspev.ocenka =5);
II Вариант
SELECT Stud.no_st, Stud.fio
FROM Иванов INNER JOIN (Stud INNER JOIN (Predm INNER JOIN Uspev ON Predm.no_pr = Uspev.no_pr) ON Stud.no_st = Uspev.no_st) ON Иванов.no_pr = Uspev.no_pr
WHERE (((Stud.fio)<>("Иванов П.С.")) AND (([Uspev]![ocenka])="отлично"));
Запрос Иванов
SELECT Uspev.no_st, Uspev.ocenka, Uspev.no_pr
FROM Stud INNER JOIN (Predm INNER JOIN Uspev ON Predm.no_pr = Uspev.no_pr) ON Stud.no_st = Uspev.no_st
WHERE ((([Stud]![fio])="Иванов П.С.") AND (([Uspev]![ocenka])="Отлично"));
Stud (no_st, fio, spec, kurs, no_gr, data_rojd) – справочник студентов;
Prepod (no_pr, fio, kafedra, data_rojd) – справочник препреподавателей;
Rukov (no_st, no_pr, ocenka, data) – руководство конкр. студентом конкр. преподавателем.
Извлечь студентов, реководимых преподавателями, и преподавателей, руководящих студентами. Результат должен содержать колонки: номер (преподавателя или студента), ф.и.о., категорию ("студент" или "преподаватель" соответственно) и быть упорядоченным по ф.и.о.
SELECT no_pr as no, fio, "Преподаватель" as kateg
From prepod
WHERE no_pr IN (SELECT no_pr FROM rukov)
UNION SELECT no_st as no, fio, "Студент" as kateg
FROM stud
WHERE no_st IN ( SELECT no_st FROM rukov)
ORDER BY fio;
Stud (no_st, fio, spec, kurs, no_gr, data_rojd) – справочник студентов;
Prepod (no_pr, fio, kafedra, data_rojd) – справочник препреподавателей;
Rukov (no_st, no_pr, ocenka, data) – руководство конкр. студентом конкр. преподавателем.
Извлечь всех преподавателей и студентов, родившихся в январе месяце. Результат должен содержать колонки: номер (преподавателя или студента), ф.и.о., категорию ("студент" или "преподаватель" соответственно), дату рождения и быть упорядоченным по ф.и.о. Использовать функцию Month(дата) для извлечения номера месяца из даты.
SELECT no_pr AS no, fio, "Teacher" AS Kateg
FROM Prepod
WHERE Month ([Prepod]![data_rojd])=1
UNION
SELECT no_st AS no, fio, "Student" AS Kateg
FROM Stud
WHERE Month ([Stud]![data_rojd])=1
ORDER BY fio;
Stud (no_st, fio, spec, kurs, no_gr) – справочник студентов;
Predm (no_pr, naim_pr, kol_chasov, kafedra, spec, kurs) – справочник предметов;
Uspev (no_st, no_pr, ocenka, data_sdachi) – сдача конкр. студентом конкр. предмета.
Извлечь все пары предметов, имеющих одинаковое количество часов и ведущихся одной и той же кафедрой. Указать номера и названия предметов, количество часов, кафедру (для предметов, не имеющих пары, соответствующие значения – Null).
SELECT predm.no_pr, predm.naim_pr, predm.kol_chasov, predm.kafedra, predm_1.no_pr, predm_1.naim_pr
FROM predm
LEFT JOIN predm AS predm_1 ON (predm_1.kafedra=predm.kafedra) AND (predm_1.kol_chasov=predm.kol_chasov) AND (predm_1.no_pr<>predm.no_pr);
Stud (no_st, fio, spec, kurs, no_gr) – справочник студентов;
Predm (no_pr, naim_pr, kol_chasov, kafedra, spec, kurs) – справочник предметов;
Uspev (no_st, no_pr, ocenka, data_sdachi) – сдача конкр. студентом конкр. предмета.
Извлечь номера и фамилии студентов с указанием номеров и названий всех предметов, которые он должен сдать к текущему курсу.
SELECT [stud].[no_st], [stud].[fio], [predm].[no_pr], [predm].[naim_pr]
FROM stud, predm
WHERE [stud].[kurs]=[predm].[kurs];
Блюдо (ном_бл, назв_бл, категория) – справочник блюд;
Продукт (ном_прод; назв_прод, калорийность) – справочник продуктов;
Рецепт (ном_бл, ном_пр, кол_прод_в_блюде) – сколько некоторого продукта в некотором блюде.
Извлечь все блюда, а также те продукты, для которых указаны блюда. Результат должен содержать колонки: номер (блюда или продукта), название, тип ("блюдо" или "продукт" соответственно) и быть упорядоченным по названиям.
SELECT ном_бл AS no, назв_бл AS nazv, "Bludo" AS Kateg
FROM Блюдо
UNION
SELECT ном_прод AS no, назв_прод AS nazv, "Product" AS Kateg
FROM Продукт
WHERE ном_прод IN (SELECT ном_пр FROM Рецепт)
ORDER BY nazv;
или
SELECT ном_бл,назв_бл AS название, "блюдо" AS тип
FROM блюдо
UNION SELECT продукт.ном_пр, назв_пр AS название, "продукт" AS тип
FROM продукт, рецепт
WHERE продукт.ном_пр = рецепт.ном_пр
ORDER BY название;
Блюдо (ном_бл, назв_бл, категория) – справочник блюд;
Продукт (ном_прод; назв_прод, калорийность) – справочник продуктов;
Рецепт (ном_бл, ном_пр, кол_прод_в_блюде) – сколько некоторого продукта в некотором блюде.
Извлечь номера и названия продуктов, содержащихся в количестве от 100 до 200 ед. во всех блюдах категории "диетическое".
SELECT Продукт.ном_прод, Продукт.назв_прод
FROM Продукт INNER JOIN (Блюдо INNER JOIN Рецепт ON Блюдо.ном_бл = Рецепт.ном_бл) ON Продукт.ном_прод = Рецепт.ном_пр
WHERE ((([Рецепт]![кол_прод_в_блюде]) Between 100 And 200) AND (([Блюдо]![категория])="диетическое"));
Вместо ! “.”
Блюдо (ном_бл, назв_бл, категория) – справочник блюд;
Продукт (ном_прод; назв_прод, калорийность) – справочник продуктов;
Рецепт (ном_бл, ном_пр, кол_прод_в_блюде) – сколько некоторого продукта в некотором блюде.
Извлечь номера и названия блюд, содержащих в количестве более 100 ед. в точности все те продукты, которые содержит блюдо "Солянка московская".
SELECT [ном_бл], [назв_бл]
FROM блюдо
WHERE (select count(рецепт.ном_пр) from рецепт where рецепт.ном_бл=блюдо.ном_бл) = (select count(рецепт.ном_пр) from блюдо, рецепт where рецепт.ном_бл=блюдо.ном_бл and назв_бл="солянка") and (select count(р.ном_пр) from рецепт р where р.ном_бл=блюдо.ном_бл and (р.кол_прод_в_блюде <=100 or not exists ( select ном_пр from блюдо, рецепт where рецепт.ном_бл=блюдо.ном_бл and назв_бл="солянка" and рецепт.ном_пр=р.ном_пр)))=0;
Поставщик (КодПост, НазвПост, Статус, Город) – справочник поставщиков;
Товар (КодТовара, НазвТовара, Вес, Цвет, Город) – справочник товаров;
Поставка (КодПост, КодТовара, Количество) – поставка данным поставщикам данного товара.
Извлечь все пары поставщиков из одного города, такие, что статус второго поставщика не меньше статуса первого. Для каждого напарника указать код, название, статус. Для поставщиков, не имеющих пары, значения напарника - NULL. Результат упорядочить по названиям поставщиков.