игра брюс 2048
Главная / Базы данных / Основы 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 




Главная / Базы данных / Основы SQL / Тест 5