Главная / Базы данных /
Основы SQL / Тест 5
Основы SQL - тест 5
Упражнение 1:
Номер 1
Даны таблицы
CREATE TABLE Автор
(Код_Автора INT,
Фамилия VARCHAR(50) NULL,
Имя VARCHAR(50) NULL,
Отчество VARCHAR(50) NULL,
Пол VARCHAR(3) NOT NULL,
Дата_рождения DATETIME,
Телефон CHAR(9)) |
CREATE TABLE Книга
(Код_Книги INT,
Название VARCHAR(50) NOT NULL,
Цена MONEY,
Тематика VARCHAR(50) NOT NULL,
Издательство VARCHAR(50) NOT NULL,
Код_Автора INT NOT NULL) |
Вывести список авторов, чьи книги выпускало издательство "Мир".
Ответ:
 (1)
SELECT DISTINCT Автор.Фамилия, Книга.Издательство
FROM Автор INNER JOIN Книга ON
Автор.Код_Автора = Книга.Код_Автора
WHERE Книга.Издательство="Мир"  
 (2)
SELECT DISTINCT Автор.Фамилия, Книга.Издательство
FROM Автор, Книга
WHERE Автор.Код_Автора = Книга.Код_Автора AND
Книга.Издательство="Мир"  
 (3)
SELECT DISTINCT Автор.Фамилия, Книга.Издательство
FROM Автор JOIN Книга ON Автор = Книга
WHERE Книга.Издательство="Мир" 
 (4)
SELECT DISTINCT Автор.Фамилия, Книга.Издательство
FROM Автор INNER JOIN Книга.Издательство
ON Автор.Код_Автора = Книга.Код_Автора
AND Книга.Издательство="Мир" 
Номер 2
Даны таблицы
CREATE TABLE Рейс
(Номер_рейса INT,
Конечный_пункт VARCHAR(30),
Дата_вылета DATETIME,
Продолжительность_маршрута INT,
Число_билетов INT) |
CREATE TABLE БИЛЕТ
(Номер_места CHAR(3),
Номер_рейса INT,
Дата_продажи DATETIME,
Стоимость MONEY,
Фамилия_пассажира VARCHAR(20)) |
Вывести номера мест и дату продажи билетов на рейсы до Москвы.
Ответ:
 (1)
SELECT Билет.Номер_места, Билет.Дата_продажи
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
WHERE Рейс.Конечный_пункт='Москва' 
 (2)
SELECT Билет.Номер_места, Билет.Дата_продажи
FROM Билет, Рейс
WHERE Билет.Номер_рейса = Рейс.Номер_рейса AND
Рейс.Конечный_пункт='Москва' 
 (3)
SELECT Билет.Номер_места, Билет.Дата_продажи
FROM Билет JOIN Рейс ON
Номер_рейса = Номер_рейса
WHERE Рейс.Конечный_пункт='Москва' 
 (4)
SELECT Билет.Номер_места, Билет.Дата_продажи
FROM Билет INNER Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
AND Рейс.Конечный_пункт='Москва' 
Номер 3
Даны таблицы
CREATE TABLE Блюдо
(Название_блюда VARCHAR(20) NOT NULL,
Время_приготовления INT NOT NULL,
Общая_калорийность INT NOT NULL,
Номер_рецепта INT,
Повар VARCHAR(20),
Стоимость INT ) |
CREATE TABLE Компонент
(Название_компонента VARCHAR(20),
Калорийность INT NOT NULL,
Жиры INT,
Белки INT,
Блюдо VARCHAR(20),
Углеводы INT,
Стоимость_100_грамм FLOAT NOT NULL) |
Вывести список компонент, которые использует повар Иванов для приготовления своих блюд.
Ответ:
 (1)
SELECT Компонент.Название_компонента, Блюдо.Повар
FROM Блюдо INNER JOIN Компонент ON
Блюдо.Название_блюда = Компонент.Блюдо
WHERE Блюдо.Повар="Иванов" 
 (2)
SELECT Компонент.Название_компонента, Блюдо.Повар
FROM Блюдо,Компонент
WHERE Блюдо.Название_блюда = Компонент.Блюдо AND
Блюдо.Повар="Иванов" 
 (3)
SELECT Компонент.Название_компонента, Блюдо.Повар
FROM Блюдо INNER Компонент ON
Блюдо.Название_блюда = Компонент.Блюдо
AND Блюдо.Повар="Иванов" 
 (4)
SELECT Компонент.Название_компонента, Блюдо.Повар
FROM Блюдо INNER JOIN Компонент ON
Блюдо.Повар="Иванов"
AND Блюдо.Название_блюда = Компонент.Блюдо 
Номер 4
Даны таблицы
CREATE TABLE Город
( Код_Города INT ,
Название VARCHAR(20) NOT NULL,
Тариф MONEY) |
CREATE TABLE Разговор
(Код_Разговора INT ,
Код_Города INT NOT NULL,
Фамилия VARCHAR(20),
Дата DATETIME NOT NULL,
Продолжительность INT NOT NULL) |
Определить фамилии людей, которые говорили с абонентами из Москвы.
Ответ:
 (1)
SELECT Разговор.Фамилия, Город.Название
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Название='Москва'  
 (2)
SELECT Разговор.Фамилия, Город.Название
FROM Город, Разговор
WHERE Город.Код_Города = Разговор.Код_Города AND
Город.Название='Москва'  
 (3)
SELECT Разговор.Фамилия, Город.Название
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
AND Город.Название='Москва'  
 (4)
SELECT Разговор.Фамилия, Город.Название
FROM Город JOIN Разговор ON
Город.Название='Москва' ON
Город.Код_Города = Разговор.Код_Города  
Упражнение 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
) |
Предположим, что не все зарегистрированные в базе данных авторы имеют изданные книги. Вывести список всех авторов с указанием тематики изданных книг.
Ответ:
 (1)
SELECT DISTINCT Автор.Фамилия, Книга.Тематика
FROM Автор LEFT JOIN Книга ON
Автор.Код_Автора = Книга.Код_Автора  
 (2)
SELECT Автор.Фамилия, Книга.Тематика
FROM Автор RIGHT JOIN Книга ON
Автор.Код_Автора = Книга.Код_Автора  
 (3)
SELECT DISTINCT Автор.Фамилия, Книга.Тематика
FROM Автор INNER JOIN Книга ON
Автор.Код_Автора = Книга.Код_Автора  
 (4)
SELECT Автор.Фамилия, Книга.Тематика
FROM Автор,Книга
WHERE Автор.Код_Автора = Книга.Код_Автора  
Номер 2
Даны таблицы
CREATE TABLE Рейс
(Номер_рейса INT,
Конечный_пункт VARCHAR(30),
Дата_вылета DATETIME,
Продолжительность_маршрута INT,
Число_билетов INT) |
CREATE TABLE БИЛЕТ
(Номер_места INT,
Номер_рейса INT,
Дата_продажи DATETIME,
Стоимость MONEY,
Фамилия_пассажира VARCHAR(20)) |
Вывести список рейсов, на которые не были проданы билеты.
Ответ:
 (1)
SELECT Рейс.Номер_рейса, Билет.Номер_места
FROM Билет RIGHT JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
WHERE Билет.Номер_места Is Null 
 (2)
SELECT Рейс.Номер_рейса, Билет.Номер_места
FROM Билет LEFT JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
WHERE Билет.Номер_места Is Null 
 (3)
SELECT Рейс.Номер_рейса, Билет.Номер_места
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
WHERE Билет.Номер_места Is Null 
 (4)
SELECT Рейс.Номер_рейса, Билет.Номер_места
FROM Билет, Рейс
WHERE Билет.Номер_рейса = Рейс.Номер_рейса
AND Билет.Номер_места Is Null 
Номер 3
Даны таблицы
CREATE TABLE Блюдо
(Название_блюда VARCHAR(20) NOT NULL,
Время_приготовления INT NOT NULL,
Общая_калорийность INT NOT NULL,
Номер_рецепта INT,
Повар VARCHAR(20),
Стоимость INT ) |
CREATE TABLE Компонент
(Название_компонента VARCHAR(20),
Калорийность INT NOT NULL,
Жиры INT,
Белки INT,
Блюдо VARCHAR(20),
Углеводы INT,
Стоимость_100_грамм FLOAT NOT NULL) |
Найти поваров, которые используют в своих блюдах компоненты без названия.
Ответ:
 (1)
SELECT Блюдо.Повар, Блюдо.Название_блюда,
Компонент.Название_компонента
FROM Блюдо LEFT JOIN Компонент ON
Блюдо.Название_блюда = Компонент.Блюдо
WHERE Компонент.Название_компонента Is Null 
 (2)
SELECT Блюдо.Повар, Блюдо.Название_блюда,
Компонент.Название_компонента
FROM Блюдо RIGHT JOIN Компонент ON
Блюдо.Название_блюда = Компонент.Блюдо
WHERE Компонент.Название_компонента Is Null 
 (3)
SELECT Блюдо.Повар, Блюдо.Название_блюда,
Компонент.Название_компонента
FROM Блюдо INNER JOIN Компонент ON
Блюдо.Название_блюда = Компонент.Блюдо
WHERE Компонент.Название_компонента Is Null 
 (4)
SELECT Блюдо.Повар, Блюдо.Название_блюда,
Компонент.Название_компонента
FROM Блюдо,Компонент
WHERE Блюдо.Название_блюда = Компонент.Блюдо
AND Компонент.Название_компонента Is Null 
Номер 4
Даны таблицы
CREATE TABLE Город
( Код_Города INT ,
Название VARCHAR(20) NOT NULL,
Тариф MONEY) |
CREATE TABLE Разговор
(Код_Разговора INT ,
Код_Города INT NOT NULL,
Фамилия IVARCHAR(20),
Дата DATETIME NOT NULL,
Продолжительность INT NOT NULL) |
Вывести список городов, с которыми не зарегистрировано ни одного телефонного разговора.
Ответ:
 (1)
SELECT DISTINCT Город.Название
FROM Город LEFT JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Разговор.Код_Разговора Is Null  
 (2)
SELECT DISTINCT Город.Название
FROM Город RIGHT JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Разговор.Код_Разговора Is Null  
 (3)
SELECT DISTINCT Город.Название
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Разговор.Код_Разговора Is Null  
 (4)
SELECT DISTINCT Город.Название
FROM Город, Разговор
WHERE Город.Код_Города = Разговор.Код_Города
AND Разговор.Код_Разговора Is Null  
Упражнение 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
) |
Найти авторов, работающих как с издательством «Мир», так и с издательством «АСТ».
Ответ:
 (1)
SELECT Автор.Фамилия
FROM Автор
WHERE Автор.Код_Автора IN (SELECT Книга.Код_Автора
FROM Книга
WHERE Книга.Издательство="Мир" OR
Книга.Издательство="АСТ") 
 (2)
SELECT Автор.Фамилия
FROM Автор
WHERE Автор.Код_Автора IN (SELECT Книга.Код_Автора
FROM Книга
WHERE Книга.Издательство="Мир" AND
Книга.Издательство="АСТ")  
 (3)
SELECT Автор.Фамилия
FROM Автор, Книга
WHERE Книга.Издательство="Мир" AND
Книга.Издательство="АСТ" 
 (4)
SELECT Автор.Фамилия
FROM Автор
WHERE Автор.Код_Автора= Книга.Код_Автора AND
Книга.Издательство="Мир" AND
Книга.Издательство="АСТ"  
Номер 2
Даны таблицы
CREATE TABLE Рейс
(Номер_рейса INT,
Конечный_пункт VARCHAR(30),
Дата_вылета DATETIME,
Продолжительность_маршрута INT,
Число_билетов INT) |
CREATE TABLE БИЛЕТ
(Номер_места CHAR(3),
Номер_рейса CHAR(6),
Дата_продажи DATETIME,
Стоимость MONEY,
Фамилия_пассажира VARCHAR(20)) |
Составить список пассажиров, которые летают и в Москву, и в Киев.
Ответ:
 (1)
SELECT DISTINCT Билет.Фамилия_пассажира
FROM Билет
WHERE Билет.Фамилия_пассажира In (
SELECT Билет.Фамилия_пассажира
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
WHERE Рейс.Конечный_пункт="Москва") AND
Билет.Фамилия_пассажира In(
SELECT Билет.Фамилия_пассажира
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
WHERE Рейс.Конечный_пункт="Киев") 
 (2)
SELECT DISTINCT Билет.Фамилия_пассажира
FROM Билет, Рейс
WHERE Рейс.Конечный_пункт="Москва" AND
Рейс.Конечный_пункт="Киев" 
 (3)
SELECT DISTINCT Билет.Фамилия_пассажира
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
WHERE Рейс.Конечный_пункт="Москва" OR
Рейс.Конечный_пункт="Киев" 
 (4)
SELECT DISTINCT Билет.Фамилия_пассажира
FROM Билет
WHERE Билет.Фамилия_пассажира In (
SELECT Билет.Фамилия_пассажира
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
WHERE Рейс.Конечный_пункт="Москва" AND
Рейс.Конечный_пункт="Киев") 
Номер 3
Даны таблицы
CREATE TABLE Блюдо
(Название_блюда VARCHAR(20) NOT NULL,
Время_приготовления INT NOT NULL,
Общая_калорийность INT NOT NULL,
Номер_рецепта INT,
Повар VARCHAR(20),
Стоимость INT ) |
CREATE TABLE Компонент
(Название_компонента VARCHAR(20),
Калорийность INT NOT NULL,
Жиры INT,
Белки INT,
Блюдо VARCHAR(20),
Углеводы INT,
Стоимость_100_грамм FLOAT NOT NULL) |
Вывести список поваров, использующих для приготовления блюд и масло, и молоко.
Ответ:
 (1)
SELECT Блюдо.Повар
FROM Блюдо
WHERE Блюдо.Повар IN
(SELECT Блюдо.Повар
FROM Блюдо INNER JOIN Компонент ON
Блюдо.Название_блюда = Компонент.Блюдо
WHERE Компонент.Название_компонента='Масло')
AND Блюдо.Повар IN(
SELECT Блюдо.Повар
FROM Блюдо INNER JOIN Компонент ON
Блюдо.Название_блюда = Компонент.Блюдо
WHERE Компонент.Название_компонента='Молоко'); 
 (2)
SELECT Блюдо.Повар
FROM Блюдо
WHERE Блюдо.Повар IN
(SELECT Блюдо.Повар
FROM Блюдо INNER JOIN Компонент ON
Блюдо.Название_блюда = Компонент.Блюдо
WHERE Компонент.Название_компонента='Масло' AND
Компонент.Название_компонента='Молоко') 
 (3)
SELECT Блюдо.Повар
FROM Блюдо
WHERE Компонент.Название_компонента='Масло' AND
Компонент.Название_компонента="Молоко" 
 (4)
SELECT Блюдо.Повар
FROM Блюдо INNER JOIN Компонент ON
Блюдо.Название_блюда = Компонент.Блюдо
WHERE Компонент.Название_компонента='Масло' AND
Компонент.Название_компонента='Молоко' 
Номер 4
Даны таблицы
CREATE TABLE Город
( Код_Города INT ,
Название VARCHAR(20) NOT NULL,
Тариф MONEY) |
CREATE TABLE Разговор
(Код_Разговора INT ,
Код_Города INT NOT NULL,
Фамилия IVARCHAR(20),
Дата DATETIME NOT NULL,
Продолжительность INT NOT NULL) |
Найти фамилии абонентов, ведущих телефонные переговоры как с Москвой, так и с Самарой.
Ответ:
 (1)
SELECT DISTINCT Разговор.Фамилия
FROM Разговор
WHERE Разговор.Фамилия IN
(SELECT Разговор.Фамилия
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Название="Москва")
AND Разговор.Фамилия IN
(SELECT Разговор.Фамилия
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Название="Самара");  
 (2)
SELECT DISTINCT Разговор.Фамилия
FROM Разговор
WHERE Разговор.Фамилия IN
(SELECT Разговор.Фамилия
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Название="Москва" AND
Город.Название="Самара")  
 (3)
SELECT DISTINCT Разговор.Фамилия
FROM Разговор
WHERE Город.Название="Москва" AND
Город.Название="Самара" 
 (4)
SELECT DISTINCT Разговор.Фамилия
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Название="Москва" AND
Город.Название="Самара"  
Упражнение 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) |
Вывести список авторов, которые пишут романы, но не работают в жанре фантастики.
Ответ:
 (1)
SELECT Автор.Фамилия, Автор.Код_Автора
FROM Автор
WHERE Автор.Код_Автора IN (SELECT Книга.Код_Автора
FROM Книга
WHERE Книга.Тематика="Роман") AND
Автор.Код_Автора NOT IN (SELECT Книга.Код_Автора
FROM Книга
WHERE Книга.Тематика="Фантастика")  
 (2)
SELECT Автор.Фамилия, Автор.Код_Автора
FROM Автор
WHERE Автор.Код_Автора IN (SELECT Книга.Код_Автора
FROM Книга
WHERE Книга.Тематика="Роман" AND
Книга.Тематика<>"Фантастика")  
 (3)
SELECT Автор.Фамилия, Автор.Код_Автора
FROM Автор
WHERE Книга.Тематика="Роман" AND
Книга.Тематика="Фантастика"  
 (4)
SELECT Автор.Фамилия, Автор.Код_Автора
FROM Автор,Книга
WHERE Автор.Код_Автора= Книга.Код_Автора AND
Книга.Тематика="Роман" AND
Книга.Тематика<>"Фантастика" 
Номер 2
Даны таблицы
CREATE TABLE Рейс
(Номер_рейса INT,
Конечный_пункт VARCHAR(30),
Дата_вылета DATETIME,
Продолжительность_маршрута INT,
Число_билетов INT) |
CREATE TABLE БИЛЕТ
(Номер_места CHAR(3),
Номер_рейса CHAR(6),
Дата_продажи DATETIME,
Стоимость MONEY,
Фамилия_пассажира VARCHAR(20)) |
Составить список пассажиров, которые летают в Москву, но не летают в Киев.
Ответ:
 (1)
SELECT DISTINCT Билет.Фамилия_пассажира
FROM Билет
WHERE Билет.Фамилия_пассажира In (
SELECT Билет.Фамилия_пассажира
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
WHERE Рейс.Конечный_пункт="Москва") AND
Билет.Фамилия_пассажира NOT In(
SELECT Билет.Фамилия_пассажира
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
WHERE Рейс.Конечный_пункт="Киев") 
 (2)
SELECT DISTINCT Билет.Фамилия_пассажира
FROM Билет
WHERE Билет.Фамилия_пассажира In (
SELECT Билет.Фамилия_пассажира
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
WHERE Рейс.Конечный_пункт="Москва" AND
Рейс.Конечный_пункт="Киев")
 
 (3)
SELECT DISTINCT Билет.Фамилия_пассажира
FROM Билет
WHERE Рейс.Конечный_пункт="Москва" AND
Рейс.Конечный_пункт<>"Киев") 
 (4)
SELECT DISTINCT Билет.Фамилия_пассажира
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
WHERE Рейс.Конечный_пункт="Москва" AND
Рейс.Конечный_пункт<>"Киев" 
Номер 3
Даны таблицы
CREATE TABLE Блюдо
(Название_блюда VARCHAR(20) NOT NULL,
Время_приготовления INT NOT NULL,
Общая_калорийность INT NOT NULL,
Номер_рецепта INT,
Повар VARCHAR(20),
Стоимость INT ) |
CREATE TABLE Компонент
(Название_компонента VARCHAR(20),
Калорийность INT NOT NULL,
Жиры INT,
Белки INT,
Блюдо VARCHAR(20),
Углеводы INT,
Стоимость_100_грамм FLOAT NOT NULL) |
Сформировать список поваров, которые используют масло, но обходятся без молока.
Ответ:
 (1)
SELECT Блюдо.Повар
FROM Блюдо
WHERE Блюдо.Повар IN
(SELECT Блюдо.Повар
FROM Блюдо INNER JOIN Компонент ON
Блюдо.Название_блюда = Компонент.Блюдо
WHERE Компонент.Название_компонента="Масло")
AND Блюдо.Повар NOT IN(
SELECT Блюдо.Повар
FROM Блюдо INNER JOIN Компонент ON
Блюдо.Название_блюда = Компонент.Блюдо
WHERE Компонент.Название_компонента="Молоко"); 
 (2)
SELECT Блюдо.Повар
FROM Блюдо
WHERE Блюдо.Повар IN
(SELECT Блюдо.Повар
FROM Блюдо INNER JOIN Компонент ON
Блюдо.Название_блюда = Компонент.Блюдо
WHERE Компонент.Название_компонента="Масло"
AND Компонент.Название_компонента<>"Молоко"); 
 (3)
SELECT Блюдо.Повар
FROM Блюдо
WHERE Компонент.Название_компонента="Масло"
AND Компонент.Название_компонента<>"Молоко 
 (4)
SELECT Блюдо.Повар
FROM Блюдо INNER JOIN Компонент ON
Блюдо.Название_блюда = Компонент.Блюдо
WHERE Компонент.Название_компонента="Масло"
AND Компонент.Название_компонента<>"Молоко" 
Номер 4
Даны таблицы
CREATE TABLE Город
( Код_Города INT ,
Название VARCHAR(20) NOT NULL,
Тариф MONEY) |
CREATE TABLE Разговор
(Код_Разговора INT ,
Код_Города INT NOT NULL,
Фамилия VARCHAR(20),
Дата DATETIME NOT NULL,
Продолжительность INT NOT NULL) |
Найти абонентов, которые звонят в Москву, но ни разу не вели переговоры с Самарой.
Ответ:
 (1)
SELECT DISTINCT Разговор.Фамилия
FROM Разговор
WHERE Разговор.Фамилия IN
(SELECT Разговор.Фамилия
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Название='Москва')
AND Разговор.Фамилия NOT IN
(SELECT Разговор.Фамилия
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Название='Самара');  
 (2)
SELECT DISTINCT Разговор.Фамилия
FROM Разговор
WHERE Разговор.Фамилия IN
(SELECT Разговор.Фамилия
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Название='Москва' AND
Город.Название<>'Самара') 
 (3)
SELECT DISTINCT Разговор.Фамилия
FROM Разговор
WHERE Город.Название='Москва'
AND Город.Название<>'Самара' 
 (4)
SELECT DISTINCT Разговор.Фамилия
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Название='Москва'
AND Город.Название<>'Самара' 
Упражнение 5:
Номер 1
Даны таблицы Автор
и Книга
CREATE TABLE Автор
(Код_Автора INT ,
Фамилия VARCHAR(50),
Пол VARCHAR(50) NOT NULL )
|
CREATE TABLE Книга
( Код_Книги INT,
Название VARCHAR(50) NOT NULL,
Тематика VARCHAR(50) NOT NULL,
Издательство VARCHAR(50) NOT NULL,
Код_Автора INT NOT NULL)
|
Вывести список авторов, работающих в жанре "детектив".
Ответ:
 (1)
SELECT DISTINCT Автор.Фамилия, Книга.Издательство
FROM Автор INNER JOIN Книга ON
Автор.Код_Автора = Книга.Код_Автора
WHERE Книга.Тематика ='Детектив' 
 (2)
SELECT DISTINCT Автор.Фамилия, Книга.Издательство
FROM Автор, Книга
WHERE Автор.Код_Автора = Книга.Код_Автора AND
Книга.Тематика ='Детектив' 
 (3)
SELECT DISTINCT Автор.Фамилия, Книга.Издательство
FROM Автор JOIN Книга ON Автор = Книга
WHERE Книга.Тематика ='Детектив' 
Номер 2
Даны таблицы Рейс
и Билет
.
CREATE TABLE Рейс
(Номер_рейса INT,
Конечный_пункт VARCHAR(30),
Дата_вылета DATETIME)
|
CREATE TABLE БИЛЕТ
(Номер_места CHAR(3),
Номер_рейса INT,
Дата_продажи DATETIME,
Фамилия_пассажира VARCHAR(30))
|
Определить номера мест и дату продажи билетов на рейсы до Москвы с датой вылета 1 мая 2004 года
Ответ:
 (1)
SELECT Билет.Номер_места, Билет.Дата_продажи
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
WHERE Рейс.Конечный_пункт='Москва' AND
Рейс.Дата_вылета='05/01/2004' 
 (2)
SELECT Билет.Номер_места, Билет.Дата_продажи
FROM Билет, Рейс
WHERE Билет.Номер_рейса = Рейс.Номер_рейса AND
Рейс.Конечный_пункт='Москва' AND
Рейс.Дата_вылета='05/01/2004' 
 (3)
SELECT Билет.Номер_места, Билет.Дата_продажи
FROM Билет JOIN Рейс ON Номер_рейса = Номер_рейса
WHERE Рейс.Конечный_пункт='Москва' AND
Рейс.Дата_вылета='05/01/2004' 
 (4)
SELECT Билет.Номер_места, Билет.Дата_продажи
FROM Билет INNER Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса ON
Рейс.Дата_вылета='05/01/2004'
AND Рейс.Конечный_пункт='Москва' 
Номер 3
Даны таблицы Город
и Разговор
.
CREATE TABLE Город
( Код_Города INT ,
Название VARCHAR(20) NOT NULL,
Тариф MONEY)
|
CREATE TABLE Разговор
(Код_Разговора INT ,
Код_Города INT NOT NULL,
Фамилия VARCHAR(20),
Дата DATETIME NOT NULL,
Продолжительность INT NOT NULL)
|
Вывести список абонентов, которые говорили с Москвой в апреле.
Ответ:
 (1)
SELECT Разговор.Фамилия, Город.Название
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Название='Москва' AND
Month(Разговор.Дата)=4  
 (2)
SELECT Разговор.Фамилия, Город.Название
FROM Город, Разговор
WHERE Город.Код_Города = Разговор.Код_Города AND
Город.Название='Москва' AND
Month(Разговор.Дата)=4  
 (3)
SELECT Разговор.Фамилия, Город.Название
FROM Город JOIN Разговор ON
Город.Название='Москва' ON
Город.Код_Города = Разговор.Код_Города AND
Month(Разговор.Дата)=4  
Упражнение 6:
Номер 1
Вывести список авторов-женщин, работающих в жанре романа, но не в жанре фантастики.
CREATE TABLE Автор
(Код_Автора INT ,
Фамилия VARCHAR(50),
Пол VARCHAR(50) NOT NULL )
|
CREATE TABLE Книга
( Код_Книги INT,
Название VARCHAR(50) NOT NULL,
Тематика VARCHAR(50) NOT NULL,
Издательство VARCHAR(50) NOT NULL,
Код_Автора INT NOT NULL)
|
Ответ:
 (1)
SELECT Автор.Фамилия, Автор.Код_Автора
FROM Автор
WHERE Автор.Пол='ж' AND
Автор.Код_Автора IN (SELECT Книга.Код_Автора
FROM Книга
WHERE Книга.Тематика='Роман') AND
Автор.Код_Автора NOT IN (SELECT Книга.Код_Автора
FROM Книга
WHERE Книга.Тематика='Фантастика') 
 (2)
SELECT Автор.Фамилия, Автор.Код_Автора
FROM Автор
WHERE Автор.Пол='ж' AND
Автор.Код_Автора IN (SELECT Книга.Код_Автора
FROM Книга
WHERE Книга.Тематика='Роман' AND
Книга.Тематика<>'Фантастика') 
 (3)
SELECT Автор.Фамилия, Автор.Код_Автора
FROM Автор
WHERE Автор.Пол='ж' AND
Книга.Тематика='Роман' AND
Книга.Тематика='Фантастика' 
 (4)
SELECT Автор.Фамилия, Автор.Код_Автора
FROM Автор,Книга
WHERE Автор.Пол='ж' AND
Автор.Код_Автора= Книга.Код_Автора AND
Книга.Тематика='Роман' AND
(Книга.Тематика<>'Фантастика') 
Номер 2
Вывести список пассажиров, которые летали в апреле в Москву, но не летали в Киев в январе.
CREATE TABLE Рейс
(Номер_рейса INT,
Конечный_пункт VARCHAR(30),
Дата_вылета DATETIME)
|
CREATE TABLE БИЛЕТ
(Номер_места CHAR(3),
Номер_рейса CHAR(6),
Дата_продажи DATETIME,
Фамилия_пассажира VARCHAR(30))
|
Ответ:
 (1)
SELECT DISTINCT Билет.Фамилия_пассажира
FROM Билет
WHERE Билет.Фамилия_пассажира In (
SELECT Билет.Фамилия_пассажира
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
WHERE Рейс.Конечный_пункт='Москва' AND
Month(Рейс.Дата_вылета)=4) AND
Билет.Фамилия_пассажира NOT In(
SELECT Билет.Фамилия_пассажира
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
WHERE Рейс.Конечный_пункт='Киев' AND
Month(Рейс.Дата_вылета)=1)  
 (2)
SELECT DISTINCT Билет.Фамилия_пассажира
FROM Билет
WHERE Month(Рейс.Дата_вылета)=4 AND
Билет.Фамилия_пассажира In (
SELECT Билет.Фамилия_пассажира
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
WHERE Рейс.Конечный_пункт='Москва' AND
Рейс.Конечный_пункт='Киев' AND
Month(Рейс.Дата_вылета)=1) 
 (3)
SELECT DISTINCT Билет.Фамилия_пассажира
FROM Билет
WHERE Рейс.Конечный_пункт='Москва' AND
Month(Рейс.Дата_вылета)=4 OR
Рейс.Конечный_пункт<>'Киев' AND
Month(Рейс.Дата_вылета)=1) 
 (4)
SELECT DISTINCT Билет.Фамилия_пассажира
FROM Билет INNER JOIN Рейс ON
Билет.Номер_рейса = Рейс.Номер_рейса
WHERE Рейс.Конечный_пункт='Москва' AND
Month(Рейс.Дата_вылета)=4 OR
Рейс.Конечный_пункт<>'Киев' AND
Month(Рейс.Дата_вылета)=1 
Номер 3
Найти абонентов, которые звонят в Москву, но ни разу не звонили в Самару в мае.
CREATE TABLE Город
( Код_Города INT ,
Название VARCHAR(20) NOT NULL,
Тариф MONEY)
|
CREATE TABLE Разговор
(Код_Разговора INT ,
Код_Города INT NOT NULL,
Фамилия VARCHAR(20),
Дата DATETIME NOT NULL,
Продолжительность INT NOT NULL)
|
Ответ:
 (1)
SELECT DISTINCT Разговор.Фамилия
FROM Разговор
WHERE Разговор.Фамилия IN
(SELECT Разговор.Фамилия
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Название='Москва')
AND Разговор.Фамилия NOT IN
(SELECT Разговор.Фамилия
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Название='Самара' AND
Month(Разговор.Дата)=5) 
 (2)
SELECT DISTINCT Разговор.Фамилия
FROM Разговор
WHERE Разговор.Фамилия IN
(SELECT Разговор.Фамилия
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Название='Москва' AND
Город.Название<>'Самара' AND
Month(Разговор.Дата)=5) 
 (3)
SELECT DISTINCT Разговор.Фамилия
FROM Разговор
WHERE Город.Название='Москва'
AND Город.Название<>'Самара' AND
Month(Разговор.Дата)=5 
 (4)
SELECT DISTINCT Разговор.Фамилия
FROM Город INNER JOIN Разговор ON
Город.Код_Города = Разговор.Код_Города
WHERE Город.Название='Москва'
AND Город.Название<>'Самара' AND
Month(Разговор.Дата)=5