loading..
Русский    English
04:40
листать

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

Неверное решение 1.11.1 этой задачи легко поправить, если различать ПК не по номеру модели, а, как и положено, по первичному ключу — столбцу code:

Консоль
Выполнить
  1. SELECT DISTINCT t.hd
  2. FROM PC t
  3. WHERE EXISTS (SELECT *
  4.               FROM PC
  5.               WHERE pc.hd = t.hd AND
  6.                     pc.code <> t.code
  7.               );

Поскольку достаточно лишь двух ПК с одинаковыми жесткими дисками, можно использовать самосоединение таблицы PC по аналогичным условиям:

Консоль
Выполнить
  1. SELECT DISTINCT pc1.hd
  2. FROM PC pc1, PC pc2
  3. WHERE pc1.hd = pc2.hd AND
  4.       pc1.code <> pc2.code;

Однако наиболее оптимальным будет решение с группировкой и условиями отбора в предложении HAVING:

Консоль
Выполнить
  1. SELECT
  2. PC.hd FROM PC
  3. GROUP BY hd
  4. HAVING COUNT(hd) > 1;

Для полноты картины приведем еще одно решение, которое использует подзапрос с группировкой и которое по эффективности также уступает вышеприведенному.

Консоль
Выполнить
  1. SELECT DISTINCT hd
  2. FROM PC
  3. WHERE (SELECT COUNT(hd)
  4.        FROM PC pc2
  5.        WHERE pc2.hd = pc.hd
  6.        ) > 1;

Причина низкой эффективности рассмотренных решений с подзапросами заключается в том, что все они используют коррелирующий подзапрос, то есть подзапрос, который будет выполняться для каждой строки основного запроса. Запрос с соединением имеет самую низкую производительность. Это вполне понятно, так как операции соединения весьма затратные, несмотря на достаточно эффективные алгоритмы их реализации [5].

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

Решить задачу на 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 Больше тэгов
Учебник обновлялся
месяц назад
https://exchangesumo.com/obmen/WMG-LTC/
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.