Добрый вечер, вчера сдавал экзамен по БД.
Меня препод завалил на трех запросах из 9и, я категорически не понимаю, чего он хотел.
Если вас не затруднит, можете написать то, как по вашему будет их правильно представить?
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.
Для правильного вопроса надо знать половину ответа
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
Салават Ситдиков: Сорри, я там в условии ошибся, поправил. А логика там простая, к таблице кинотеатров присоединяем таблицу кинотеатров, где идёт указанный фильм, затем выбираем строки, где данные второй таблицы отсутствуют.
Rsa97:
Спасибо огромное!
Оказывается это я не шарю.
И один саб вопрос, если можно:
Когда вы джоините, в объединяемых таблицах же должно быть 1 общее поле.
На которое вы потом, таким образом опираетесь, да?
Андрей Петров: Не обязательно одно, и не обязательно общее. После ON идёт условие объединения, оно может быть любым или вообще отсутствовать, тогда на выходе будет полное декартово произведение таблиц. То есть `A` JOIN `B` ON <условие>
можно представить как