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

Использование в запросе нескольких источников записей стр. 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, 108

Bookmark and Share
Страницы: 1 2
Тэги:
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]
Перепечатка материалов сайта возможна только с разрешения автора.