Как было сказано выше, оператор select возвращает результат в виде таблицы. Если формат результирующих таблиц (число, порядок следования и тип столбцов) совпадает, то возможно объединение результатов выполнения двух операторов select в одну результирующую таблицу. Это достигается использованием оператора union.
Пусть имеются два запроса, представленные в листинге 7.38.
Объединить результаты из этих двух таблиц можно, соединив два запроса select при помощи ключевого слова union, как это продемонстрировано в листинге 7.39.
Во втором запросе select, производящем выборку из таблицы orders, к значению первичного ключа id_orders добавляется значение 5, таким образом, все значения в результирующей таблице становятся уникальными. Однако если результирующая таблица содержит повторяющиеся строки, СУБД MySQL автоматически отбрасывает дубликаты (листинг 7.40)
Как видно из листинга 7.40, вместо десяти записей выводится только пять. Изменить поведение по умолчанию можно при помощи ключевого слова all, которое добавляется после оператора union. Использование union all требует, чтобы возвращались все строки из обеих результирующих таблиц.
Для формы union all существует противоположенный оператор union distinct, ho т. к. оператор union по умолчанию отбрасывает не уникальные столбцы, ключевое слово distinct часто опускают.
Результирующую таблицу, получаемую в результате выполнения оператора select, можно сохранить в текстовый файл. Это позволяет более внимательно изучить результаты, подвергнуть их дальнейшей обработки при помощи внешней программы или вставить их в таблицу при помощи оператора load data infile.
Для сохранения результатов в текстовом файле предназначен оператор select в форме select into outfile ' file_name'. Эта разновидность команды осуществляет запись выбранных строк в файл, указанный в file_name.
Выполнение SQL-запроса, показанного в листинге 7.42, приведет к созданию файла text.sql в директории C:/mysqI5/data/shop.
Важной деталью при составлении запроса, сохраняющего результат SELECT-запроса во внешнем текстовом файле, является то, что предложение into outfile располагаeся до ключевого слова from. Открытие данного файла в текстовом редакторе Notepad) Windows приведет к тому, что перевод строк не производится, а вместо символа перевода строки присутствует квадратик, которым обозначаются нечитаемые символы. Здесь, так же как и в случае оператора load data infile, по умолчанию принят UNIX-формат, т. е. перевод строк осуществляется только символом передачи строки \n, без добавления символа перевод каретки /r/n который требует windows.
Точно так же, как и для оператора load data infile, формат текстового файла задается при помощи ключевых слов:
Ключевое слово lines позволяет задать символ начала и конца строки при помощи инструкций starting by и terminated by соответственно. Для того чтобы строка начиналась со слова "table ", а заканчивалась переводом строки в стиле Windows —\r\n необходимо выполнить запрос, представленный в листинге 7.43.
В результате будет создан файл следующего содержания:
Конструкция order by id_catalog обеспечивает сортировку по первому полю таблицы catalogs.
Ключевое слово fields позволяет задать порядок обработки полей, совместно с ним применяются следующие конструкции:
Выполнение запроса из листинга 7.44 приводит к созданию файла text.sql следующего содержания: