loading..
Русский    English
13:24
листать

Упражнение 17 (подсказки и решения)

Итак, избавляемся от декартового произведения. Для этого убираем таблицу PC из предложения FROM, а таблицы Product и Laptop соединяем по столбцу model:

Консоль
Выполнить
  1. SELECT DISTINCT type, Laptop.model, speed
  2. FROM Laptop, Product
  3. WHERE Product.model = Laptop.model AND
  4.       Laptop.speed < (SELECT MIN(speed) FROM PC);

Условие p.type = 'laptop' уже излишне, так как внутреннее соединение будет содержать модели только данного типа. Оказывается, что можно избавиться и от соединения, поскольку таблица Product используется только для того, чтобы в результирующем наборе вывести тип продукта. Но тип продукта заранее известен — это портативный компьютер, поэтому мы может просто применить выражение (константу) для указания типа, убрав соединение:

Консоль
Выполнить
  1. SELECT DISTINCT 'Laptop', model, speed
  2. FROM Laptop
  3. WHERE speed < (SELECT MIN(speed) FROM PC);

Заметим, что данное решение будет справедливо только в том случае, если в таблице Laptop будут находиться изделия с типом Laptop. Для нашей базы данных это условие выполняется, т. к. имеется всего три типа продукции и соответственно три таблицы. Поэтому нарушение данного условия может быть связано только с изменением структуры, что, впрочем, тоже следует иметь в виду при разработке приложений со встроенными SQL-запросами.

Перейти к обсуждению упражнения 17

Решить упражнение на SQL-EX.RU


Bookmark and Share
Тэги:
ALL AND AUTO_INCREMENT AVG battles CASE CAST CHAR CHARINDEX CHECK classes COALESCE Convert COUNT CROSS APPLY CTE DATEDIFF DATENAME DATEPART DATETIME DDL DEFAULT DELETE DISTINCT DML EXCEPT EXISTS EXTRACT FROM FULL JOIN GROUP BY Guadalcanal HAVING IDENTITY IN INNER JOIN insert INTERSECT IS NOT NULL ISNULL laptop LEFT LEFT OUTER JOIN LEN maker MAX MIN MONTH MySQL NOT Больше тэгов
Учебник обновлялся
вчера
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.
Rambler's Top100