Синтаксис оператора select

Объединение нескольких запросов в один

Напоминаем, что реляционная операция объединение позволяет получить отношение, состоящее из всех строк, входящих в одно или оба объединяемых отношений. Но при этом исходные отношения или их объединяемые проекции должны быть совместимыми по объединению. Для SQL это означает, что две таблицы можно объединять тогда и только тогда, когда:

  1. они имеют одинаковое число столбцов, например, m;
  2. для всех i (i = 1, 2,..., m) i-й столбец первой таблицы и i-й столбец второй таблицы имеют в точности одинаковый тип данных.
Пример 4.40 Получить всех продавцов и заказчиков, размещенных в Лондоне и вывести их как единое целое: SELECT snum, sname FROM Продавцы WHERE city = 'Лондон' UNION SELECT cnum, cname FROM Заказчики WHERE city = 'Лондон'; Замечание. Заголовки столбца при выводе исключены, потому что ни один из столбцов, выведенных объединением, не был извлечен непосредственно из только одной таблицы.Кроме того, обратите внимание, что только последний запрос заканчивается точкой с запятой. Отсутствие точки с запятой дает понять SQL, что имеется еще один или более запросов.UNION будет автоматически исключать дубликаты строк из вывода. Это нечто несвойственное для SQL, так как одиночные запросы обычно содержат DISTINCT чтобы устранять дубликаты. Например, вывод следующего запроса не будет содержать дубликатов: SELECT snum, city FROM Заказчики UNION SELECT snum, city FROM Продавцы; Пример 4.41 Предположим, что вы должны сделать отчет о том, какие продавцы оформляют наибольшие и наименьшие порядки по датам. Можно объединить два запроса, вставив туда текст, чтобы различать вывод для каждого из них: SELECT a.snum, sname, onum, ‘наибольший на’, odate FROM Продавцы a, Порядкиs b WHERE a.snum = b.snum AND b.amt = (SELECT MAX (amt) FROM Порядки c WHERE c.odate = b.odate) UNIONSELECT a.snum, sname, onum, ‘наименьший на’, odate FROM Продавцы a, Порядкиs b WHERE a.snum = b.snum AND b.amt = (SELECT MIN (amt) FROM Порядки c WHERE c.odate = b.odate);Приведем общий синтаксис оператора SELECT:SELECT * | { [ DISTINCT | ALL] <список выбора >,….} FROM { < имя_таблицы> [ < псевдоним > ] }.,.. [ WHERE <предикат>] [ GROUP BY <имя_столбца>.,..] [ HAVING <предикат>] [ ORDER BY <имя_столбца>.,. | <номер_столбца>.,..] [ { UNION [ALL] SELECT * | { [DISTINCT | ALL] < < выражение >.,..}

FROM.] } ]...;

Элементы, используемые в команде SELECT:

< список выбора > - выражения, включающее имена столбцов, функции, знаки операций

<предикат>::=< выражение1 > < оператор> < выражение2> | [NOT] EXISTS< выражение2 >

< оператор>::= > | < | >= | <= | <> | = | IN | LIKE | BETWEEN …AND | OR | AND | NOT

< выражение2 >::= < выражение1> | [ANY | SOME | ALL ] <подзапрос>

<подзапрос>::= (SELECT * | { [ DISTINCT | ALL] < выражение >,….} FROM { < имя_таблицы> [ < псевдоним > ] }.,.. [ WHERE <предикат>] …)

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: