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

Использование в запросе нескольких источников записей стр. 2

Пример 5.6.1

Найти номер модели и производителя ПК, имеющих цену менее $600:

Консоль
Выполнить
  1. SELECT DISTINCT PC.model, maker
  2. FROM PC, Product
  3. WHERE PC.model = Product.model AND
  4. price < 600;

В результате каждая модель одного и того же производителя выводится только один раз:

model maker
1232 A
1260 E

Иногда в предложении FROM требуется указать одну и ту же таблицу несколько раз. В этом случае обязательным является переименование.

Пример 5.6.2

Вывести пары моделей, имеющих одинаковые цены:

Консоль
Выполнить
  1. SELECT DISTINCT A.model AS model_1, B.model AS model_2
  2. FROM PC AS A, PC B
  3. WHERE A.price = B.price AND
  4. A.model < B.model;

Здесь условие a.model < b.model используется для того, чтобы не выводились одинаковые пары, отличающиеся только перестановкой, например: {1232, 1233} и {1233, 1232}. DISTINCT применяется для того, чтобы исключить одинаковые строки, поскольку в таблице PC имеются модели с одинаковыми номерами по одной и той же цене. В результате получим следующую таблицу:

model_1 model_2
1232 1233
1232 1260

Переименование также является обязательным, если в предложении FROM используется подзапрос, так как, в противном случае, у нас нет возможности уточнения имени столбца из подзапроса. Так, первый пример можно переписать следующим образом:

Консоль
Выполнить
  1. SELECT DISTINCT PC.model, maker
  2. FROM PC, (SELECT maker, model
  3. FROM Product
  4. ) AS Prod
  5. WHERE PC.model = Prod.model AND
  6. price < 600;

Обратите внимание, что в этом случае в других предложениях оператора SELECT уже нельзя использовать квалификатор Product, поскольку таблица Product уже не используется. Вместо него используется псевдоним Prod. Кроме того, ссылаться извне теперь можно только на те столбцы таблицы Product, которые перечислены в подзапросе.

За псевдонимом производного табличного выражения может в скобках стоять список имен столбцов, которые будут использоваться вместо имен табличного выражения. Порядок имен должен, естественно, соответствовать списку столбцов табличного выражения (в нашем случае - списку в предложении SELECT). Это способ позволяет избежать неоднозначности имен и, как следствие, необходимости их уточнения. Вот как может выглядеть предыдущий пример:

Консоль
Выполнить
  1. SELECT DISTINCT model, maker
  2. FROM PC, (SELECT maker, model
  3. FROM Product
  4. ) AS Prod(maker, model_1)
  5. WHERE model = model_1 AND
  6. price < 600;

Рекомендуемые упражнения: 16, 17, 34, 96

Страницы: 1 2
Тэги:
ALL AVG battles CASE CAST CHAR CHARINDEX classes COALESCE Convert COUNT CTE DATEDIFF DATEPART DATETIME DELETE DISTINCT EXCEPT EXISTS EXTRACT FROM FULL JOIN GROUP BY Guadalcanal HAVING IN INNER JOIN insert INTERSECT ISNULL laptop LEFT LEFT OUTER JOIN LEN maker MAX MIN MySQL NOT IN NULL ORDER BY Outcome outcomes OVER PARTITION BY pc PIVOT PostgreSQL printer product Больше тэгов
Учебник обновлялся
несколько дней назад
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.
Rambler's Top100