loading..
Русский    English
21:51
листать

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

Избыточность решения 1.12.2 можно устранить, если вообще убрать подзапрос, а соединение выполнить между таблицами P и L. При этом запрос получится не только компактным, но и легко читаемым и, что не менее важно, более эффективным.

Еще один пример тяжело читаемого запроса, который был бы правильным, будь номер модели (model) числовым.
Консоль
Выполнить
  1. SELECT MAX(model1), MIN(model2), MAX(speed), MAX(ram)
  2. FROM (SELECT pc1.model AS model1, pc2.model AS model2, pc1.speed, pc2.ram,
  3.              CASE WHEN CAST(pc1.model AS NUMERIC(6,2)) >
  4.                        CAST(pc2.model AS NUMERIC(6,2))
  5.                   THEN pc1.model+pc2.model 
  6.                   ELSE pc2.model+pc1.model 
  7.              END AS sm
  8.       FROM PC pc1, PC pc2
  9.       WHERE pc1.speed = pc2.speed AND
  10.             pc1.ram = pc2.ram AND
  11.             pc1.model <> pc2.model
  12.       ) a
  13. GROUP BY a.sm;

Однако тип данных VARCHAR(50) подразумевает наличие произвольных символов, наличие которых имеет место в проверочной базе данных (скажем, T-64). На этих данных преобразование типа

  1. CAST(pc1.model AS NUMERIC(6,2))
будет вызывать ошибку.

Я считаю, что это хороший пример того, как не следует писать запросы. Как же следует их писать? Загляните на форум задачи, когда её решите, там вы найдете лучшие образцы.

Вернуться к обсуждению упражнения 16

Решить задачу на SQL-EX.RU

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