|
Программирование >> Создание клиентов mysql
Полный сп исок инструкций 235 Инструкция вычисляет выражения, указанные в списке возвращаемхх столбцов. В выражения могут входить литералы, переменные, функции и столбцы. Последние относятся к таблицам, перечисленным в предложении FROM. Результатом запроса будет таблица извлеченных записей, содержащая в качестве заголовка названия столбцов. На столбцы сстлаются по имени. Если возникает неоднозначность, необходимо также указывать имя таблицы и базы данных. Полное имя столбца состоит из имени базы данных, имени таблицы и короткого имени столбца, разделенных точками. Таблицам могут быть назначены псевдонимы в предложении FROM, чтобы полные имена столбцов получались короче. Каждому выражению в списке возвращаемых столбцов тоже может быть присвоен псевдоним с помощью предложения AS. Этот псевдоним появится в заголовке возвращаемой таблицы. Благодаря псевдониму на выражение можно ссылаться в других предложениях инструкции SELECT, например GROUP BY. Если псевдоним представляет собой несколько слов с пробелами, требуются кавычки (листинг 13.35). SELECT ШW О AS -Current Time Псевдоним отдельного столбца может упоминаться в любой части инструкции SELECT. Псевдонимы выражений запрещены в предложении WHERE. Флаг DISTINCT указывает на необходимость удаления дублирующихся записей из таблицы результатов. В данном случае дубликатами считаются такие записи, которые имеют одинаковые значения во всех столбцах таблицы результатов. Речь не идет о проверке первичного ключа или ограничения уникальности. Например, если запросить значения поля Возраст таблицы сотрудников, то наверняка некоторые значения будут одинаковыми, хотя в исходной таблице все записи различаются по идентификатору. DISTINCTROW - это синоним флага DISTINCT. Флаг ALL разрешает появление дубликатов и установлен по умолчанию. Флаг HIGHPRIORITY означает принудительное выполнение запроса, даже если имеется отложенная инструкция UPDATE. Обычно операции обновления выполняются в первую очередь. Флаг SQL BIG RESULT заставляет программу MSQL созда вать в случае необходимости временные таблицы на диске. Это требуется для запросов к большому числу таблиц или запросов, возвращающих большую таблицу результатов, особенно если ее нужно сортировать при наличии флага DISTINCT или предложения ORDER BY. Флаг SQL SMALL RESULT говорит о том, что временные таблицы должны создаваться в памяти. В новых версиях MySQL этот флаг не нужен. Флаг SQL BUFFER RESULT заставляет предварительно помещать результаты во временную таблицу, а не сразу же посылать их клиенту. Это позволяет быстрее освобождать таблицы, участвующие в запросе. Флаг STRAIGHT JOIN говорит о том, что таблицы должны включаться в объединение в том порядке, в котором они перечислены в предложении FROM. В предложении INTO задается файл, куда должна быть записана таблица результатов. Полный формат этого предложения таков: INT OTFILE №FILE} файл [FIELDS [TERMINATED BY разделитель] [ [OPTIONALLY] ENCLOSED BY ограждаютй символ] [ESCAPED W{управляюшй символ][ [LINES TERMINATED BY признак конца строки] Поскольку запись в файл осуществляется на сервере, необходимо иметь привилегию FILE. Более того, запрещается перезапис1вать существующий файл. Файл, созданный в режиме OUTFILE, можно будет загрузить с помощью инструкции LOAD DATA INFILE (см. выше). Режим DUMPFILE предназначен для записи столбцов типа BLOB или TEXT. В этом режиме запрос должен возвращать одну запись с одним-единственным полем. Управляющие символы в данном случае не используются. В предложении FROM указываются таблицы, из которых извлекаются данные. Здесь может стоять либо список таблиц, разделенных запятыми, либо одна из показанных ниже спецификаций объединения: таблица [CROSS] JOIN таблица таблица STRAIGHtJOIN таблица таблица INNER JOIN таблица [ {ON условие I USING (столбец, ...)}] таблица {LEFT RIGHT} [OUTER] lOIN таблица [ {ON условие I USING (столбец, ...)}] таблица NATURAL [{LEFT RIGHT) [OUTER]] lOIN таблица В операции объединения могут участвовать таблицы стандартной базы данных, таблицы заданной базы данных, а также виртуальная таблица, созданная в левой части объединения. В последнем случае создается цепочка объединений. Вспомните из главы 5, Реляционная модель , что результатом объединения двух таблиц будет новая таблица. ципе, она существует лишь до тех пор, пока выполняется инструкция SELECT, но вданном контексте на нее можно ссылаться как на настоящую таблицу, т.е. справа от нее может стоять оператор объединения. Синтаксис табличной ссылки таков: [база даннык.] таблица AS псевдоним [USE INDEX (индекс, ...)] [IGNORE INDEX (индекс. .) ] Перед именем таблицы может стоять имя базы данных. Предложение AS задает псевдоним таблицы. Этот псевдоним можно использовать во всех остальных предложениях инструкции, в частности в операциях объединения, в условиях отбора, в списке возвращаем1х столбцов и т.д. Предложение USE INDEX заставляет программу MySQL использовать указанные индексы, если это возможно, а предложение IGNORE INDEX, наоборот, запрещает некоторые индексы. Эти подсказки позволяют повысить производительность запроса. Операция CROSS JOIN создает произведение таблиц. В этом случае каждая строка левой таблицы по очереди объединяется с каждой строкой правой таблицы и ся в таблицу произведения. Операция приводит тем же результатам. В листинге 13.36 выполняется едипение таблицы, т.е. создается произведение двух копий одной и той же таблицы. Если в исходной таблице 4 строки, то в таб-.ПИце произведения их будет 16. Полный список инструкций 237 SELECT tl.Name, t2.Name FROM team tl JOIN team t2 Операция INNER JOIN включает в таблицу результатов только те строки таблицы произведения, которые удовлетворяют определенному критерию. Это называется внутренним объединением. Предложение USING задает столбцы, включаемые в объединение. Эти столбцы должны называться одинаково в обеих таблицах. В листинге 13.37 таблица игроков (player) объединяется с таблицей команд (team) по столбцу идентификатора команды SELECT player.Name, team.Name FROM player INNER JOIN team USING (TeamID) Предложение ON заменяет предложение WHERE и может содержать любые критерии сравнения строк двух объединяемых таблиц. Чаще всего таблицы объединяются по равенству двух столбцов, как показано в листинге 13.38. Обратите внимание на различные имена столбцов. SELECT player.Name, team.Name FROM player INNER JOIN team ON (player.Team = team. ID) В левое внешнее объединение (LEFT JOIN) включаются все записи внутреннего объединения плюс строки первой таблицы, которые не имеют связи ни с одной строкой второй таблиц!. Правое внешнее объединение (RIGHT JOIN) строится так же, но относительно правой, а не левой таблицы. Строки, которым не найдено соответствие, дополняются значениями NULL. Ключевое слово OUTER является необязательным. Оно предназначено для сохранения совместимости с другими СУБД. Естественное объединение (NATURAL JOIN) характерно тем, что сравниваются только одноименные столбцы двух таблиц, причем выполняется их проверка на равенство. Обычно это действительно самый естественный тип объединения, так как не нужно указывать ни имена столбцов, ни условие отбора. По умолчанию создается внутреннее естественное объединение, но с помощью ключевых слов LEFT и RIGHT его можно сделать левым или правым внешним объединением. Некоторые предложения инструкции SELECT доступны лишь тогда, когда присутствует предложение FROM. Они выполняются в строго определенном порядке: сначала - WHERE, затем - GROUP BY, потом - HAVING и, наконец - ORDER BY.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |