Как можно сформулировать такие запросы SQL?

Добрый вечер, вчера сдавал экзамен по БД.
Меня препод завалил на трех запросах из 9и, я категорически не понимаю, чего он хотел.
Если вас не затруднит, можете написать то, как по вашему будет их правильно представить?

Вот так выглядят таблицы:

FILM (F_NAME, DIRECTOR, YEAR),
CUSTOMER (CU_NAME, CU_CITY, CU_ADDRESS),
CINEMA(CI_NAME, CI_ADDRESS, CI_CHIEF),
LOAN(CU_NAME, F_NAME)
PROGRAM(F_NAME, CI_NAME, DATE)

Такие нужно составить запросы:

1) Cinema names (CI_NAME) of cinemas from Pilsner (CI_ADDRESS like %Pilsner% ) and related amount of items on the PROGRAM (two tuples [F_NAME, DATE]). Include also CI_NAMEs of such cinemas, they have NO program yet into result set. Order the result ascending according to amount program items.

2) Cinema names (CI_NAME) and it's program (ie. F_NAME, DATE). The result set should contains also films without program.

3) Cinema addresses where at there is no "Forman" films in the program.

Если необходим перевод - скажите пожалуйста.
  • Вопрос задан
  • 234 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT `C`.`CI_NAME`, ISNULL(`P`.`CNT`, 0) AS `AMOUNT`
    FROM `CINEMA` AS `C`
    LEFT JOIN (
        SELECT `CI_NAME`, COUNT(*) AS `CNT`
            FROM `PROGRAM`
            GROUP BY `CI_NAME`
    ) AS `P` ON `P`.`CI_NAME` = `C`.`CI_NAME`
    WHERE (`CI_ADDRESS` LIKE '%Pilsner%')
    ORDER BY `AMOUNT`

SELECT `P`.`CI_NAME`, `F`.`F_NAME`, `P`.`DATE`
    FROM `FILMS` AS `F`
    LEFT JOIN `PROGRAM` AS `P` ON `P`.`F_NAME` = `F`.`F_NAME`
    ORDER BY `P`.`CI_NAME`, `P`.`DATE`

SELECT `C`.`CI_ADRESS`
    FROM `CINEMA` AS `C`
    LEFT JOIN (
        SELECT DISTINCT `CI_NAME` 
            FROM `PROGRAM`
            WHERE `F_NAME` = 'Forman'
    ) AS `P` ON `P`.`CI_NAME` = `C`.`CI_NAME`
    WHERE `P`.`CI_NAME` IS NULL
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы