Главная / Базы данных /
Основы SQL / Тест 7
Основы SQL - тест 7
Упражнение 1:
Номер 1
Даны таблицы
CREATE TABLE Автор
(Код_Автора INT ,
Фамилия VARCHAR(50) NULL,
Имя VARCHAR(50) NULL,
Отчество VARCHAR(50) NULL,
Пол VARCHAR(50) NOT NULL ,
Дата_рождения DATETIME ,
Телефон CHAR(9)) |
CREATE TABLE Книга
( Код_Книги INT,
Название VARCHAR(50) NOT NULL,
Цена MONEY,
Тематика VARCHAR(50) NOT NULL,
Издательство VARCHAR(50) NOT NULL,
Код_Автора INT NOT NULL,
Количество INT) |
Определить автора самой дорогой книги.
Ответ:
 (1)
SELECT Автор.Фамилия, Книга.Цена
FROM Книга INNER JOIN Автор ON
Книга.Код_Автора = Автор.Код_Автора
WHERE Книга.Цена=(SELECT Max(Книга.Цена)
FROM Книга) 
 (2)
SELECT Автор.Фамилия, Книга.Цена
FROM Книга INNER JOIN Автор ON
Книга.Код_Автора = Автор.Код_Автора
WHERE Книга.Цена>=ALL(SELECT Книга.Цена
FROM Книга) 
 (3)
SELECT Автор.Фамилия, Книга.Цена
FROM Книга INNER JOIN Автор ON
Книга.Код_Автора = Автор.Код_Автора
WHERE Книга.Цена= Max(Книга.Цена) 
 (4)
SELECT Автор.Фамилия, Книга.Цена
FROM Книга INNER JOIN Автор ON
Книга.Код_Автора = Автор.Код_Автора
WHERE Книга.Цена=MAX(SELECT Книга.Цена
FROM Книга) 
Номер 2
Даны таблицы
CREATE TABLE Рейс
(Номер_рейса INT,
Конечный_пункт VARCHAR(30),
Дата_вылета DATETIME,
Продолжительность_маршрута INT,
Число_билетов INT,
Стоимость MONEY) |
CREATE TABLE БИЛЕТ
(Номер_места CHAR(3),
Номер_рейса INT,
Дата_продажи DATETIME,
Стоимость MONEY,
Фамилия_пассажира VARCHAR(20)) |
Определить список пассажиров, покупающих билеты на самые дальние рейсы.
Ответ:
 (1)
SELECT Билет.Фамилия_пассажира,
Рейс.Продолжительность_маршрута
FROM Рейс INNER JOIN Билет ON
Рейс.Номер_рейса = Билет.Номер_рейса
WHERE Рейс.Продолжительность_маршрута=
(SELECT Max(Рейс.Продолжительность_маршрута)
FROM Рейс) 
 (2)
SELECT Билет.Фамилия_пассажира,
Рейс.Продолжительность_маршрута
FROM Рейс INNER JOIN Билет ON
Рейс.Номер_рейса = Билет.Номер_рейса
WHERE Рейс.Продолжительность_маршрута=
MAX(Рейс.Продолжительность_маршрута) 
 (3)
SELECT Билет.Фамилия_пассажира,
Рейс.Продолжительность_маршрута
FROM Рейс INNER JOIN Билет ON
Рейс.Номер_рейса = Билет.Номер_рейса
WHERE Рейс.Продолжительность_маршрута=
MAX(SELECT Рейс.Продолжительность_маршрута
FROM Рейс) 
 (4)
SELECT Билет.Фамилия_пассажира,
Рейс.Продолжительность_маршрута
FROM Рейс INNER JOIN Билет ON
Рейс.Номер_рейса = Билет.Номер_рейса
WHERE Рейс.Продолжительность_маршрута>=
ALL(SELECT Рейс.Продолжительность_маршрута
FROM Рейс) 
Номер 3
Даны таблицы
CREATE TABLE Блюдо
(Название_блюда VARCHAR(20) NOT NULL,
Время_приготовления INT NOT NULL,
Общая_калорийность INT NOT NULL,
Номер_рецепта INT,
Повар VARCHAR(20),
Стоимость MONEY ) |
CREATE TABLE Компонент
(Название_компонента VARCHAR(20),
Калорийность INT NOT NULL,
Вес FLOAT,
Белки INT,
Блюдо VARCHAR(20),
Углеводы INT,
Стоимость MONEY NOT NULL) |
Определить блюдо, которое можно приготовить быстрее всех остальных блюд.
Ответ:
 (1)
SELECT Блюдо.Название_блюда,
Блюдо.Время_приготовления
FROM Блюдо
WHERE Блюдо.Время_приготовления=
(SELECT Min(Блюдо.Время_приготовления)
FROM Блюдо) 
 (2)
SELECT Блюдо.Название_блюда,
Блюдо.Время_приготовления
FROM Блюдо
WHERE Блюдо.Время_приготовления<=
ALL(SELECT Блюдо.Время_приготовления
FROM Блюдо) 
 (3)
SELECT Блюдо.Название_блюда,
Блюдо.Время_приготовления
FROM Блюдо
WHERE Блюдо.Время_приготовления=
Min(Блюдо.Время_приготовления) 
 (4)
SELECT Блюдо.Название_блюда,
Блюдо.Время_приготовления
FROM Блюдо
WHERE Блюдо.Время_приготовления=
Min (SELECT Блюдо.Время_приготовления)
FROM Блюдо) 
Номер 4
Даны таблицы
CREATE TABLE Город
( Код_Города INT ,
Название VARCHAR(20) NOT NULL,
Тариф MONEY,
Регион VARCHAR(20)) |
CREATE TABLE Разговор
(Код_Разговора INT,
Код_Города INT NOT NULL,
Фамилия IVARCHAR(20),
Дата DATETIME NOT NULL,
Продолжительность INT NOT NULL) |
Вывести список городов, телефонные тарифы которых выше среднего.
Ответ:
 (1)
SELECT Город.Название
FROM Город
WHERE Город.Тариф>(SELECT Avg(Город.Тариф)
FROM Город) 
 (2)
SELECT Город.Название
FROM Город
WHERE Город.Тариф>(Avg(Город.Тариф)) 
 (3)
SELECT Город.Название
FROM Город
WHERE Город.Тариф>SOME(SELECT Avg(Город.Тариф)
FROM Город) 
 (4)
SELECT Город.Название
FROM Город
WHERE Город.Тариф> Avg (SELECT Город.Тариф
FROM Город) 
Упражнение 2:
Номер 1
Даны таблицы
CREATE TABLE Автор
(Код_Автора INT ,
Фамилия VARCHAR(50) NULL,
Имя VARCHAR(50) NULL,
Отчество VARCHAR(50) NULL,
Пол VARCHAR(50) NOT NULL ,
Дата_рождения DATETIME ,
Телефон CHAR(9)) |
CREATE TABLE Книга
( Код_Книги INT,
Название VARCHAR(50) NOT NULL,
Цена MONEY,
Тематика VARCHAR(50) NOT NULL,
Издательство VARCHAR(50) NOT NULL,
Код_Автора INT NOT NULL,
Количество INT) |
Определить авторов, не печатающих свои книги в издательстве «АСТ».
Ответ:
 (1)
SELECT Автор.Фамилия, Автор.Код_Автора
FROM Автор
WHERE Автор.Код_Автора NOT IN
(SELECT Книга.Код_Автора
FROM Книга
WHERE Книга.Издательство='АСТ') 
 (2)
SELECT Автор.Фамилия, Автор.Код_Автора
FROM Автор,Книга
WHERE Книга.Издательство<>'АСТ' 
 (3)
SELECT Автор.Фамилия, Автор.Код_Автора
FROM Автор, Книга
WHERE Автор.Код_Автора=Книга.Код_Автора
AND Книга.Издательство='АСТ' 
 (4)
SELECT Автор.Фамилия, Автор.Код_Автора
FROM Автор
WHERE NOT EXISTS (SELECT Книга.Код_Автора
FROM Книга
WHERE Книга.Издательство='АСТ') 
Номер 2
Даны таблицы
CREATE TABLE Рейс
(Номер_рейса INT,
Конечный_пункт VARCHAR(30),
Дата_вылета DATETIME,
Продолжительность_маршрута INT,
Число_билетов INT,
Стоимость MONEY) |
CREATE TABLE БИЛЕТ
(Номер_места CHAR(3),
Номер_рейса CHAR(6),
Дата_продажи DATETIME,
Стоимость MONEY,
Фамилия_пассажира VARCHAR(20)) |
Вывести список пассажиров, не летающих в Самару.
Ответ:
 (1)
SELECT DISTINCT Билет.Фамилия_пассажира
FROM Билет
WHERE Билет.Фамилия_пассажира NOT IN
(SELECT Билет.Фамилия_пассажира
FROM Рейс INNER JOIN Билет ON
Рейс.Номер_рейса = Билет.Номер_рейса
WHERE Рейс.Конечный_пункт="Самара") 
 (2)
SELECT DISTINCT Билет.Фамилия_пассажира
FROM Билет, Рейс
WHERE Рейс.Конечный_пункт<>"Самара" 
 (3)
SELECT DISTINCT Билет.Фамилия_пассажира
FROM Рейс INNER JOIN Билет ON
Рейс.Номер_рейса = Билет.Номер_рейса
WHERE Рейс.Конечный_пункт<>"Самара" 
 (4)
SELECT DISTINCT Билет.Фамилия_пассажира
FROM Билет
WHERE NOT EXISTS (SELECT Билет.Фамилия_пассажира
FROM Рейс INNER JOIN Билет ON
Рейс.Номер_рейса = Билет.Номер_рейса
WHERE Рейс.Конечный_пункт="Самара") 
Номер 3
Даны таблицы
CREATE TABLE Блюдо
(Название_блюда VARCHAR(20) NOT NULL,
Тип_блюда VARCHAR(20) NOT NULL,
Время_приготовления INT NOT NULL,
Общая_калорийность INT NOT NULL,
Номер_рецепта INT,
Повар VARCHAR(20),
Стоимость MONEY ) |
CREATE TABLE Компонент
(Название_компонента VARCHAR(20),
Калорийность INT NOT NULL,
Вес FLOAT,
Белки INT,
Блюдо VARCHAR(20),
Углеводы INT,
Стоимость MONEY NOT NULL) |
Определить, кто из поваров не готовит десерт.
Ответ:
 (1)
SELECT DISTINCT Блюдо.Повар
FROM Блюдо
WHERE Блюдо.Повар NOT IN (SELECT Блюдо.Повар
FROM Блюдо
WHERE Блюдо.Тип_блюда="Десерт")  
 (2)
SELECT DISTINCT Блюдо.Повар
FROM Блюдо
WHERE Блюдо.Тип_блюда<>"Десерт" 
 (3)
SELECT DISTINCT Блюдо.Повар
FROM Блюдо
WHERE NOT EXISTS (SELECT Блюдо.Повар
FROM Блюдо
WHERE Блюдо.Тип_блюда="Десерт") 
 (4)
SELECT DISTINCT Блюдо.Повар
FROM Блюдо
WHERE Блюдо.Повар<> ALL (SELECT Блюдо.Повар
FROM Блюдо
WHERE Блюдо.Тип_блюда="Десерт") 
Номер 4
Даны таблицы
CREATE TABLE Город
(Код_Города INT ,
Название VARCHAR(20) NOT NULL,
Тариф MONEY,
Регион VARCHAR(20)) |
CREATE TABLE Разговор
(Код_Разговора INT ,
Код_Города INT NOT NULL,
Фамилия IVARCHAR(20),
Дата DATETIME NOT NULL,
Продолжительность INT NOT NULL)
|
Перечислить фамилии людей, которые не говорили с абонентами из Москвы.
Ответ:
 (1)
SELECT DISTINCT Разговор.Фамилия
FROM Разговор
WHERE Разговор.Фамилия NOT IN
(SELECT Разговор.Фамилия
FROM Разговор INNER JOIN Город ON
Разговор.Код_Города = Город.Код_Города
WHERE Город.Название="Москва") 
 (2)
SELECT DISTINCT Разговор.Фамилия
FROM Разговор,Город
WHERE Разговор.Код_Города = Город.Код_Города
AND Город.Название<>"Москва" 
 (3)
SELECT DISTINCT Разговор.Фамилия
FROM Разговор INNER JOIN Город ON
Разговор.Код_Города = Город.Код_Города
WHERE Город.Название<>"Москва" 
 (4)
SELECT DISTINCT Разговор.Фамилия
FROM Разговор
WHERE NOT EXISTS (SELECT Разговор.Фамилия
FROM Разговор INNER JOIN Город ON
Разговор.Код_Города = Город.Код_Города
WHERE Город.Название="Москва") 
Упражнение 3:
Номер 1
Даны таблицы
CREATE TABLE Автор
(Код_Автора INT ,
Фамилия VARCHAR(50) NULL,
Имя VARCHAR(50) NULL,
Отчество VARCHAR(50) NULL,
Пол VARCHAR(50) NOT NULL ,
Дата_рождения DATETIME ,
Телефон CHAR(9)) |
CREATE TABLE Книга
( Код_Книги INT,
Название VARCHAR(50) NOT NULL,
Цена MONEY,
Тематика VARCHAR(50) NOT NULL,
Издательство VARCHAR(50) NOT NULL,
Код_Автора INT NOT NULL,
Количество INT) |
Определить авторов, написавших наибольшее количество книг.
Ответ:
 (1)
SELECT Автор.Фамилия
FROM Книга INNER JOIN Автор ON
Книга.Код_Автора = Автор.Код_Автора
GROUP BY Автор.Фамилия
HAVING Count(Книга.Название)>=
All (SELECT Count(Книга.Название)
FROM Книга
GROUP BY Книга.Код_Автора) 
 (2)
SELECT Автор.Фамилия
FROM Книга INNER JOIN Автор ON
Книга.Код_Автора = Автор.Код_Автора
GROUP BY Автор.Фамилия
HAVING Count(Книга.Название)=MAX
(SELECT Count(Книга.Название)
FROM Книга
GROUP BY Книга.Код_Автора) 
 (3)
SELECT Автор.Фамилия
FROM Книга INNER JOIN Автор ON
Книга.Код_Автора = Автор.Код_Автора
GROUP BY Автор.Фамилия
HAVING Count(Книга.Название)>=All
(SELECT Count(Книга.Название)
FROM Книга) 
 (4)
SELECT Автор.Фамилия
FROM Книга INNER JOIN Автор ON
Книга.Код_Автора = Автор.Код_Автора
WHERE Count(Книга.Название)>=All
(SELECT Count(Книга.Название)
FROM Книга) 
Номер 2
Даны таблицы
CREATE TABLE Рейс
(Номер_рейса INT,
Конечный_пункт VARCHAR(30),
Дата_вылета DATETIME,
Продолжительность_маршрута INT,
Стоимость MONEY,
Число_билетов INT) |
CREATE TABLE БИЛЕТ
(Номер_места CHAR(3),
Номер_рейса INT,
Дата_продажи DATETIME,
Стоимость MONEY,
Фамилия_пассажира VARCHAR(20)) |
Определить, кто из пассажиров потратил наибольшую сумму на покупку авиабилетов.
Ответ:
 (1)
SELECT Билет.Фамилия_пассажира,
Sum(Рейс.Стоимость) AS Sum_Стоимость
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
GROUP BY Билет.Фамилия_пассажира
HAVING Sum(Рейс.Стоимость)>=
ALL(SELECT Sum(Рейс.Стоимость)
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
GROUP BY Билет.Фамилия_пассажира) 
 (2)
SELECT Билет.Фамилия_пассажира,
Sum(Рейс.Стоимость) AS Sum_Стоимость
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
GROUP BY Билет.Фамилия_пассажира
HAVING Sum(Рейс.Стоимость)=
MAX(SELECT Sum(Рейс.Стоимость)
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
GROUP BY Билет.Фамилия_пассажира) 
 (3)
SELECT Билет.Фамилия_пассажира,
Sum(Рейс.Стоимость) AS Sum_Стоимость
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
GROUP BY Билет.Фамилия_пассажира
HAVING Sum(Рейс.Стоимость)>=
ALL(SELECT Sum(Рейс.Стоимость)
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса) 
 (4)
SELECT Билет.Фамилия_пассажира,
Sum(Рейс.Стоимость) AS Sum_Стоимость
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
WHERE Sum(Рейс.Стоимость)>=
ALL(SELECT Sum(Рейс.Стоимость)
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса) 
Номер 3
Даны таблицы
CREATE TABLE Блюдо
(Название_блюда VARCHAR(20) NOT NULL,
Время_приготовления INT NOT NULL,
Номер_рецепта INT,
Повар VARCHAR(20),
Стоимость MONEY ) |
CREATE TABLE Компонент
(Название_компонента VARCHAR(20),
Калорийность INT NOT NULL,
Вес FLOAT,
Белки INT,
Блюдо VARCHAR(20),
Углеводы INT,
Стоимость MONEY NOT NULL) |
Определить самое калорийное блюдо.
Ответ:
 (1)
SELECT Компонент.Блюдо,
Sum(Компонент.Калорийность*Компонент.Вес) AS
Общ_калорийность
FROM Компонент
GROUP BY Компонент.Блюдо
HAVING Sum(Компонент.Калорийность*Компонент.Вес)>=
ALL(SELECT
Sum(Компонент.Калорийность*Компонент.Вес)
FROM Компонент
GROUP BY Компонент.Блюдо) 
 (2)
SELECT Компонент.Блюдо,
Sum(Компонент.Калорийность*Компонент.Вес) AS
Общ_калорийность
FROM Компонент
GROUP BY Компонент.Блюдо
HAVING Sum(Компонент.Калорийность*Компонент.Вес)=
MAX(SELECT
Sum(Компонент.Калорийность*Компонент.Вес)
FROM Компонент
GROUP BY Компонент.Блюдо) 
 (3)
SELECT Компонент.Блюдо,
Sum(Компонент.Калорийность*Компонент.Вес) AS
Общ_калорийность
FROM Компонент
GROUP BY Компонент.Блюдо
HAVING Sum(Компонент.Калорийность*Компонент.Вес)>=
ALL(SELECT
Sum(Компонент.Калорийность*Компонент.Вес)
FROM Компонент) 
 (4)
SELECT Компонент.Блюдо,
Sum(Компонент.Калорийность*Компонент.Вес) AS
Общ_калорийность
FROM Компонент
WHERE Sum(Компонент.Калорийность*Компонент.Вес)>=
ALL(SELECT
Sum(Компонент.Калорийность*Компонент.Вес)
FROM Компонент) 
Номер 4
Даны таблицы
CREATE TABLE Город
( Код_Города INT ,
Название VARCHAR(20) NOT NULL,
Тариф MONEY,
Регион VARCHAR(20)) |
CREATE TABLE Разговор
(Код_Разговора INT ,
Код_Города INT NOT NULL,
Фамилия IVARCHAR(20),
Дата DATETIME NOT NULL,
Продолжительность INT NOT NULL) |
Определить тех абонентов, которые заплатили за телефонные разговоры больше, чем другие.
Ответ:
 (1)
SELECT Разговор.Фамилия,
Sum(Город.Тариф*Разговор.Продолжительность) AS
Стоимость
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
GROUP BY Разговор.Фамилия
HAVING Sum(
Город.Тариф*Разговор.Продолжительность)>=
ALL(SELECT
Sum(Город.Тариф*Разговор.Продолжительность)
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
GROUP BY Разговор.Фамилия) 
 (2)
SELECT Разговор.Фамилия,
Sum(Город.Тариф*Разговор.Продолжительность) AS
Стоимость
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
GROUP BY Разговор.Фамилия
HAVING Sum(
Город.Тариф*Разговор.Продолжительность)=
MAX(SELECT
Sum(Город.Тариф*Разговор.Продолжительность)
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
GROUP BY Разговор.Фамилия) 
 (3)
SELECT Разговор.Фамилия,
Sum(Город.Тариф*Разговор.Продолжительность) AS
Стоимость
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
GROUP BY Разговор.Фамилия
HAVING Sum(
Город.Тариф*Разговор.Продолжительность)<=
ALL(SELECT
Sum(Город.Тариф*Разговор.Продолжительность)
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города) 
 (4)
SELECT Разговор.Фамилия,
Sum(Город.Тариф*Разговор.Продолжительность) AS
Стоимость
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Sum(
Город.Тариф*Разговор.Продолжительность)>=
ALL(SELECT
Sum(Город.Тариф*Разговор.Продолжительность)
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города) 
Упражнение 4:
Номер 1
Даны таблицы
CREATE TABLE Автор
(Код_Автора INT ,
Фамилия VARCHAR(50) NULL,
Имя VARCHAR(50) NULL,
Отчество VARCHAR(50) NULL,
Пол VARCHAR(50) NOT NULL ,
Дата_рождения DATETIME ,
Телефон CHAR(9)) |
CREATE TABLE Книга
( Код_Книги INT,
Название VARCHAR(50) NOT NULL,
Цена MONEY,
Тематика VARCHAR(50) NOT NULL,
Издательство VARCHAR(50) NOT NULL,
Код_Автора INT NOT NULL,
Количество INT) |
Определить авторов, общая стоимость книг которых, выпущенных издательством «Мир», составила наименьшую сумму.
Ответ:
 (1)
SELECT Автор.Фамилия,
Sum(Книга.Цена*Книга.Количество) AS Стоимость
FROM Книга INNER JOIN Автор ON
Книга.Код_Автора = Автор.Код_Автора
WHERE Книга.Издательство="Мир"
GROUP BY Автор.Фамилия
HAVING Sum(Книга.Цена*Книга.Количество)<=
All (SELECT Sum(Книга.Цена*Книга.Количество)
FROM Книга
WHERE Книга.Издательство="Мир"
GROUP BY Книга.Код_Автора)  
 (2)
SELECT Автор.Фамилия,
Sum(Книга.Цена*Книга.Количество) AS Стоимость
FROM Книга INNER JOIN Автор ON
Книга.Код_Автора = Автор.Код_Автора
WHERE Книга.Издательство="Мир"
GROUP BY Автор.Фамилия
HAVING Sum(Книга.Цена*Книга.Количество)=
MIN(SELECT Sum(Книга.Цена*Книга.Количество)
FROM Книга
WHERE Книга.Издательство="Мир"
GROUP BY Книга.Код_Автора)  
 (3)
SELECT Автор.Фамилия,
Sum(Книга.Цена*Книга.Количество) AS Стоимость
FROM Книга INNER JOIN Автор ON
Книга.Код_Автора = Автор.Код_Автора
WHERE Книга.Издательство="Мир"
HAVING Sum(Книга.Цена*Книга.Количество)<=
All (SELECT Sum(Книга.Цена*Книга.Количество)
FROM Книга
WHERE Книга.Издательство="Мир")  
 (4)
SELECT Автор.Фамилия,
Sum(Книга.Цена*Книга.Количество) AS Стоимость
FROM Книга INNER JOIN Автор ON
Книга.Код_Автора = Автор.Код_Автора
WHERE Книга.Издательство="Мир"
AND Sum(Книга.Цена*Книга.Количество)<=
All (SELECT Sum(Книга.Цена*Книга.Количество)
FROM Книга
WHERE Книга.Издательство="Мир"
)  
Номер 2
Даны таблицы
CREATE TABLE Рейс
(Номер_рейса INT,
Конечный_пункт VARCHAR(30),
Дата_вылета DATETIME,
Продолжительность_маршрута INT,
Число_билетов INT,
Стоимость MONEY) |
CREATE TABLE БИЛЕТ
(Номер_места CHAR(3),
Номер_рейса CHAR(6),
Дата_продажи DATETIME,
Стоимость MONEY,
Фамилия_пассажира VARCHAR(20)) |
Определить пассажиров, реже других летающих в Москву.
Ответ:
 (1)
SELECT Билет.Фамилия_пассажира,
Count(Рейс.Номер_рейса) AS Кол_рейсов
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
WHERE Рейс.Конечный_пункт="Москва"
GROUP BY Билет.Фамилия_пассажира
HAVING Count(Рейс.Номер_рейса)<=
ALL(SELECT Count(Рейс.Конечный_пункт)
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
WHERE Рейс.Конечный_пункт="Москва"
GROUP BY Билет.Фамилия_пассажира) 
 (2)
SELECT Билет.Фамилия_пассажира,
Count(Рейс.Номер_рейса) AS Кол_рейсов
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
WHERE Рейс.Конечный_пункт="Москва"
GROUP BY Билет.Фамилия_пассажира
HAVING Count(Рейс.Номер_рейса)<=
MIN(SELECT Count(Рейс.Конечный_пункт)
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
WHERE Рейс.Конечный_пункт="Москва"
GROUP BY Билет.Фамилия_пассажира) 
 (3)
SELECT Билет.Фамилия_пассажира,
Count(Рейс.Номер_рейса) AS Кол_рейсов
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
WHERE Рейс.Конечный_пункт="Москва"
HAVING Count(Рейс.Номер_рейса)<=
ALL(SELECT Count(Рейс.Конечный_пункт)
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
WHERE Рейс.Конечный_пункт="Москва") 
 (4)
SELECT Билет.Фамилия_пассажира,
Count(Рейс.Номер_рейса) AS Кол_рейсов
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
WHERE Рейс.Конечный_пункт="Москва"
AND Count(Рейс.Номер_рейса)<=
ALL(SELECT Count(Рейс.Конечный_пункт)
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
WHERE Рейс.Конечный_пункт="Москва") 
Номер 3
Даны таблицы
CREATE TABLE Блюдо
(Название_блюда VARCHAR(20) NOT NULL,
Тип_блюда VARCHAR(20) NOT NULL,
Время_приготовления INT NOT NULL,
Общая_калорийность INT NOT NULL,
Номер_рецепта INT,
Повар VARCHAR(20),
Стоимость MONEY ) |
CREATE TABLE Компонент
(Название_компонента VARCHAR(20),
Калорийность INT NOT NULL,
Вес FLOAT,
Белки INT,
Блюдо VARCHAR(20),
Углеводы INT,
Стоимость MONEY NOT NULL) |
Определить поваров, которые готовят десерты чаще, чем другие.
Ответ:
 (1)
SELECT Блюдо.Повар,
Count(Блюдо.Название_блюда) AS Кол_блюд
FROM Блюдо
WHERE Блюдо.Тип_блюда="Десерт"
GROUP BY Блюдо.Повар
HAVING Count(Блюдо.Название_блюда)>=
ALL(SELECT Count(Блюдо.Название_блюда)
FROM Блюдо
WHERE Блюдо.Тип_блюда="Десерт"
GROUP BY Блюдо.Повар) 
 (2)
SELECT Блюдо.Повар,
Count(Блюдо.Название_блюда) AS Кол_блюд
FROM Блюдо
WHERE Блюдо.Тип_блюда="Десерт"
GROUP BY Блюдо.Повар
HAVING Count(Блюдо.Название_блюда)>=
MAX(SELECT Count(Блюдо.Название_блюда)
FROM Блюдо
WHERE Блюдо.Тип_блюда="Десерт"
GROUP BY Блюдо.Повар) 
 (3)
SELECT Блюдо.Повар,
Count(Блюдо.Название_блюда) AS Кол_блюд
FROM Блюдо
WHERE Блюдо.Тип_блюда="Десерт"
HAVING Count(Блюдо.Название_блюда)>=
ALL(SELECT Count(Блюдо.Название_блюда)
FROM Блюдо
WHERE Блюдо.Тип_блюда="Десерт") 
 (4)
SELECT Блюдо.Повар,
Count(Блюдо.Название_блюда) AS Кол_блюд
FROM Блюдо
WHERE Блюдо.Тип_блюда="Десерт"
AND Count(Блюдо.Название_блюда)>=
ALL(SELECT Count(Блюдо.Название_блюда)
FROM Блюдо
WHERE Блюдо.Тип_блюда="Десерт") 
Номер 4
Даны таблицы
CREATE TABLE Город
( Код_Города INT ,
Название VARCHAR(20) NOT NULL,
Тариф MONEY,
Регион VARCHAR(20)) |
CREATE TABLE Разговор
(Код_Разговора INT ,
Код_Города INT NOT NULL,
Фамилия IVARCHAR(20),
Дата DATETIME NOT NULL,
Продолжительность INT NOT NULL) |
Определить город Поволжья, переговоры с которым ведутся наиболее часто.
Ответ:
 (1)
SELECT Город.Название,
Count(Разговор.Код_Разговора) AS Кол_разговоров
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Регион="Поволжье"
GROUP BY Город.Название
HAVING Count(Разговор.Код_Разговора)>=
ALL(SELECT Count(Разговор.Код_Разговора)
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Регион="Поволжье"
GROUP BY Город.Название) 
 (2)
SELECT Город.Название,
Count(Разговор.Код_Разговора) AS Кол_разговоров
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Регион="Поволжье"
GROUP BY Город.Название
HAVING Count(Разговор.Код_Разговора)>=
MAX(SELECT Count(Разговор.Код_Разговора)
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Регион="Поволжье"
GROUP BY Город.Название) 
 (3)
SELECT Город.Название,
Count(Разговор.Код_Разговора) AS Кол_разговоров
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Регион="Поволжье"
HAVING Count(Разговор.Код_Разговора)>=
ALL(SELECT Count(Разговор.Код_Разговора)
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Регион="Поволжье") 
 (4)
SELECT Город.Название,
Count(Разговор.Код_Разговора) AS Кол_разговоров
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Регион="Поволжье"
AND Count(Разговор.Код_Разговора)>=
ALL(SELECT Count(Разговор.Код_Разговора)
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Регион="Поволжье"
GROUP BY Город.Название) 
Упражнение 5:
Номер 1
Даны таблицы Автор
и Книга
.
CREATE TABLE Автор
( Код_Автора INT ,
Фамилия VARCHAR(50))
|
CREATE TABLE Книга
( Код_Книги INT,
Название VARCHAR(50) NOT NULL,
Цена MONEY,
Издательство VARCHAR(50) NOT NULL,
Код_Автора INT NOT NULL,
Количество INT)
|
Определить авторов, чьи какие-либо книги проданы в наименьшем количестве.
Ответ:
 (1)
SELECT Автор.Фамилия, Книга.Количество
FROM Книга INNER JOIN Автор ON
Книга.Код_Автора = Автор.Код_Автора
WHERE Книга.Количество=
(SELECT Min(Книга.Количество)
FROM Книга) 
 (2)
SELECT Автор.Фамилия, Книга.Количество
FROM Книга INNER JOIN Автор ON
Книга.Код_Автора = Автор.Код_Автора
WHERE Книга.Количество <=
ALL(SELECT Книга.Количество
FROM Книга) 
 (3)
SELECT Автор.Фамилия, Книга.Количество
FROM Книга INNER JOIN Автор ON
Книга.Код_Автора = Автор.Код_Автора
WHERE Книга.Количество =
Min(Книга. Количество) 
 (4)
SELECT Автор.Фамилия, Книга. Количество
FROM Книга INNER JOIN Автор ON
Книга.Код_Автора = Автор.Код_Автора
WHERE Книга.Количество =
Min(SELECT Книга.Количество
FROM Книга) 
Номер 2
Даны таблицы Рейс
и Билет
.
CREATE TABLE Рейс
(Номер_рейса INT,
Конечный_пункт VARCHAR(30),
Продолжительность_маршрута INT)
|
CREATE TABLE БИЛЕТ
(Номер_места CHAR(3),
Номер_рейса CHAR(6),
Фамилия_пассажира VARCHAR(20))
|
Определить самый продолжительный рейс.
Ответ:
 (1)
SELECT Рейс.Номер_рейса,
Рейс.Конечный_пункт,
Рейс.Продолжительность_маршрута
FROM Рейс
WHERE Рейс.Продолжительность_маршрута=
(SELECT Max(Рейс.Продолжительность_маршрута)
FROM Рейс) 
 (2)
SELECT Рейс.Номер_рейса,
Рейс.Конечный_пункт,
Рейс.Продолжительность_маршрута
FROM Рейс
WHERE Рейс.Продолжительность_маршрута=
Max(Рейс.Продолжительность_маршрута) 
 (3)
SELECT Рейс.Номер_рейса,
Рейс.Конечный_пункт,
Рейс.Продолжительность_маршрута
FROM Рейс
WHERE Рейс.Продолжительность_маршрута=
(Max(SELECT Рейс.Продолжительность_маршрута
FROM Рейс)) 
 (4)
SELECT Рейс.Номер_рейса,
Рейс.Конечный_пункт,
Рейс.Продолжительность_маршрута
FROM Рейс
WHERE Рейс.Продолжительность_маршрута>=ALL
(SELECT Рейс.Продолжительность_маршрута
FROM Рейс) 
Номер 3
Даны таблицы Город
и Разговор
.
CREATE TABLE Город
( Код_Города INT,
Название VARCHAR(20),
Тариф MONEY,
Регион VARCHAR(20))
|
CREATE TABLE Разговор
(Код_Разговора INT ,
Код_Города INT NOT NULL,
Фамилия VARCHAR(20),
Дата DATETIME,
Продолжительность INT NOT NULL)
|
Вывести список регионов, где средние тарифы на телефонные разговоры выше, чем в других регионах.
Ответ:
 (1)
SELECT Город.Регион, Avg(Город.Тариф)
FROM Город
GROUP BY Город.Регион
HAVING Avg(Город.Тариф)>=ALL
(SELECT Avg(Город.Тариф)
FROM Город
GROUP BY Город.Регион) 
 (2)
SELECT Город.Регион, Avg(Город.Тариф)
FROM Город
GROUP BY Город.Регион
HAVING Avg(Город.Тариф)>=ALL
(SELECT Avg(Город.Тариф), Город.Регион
FROM Город
GROUP BY Город.Регион) 
 (3)
SELECT Город.Регион, Avg(Город.Тариф)
FROM Город
GROUP BY Город.Регион
HAVING Avg(Город.Тариф)>=Avg(SELECT Город.Тариф)
FROM Город
GROUP BY Город.Регион) 
 (4)
SELECT Город.Регион, Avg(Город.Тариф)
FROM Город
GROUP BY Город.Регион
HAVING Avg(Город.Тариф)>=Avg(Город.Тариф) 
Упражнение 6:
Номер 1
Определить издательства, выручившие от продажи книг наименьшую сумму.
Ответ:
 (1)
SELECT Книга.Издательство,
Sum(Книга.Цена*Книга.Количество) AS Стоимость
FROM Книга
GROUP BY Книга.Издательство
HAVING Sum(Книга.Цена*Книга.Количество)<=ALL(
SELECT Sum(Книга.Цена*Книга.Количество)
FROM Книга
GROUP BY Книга.Издательство) 
 (2)
SELECT Книга.Издательство,
Sum(Книга.Цена*Книга.Количество) AS Стоимость
FROM Книга
HAVING Sum(Книга.Цена*Книга.Количество)<=ALL(
SELECT Sum(Книга.Цена*Книга.Количество)
FROM Книга
GROUP BY Книга.Издательство) 
 (3)
SELECT Книга.Издательство,
Sum(Книга.Цена*Книга.Количество) AS Стоимость
FROM Книга
GROUP BY Книга.Издательство
WHERE Sum(Книга.Цена*Книга.Количество)<=ALL(
SELECT Sum(Книга.Цена*Книга.Количество)
FROM Книга
GROUP BY Книга.Издательство) 
 (4)
SELECT Книга.Издательство,
Sum(Книга.Цена*Книга.Количество) AS Стоимость
FROM Книга
GROUP BY Книга.Издательство
HAVING Sum(Книга.Цена*Книга.Количество)<=ALL(
Sum(Книга.Цена*Книга.Количество)
FROM Книга
GROUP BY Книга.Издательство) 
Номер 2
Определить конечный пункт, в который вылетело наименьшее число пассажиров.
Ответ:
 (1)
SELECT Рейс.Конечный_пункт,
Count(Билет.Фамилия_пассажира)
FROM Рейс INNER JOIN Билет ON
Рейс.Номер_рейса = Билет.Номер_рейса
GROUP BY Рейс.Конечный_пункт
HAVING Count(Билет.Фамилия_пассажира)<=All
(SELECT Count(Билет.Фамилия_пассажира)
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
GROUP BY Рейс.Конечный_пункт) 
 (2)
SELECT Рейс.Конечный_пункт,
Count(Билет.Фамилия_пассажира)
FROM Рейс INNER JOIN Билет ON
Рейс.Номер_рейса = Билет.Номер_рейса
GROUP BY Рейс.Конечный_пункт
HAVING Count(Билет.Фамилия_пассажира)<=(SELECT
Count(Билет.Фамилия_пассажира)
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
GROUP BY Рейс.Конечный_пункт) 
 (3)
SELECT Рейс.Конечный_пункт,
Count(Билет.Фамилия_пассажира)
FROM Рейс INNER JOIN Билет ON
Рейс.Номер_рейса = Билет.Номер_рейса
GROUP BY Рейс.Конечный_пункт
HAVING Count(Билет.Фамилия_пассажира)=MIN
(SELECT Count(Билет.Фамилия_пассажира)
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
GROUP BY Рейс.Конечный_пункт) 
 (4)
SELECT Рейс.Конечный_пункт,
Count(Билет.Фамилия_пассажира)
FROM Рейс INNER JOIN Билет ON
Рейс.Номер_рейса = Билет.Номер_рейса
GROUP BY Рейс.Конечный_пункт
WHERE Count(Билет.Фамилия_пассажира)<=All
(SELECT Count(Билет.Фамилия_пассажира)
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
GROUP BY Рейс.Конечный_пункт) 
Номер 3
Определить город Поволжья, с которым дольше других ведутся телефонные разговоры.
Ответ:
 (1)
SELECT Город.Название,
Sum(Разговор.Продолжительность)
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Регион='Поволжье'
GROUP BY Город.Название
HAVING Sum(Разговор.Продолжительность)>=All
(SELECT Sum(Разговор.Продолжительность)
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Регион='Поволжье'
GROUP BY Город.Название) 
 (2)
SELECT Город.Название,
Sum(Разговор.Продолжительность) AS
Кол_разговоров
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Регион='Поволжье'
GROUP BY Город.Название
HAVING Count(Разговор.Продолжительность)>=MAX
(SELECT Sum(Разговор.Продолжительность)
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Регион='Поволжье'
GROUP BY Город.Название) 
 (3)
SELECT Город.Название,
Sum(Разговор. Продолжительность) AS
Кол_разговоров
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Регион='Поволжье'
HAVING Sum(Разговор.Код_Разговора)>=ALL
(SELECT Sum(Разговор.Продолжительность)
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Регион='Поволжье') 
 (4)
SELECT Город.Название,
Sum(Разговор. Продолжительность) AS
Кол_разговоров
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Регион='Поволжье'
AND Sum(Разговор.Продолжительность)>=ALL
(SELECT Sum(Разговор.Продолжительность)
FROM Город INNER JOIN Разговор
ON Город.Код_Города = Разговор.Код_Города
WHERE Город.Регион='Поволжье'
GROUP BY Город.Название)