loading..
Русский    English
05:19
листать

Пересечение и разность стр. 1

В стандарте языка SQL имеются предложения оператора SELECT для выполнения операций пересечения и разности результатов запросов-операндов. Этими предложениями являются INTERSECT [ALL] (пересечение) и EXCEPT [ALL] (разность), которые работают аналогично предложению UNION. В результирующий набор попадают только те строки, которые присутствуют в обоих запросах (INTERSECT) или только те строки первого запроса, которые отсутствуют во втором (EXCEPT). При этом оба запроса, участвующих в операции, должны иметь одинаковое число столбцов, и соответствующие столбцы должны иметь одинаковые (или неявно приводимые) типы данных. Имена столбцов результирующего набора формируются из заголовков первого запроса.

Если не используется ключевое слово ALL (по умолчанию подразумевается DISTINCT), то при выполнении операции автоматически устраняются дубликаты строк. Если указано ALL, то количество дублированных строк подчиняется следующим правилам (n1 - число дубликатов строк первого запроса, n2 - число дубликатов строк второго запроса):

  •  INTERSECT ALL: min(n1, n2)
  •  EXCEPT ALL: n1 - n2, если n1>n2.

Пример 5.7.3.

Найти корабли, которые присутствуют как в таблице Ships, так и в таблице Outcomes.

Консоль
Выполнить
  1. SELECT name FROM Ships
  2. INTERSECT
  3. SELECT ship FROM Outcomes;

В реляционной алгебре операция пересечения является коммутативной, поскольку она применима к отношениям с одинаковыми заголовками. Мы и в  Язык структурированных запросов) — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. SQL можем поменять запросы местами. Вышеприведенное решение даст тот же результат, что и следующее:

Консоль
Выполнить
  1. SELECT ship FROM Outcomes
  2. INTERSECT
  3. SELECT name FROM Ships;
за исключением заголовка. В первом случае единственный столбец будет иметь заголовок name, а во втором - ship. Поэтому запрос

Консоль
Выполнить
  1. SELECT name FROM (
  2. SELECT ship FROM Outcomes
  3. INTERSECT
  4. SELECT name FROM Ships
  5. ) x;
приведет к ошибке:

Invalid column name 'name'.

(неверное имя столбца 'name').

Рекомендуемые упражнения: 23, 38

Страницы: 1 2 3
Тэги:
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