loading..
Русский    English
20:41
листать

Пересечение и разность стр. 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

Bookmark and Share
Страницы: 1 2 3 4
Тэги:
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 INNER JOIN insert INTERSECT IS NOT NULL IS NULL ISNULL laptop LEFT LEFT OUTER JOIN LEN maker MAX Больше тэгов
Учебник обновлялся
несколько дней назад
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.
Rambler's Top100