Простые запросы и правила их выполнения 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Простые запросы и правила их выполнения



 

Часто возникает необходимость в выборе информации из нескольких таблиц - одним из вариантов осуществления такого вывода является объединение результатов нескольких запросов, выполняющихся независимо друг от друга.

Для размещения нескольких запросов вместе и объединения их вывода используют предложение UNION. Предложение UNION объединяет вывод двух или более SQL запросов в единый набор строк и столбцов. Например, для получения списка всех студентов и преподавателей, фамилии которых заключены между буквами 'К' и 'С', можно воспользоваться запросом:

SELECT SFAM, SIMA, SOTCH FROM STUDENTS

WHERE SFAM BETWEEN 'K' AND 'C' UNION

SELECT TEAM, TIMA, TOTCH FROM TEACHERS WHERE TFAM BETWEEN 'К' AND 'С';

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

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

Здесь имеется дублирование значений SFAM = Поляков, потому что не указано, чтобы SQL устранил дубликаты. Однако, при использовании UNION в комбинации этого запроса с ему подобным в таблице преподавателей, избыточная информация будет устранена

SELECT SFAM FROM STUDENTS UNION

SELECT TFAM FROM TEACHERS;

Иногда возникает необходимость вставлять константы и выражения в предложения SELECT, используемые с UNION, что является полезной возможностью. Очевидно, что используемые константы и выражения должны встречать совместимые типы данных. Это свойство полезно, например, чтобы отобразить комментарии, указывающие на то, какой запрос вывел данную строку. Модифицируем предыдущий запрос следующим образом:

SELECT 'Студент' SFAM FROM STUDENTS UNION

SELECT 'Преподаватель ' TFAM FROM TEACHERS;

вывод этого запроса следующий:

Студент Гриценко

Студент Котенко

Студент Нагорный

Преподаватель Викулина

Преподаватель Костыркин

Преподаватель Казанко

Возникла необходимость в добавлении дополнительных пробелов в строку 'Студент', чтобы сделать ее совпадающей по длине со строкой 'Преподаватель'.

Теперь необходимо оговорить то, что данные многочисленных запросов будут выводиться в каком-то особом порядке. Для этого можно использовать предложение ORDER BY, чтобы упорядочить вывод из объединения, аналогично тому, как это делается в однотабличных запросах.

Допускается упорядочивать вывод с помощью нескольких полей, одно внутри другого и указывать фразы ASC или DESC для каждого, точно так же, как это делается для одиночных запросов. Необходимо заметить, что номер 2 в предложении ORDER BY указывает, какой столбец из предложения SELECT будет упорядочен, т.к. столбцы объединения - это столбцы вывода, а значит, они не имеют имен и должны определяться по номеру.

Кроме того, при выполнении объединения более чем двух запросов, можно использовать круглые скобки для того, чтобы определить порядок оценки.

Это может принципиально повлиять на результаты запроса, так как объединение осуществляется сначала внутри скобок, а потом - снаружи. Таким способом, например, запросы могут быть скомбинированы для удаления одних дубликатов и оставления других.



Поделиться:


Последнее изменение этой страницы: 2017-01-25; просмотров: 170; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.221.165.246 (0.005 с.)