The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

SQL запросы выборки данных из таблиц (SELECT) (perl example sql select mysql)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: perl, example, sql, select, mysql,  (найти похожие документы)
Date: Thu, 20 Jul 2000 17:13:33 +0400 (MSD) From: MailList: Perl в примерах Subject: SQL запросы выборки данных из таблиц (SELECT) ----------------------------------------------------------- PERL В ПРИМЕРАХ http://pl.agava.ru N 9 (20.07.2000) ----------------------------------------------------------- Запросы выборки данных из таблиц В этой статье рассмотрены запросы типа SELECT, синаксис этих запросов, а также синтаксис операции JOIN в MySQL. Общий вид запроса SELECT таков: SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [HIGH_PRIORITY] [DISTINCT | DISTINCTROW | ALL] искомые_поля,... [INTO {OUTFILE | DUMPFILE} 'file_name' export_options] [FROM список_таблиц [WHERE условное_выражение] [GROUP BY список_полей] [HAVING условное_выражение] [ORDER BY {натуральное_число | название_поля | формула} [ASC | DESC] ,...] [LIMIT [отступ,] количество_строк] [PROCEDURE название_процедуры] ] где в квадратные скобки взяты те параметры/инструкции/разделы, которые являются необязательными. SELECT-запросы служат для получения данных из таблиц по заданным критериям. Также запросы SELECT могут использоваться для вычисления без доступа к данным: SELECT 1 + 1; (выведет 2) Все элементы запроса должны быть представлены в запросе именно в таком порядке, в котором они перечислены выше. Вот главные замечания относительно построения запросов SELECT. Искомому выражению можно назначить псеводним (alias). Этот псевдоним будет использоваться в названии колонки в представлении результата и в разделах ORDER BY и HAVING. SELECT person, MAX(items) as maximum FROM persons GROUP BY person ORDER BY maximum Также можно задавать псевдонимы для таблиц. Это довольно полезно при выполнении операции JOIN (см. ниже). SELECT * FROM table1 as a, table2 as b WHERE a.field_name = b.field_name В разделах ORDER BY и GROUP BY возможно использование не только названий таблиц, но и их псевдонимов (alias) или их порядковых номеров в перечислении их в разделе FROM. Для задания направления сортировки при помощи ORDER BY используются инструкции ASC (в порядке возростания) и DESC (в порядке убывания). SELECT person, MAX(items) as maximum FROM persons GROUP BY person ORDER BY maximum DESC Не следует путать конструкции WHERE и HAVING. Вторая используется как правило для наложения условия на значения, полученные вычислением агрегатных функций (MAX, SUM и пр.), в то время как условия отсноительо значений полей следует указывать в разделе WHERE. SELECT * FROM table_name HAVING field_name = value следует писать как SELECT * FROM table_name WHERE field_name = value Инструкция HIGH_PRIORITY обеспечивает запросу приоритет, высший по сравнению с запросами на изменение таблицы, и будет выполнен, даже если в очереди на заблокированную на чтение таблицу стоит такой запрос. Инструкция SQL_BIG_RESULT указывет MySQL, что результат выполнения запроса включает большое количество строк, что заставляет MySQL использовать для него временные таблицы, расположенные на жестком диске. Это полезно в запросах, использующих GROUP BY и DISTINCT, поскольку в таких ситуациях MySQL произведет сортировку результата вместо того, чтобы создавать таблицу с требуемым в GROUP BY (DISTINCT) ключом. Инструкция SQL_BUFFER_RESULT указывет MySQL, что результат следует разместить во временных таблицах, что поможет MySQL быстро снять блокировки с таблиц и работать более эффективно в тех случаях, когда возвращение результата может занимать много времени. SQL_SMALL_RESULT указывет на то, что возвращаемый набор включает небольшое количество данных, то есть MySQL следует использовать быстрые временные тыблицы вместо того, чтобы проделывать сортировку данных. STRAIGHT_JOIN указывет на то, что таблицы должны быть объединены в том порядку, в котором они перечислены. Это ускоряет выполнение запросов в тех случаях, когдя оптимизатор MySQL выполняет объединение неоптимальным образом. Раздел LIMIT используется для того, чтобы ограничить количество возвращаемых дынных. SELECT * FROM table_name LIMIT 5, 10; Этот запрос выведет строки результата с 6-й по 15-ю (параметр отступ отсчитывается с нуля). По умолчанию отступ равен 0. SELECT * FROM table_name LIMIT 10; В результате выполнения запроса SELECT ... INTO OUTFILE 'название_файла' возвращаемые данные будут записаны в указанный файл. Для выполнения таких запросов необходимо, чтобы небыло файла с таким именем, кроме того необходимы права на создание и запись в файл. MySQL поддерживает несколько видов операции JOIN - объединения таблиц. Вот как может выглядеть раздел FROM: table_reference, table_reference table_reference [CROSS] JOIN table_reference table_reference INNER JOIN table_reference table_reference STRAIGHT_JOIN table_reference table_reference LEFT [OUTER] JOIN table_reference ON conditional_expr table_reference LEFT [OUTER] JOIN table_reference USING (column_list) table_reference NATURAL LEFT [OUTER] JOIN table_reference где table_reference - это описание таблицы (ее имя, возможно с псевдонимом и пр.). При указании псевдонима (alias) таблицы присутствие AS необязательно. INNER JOIN и запятая выполняют одно и то же действие - полное объединение указанных таблиц. Условие ON - это условие в той форме, в которой условия могут встречаться в разделе WHERE. Если при использовании LEFT JOIN в правой таблице не найдено ни одной подходящей строки, вместо этой таблицы используется строка со всеми значениями установлеными в NULL. Инструкция USING укзаывет на поля, которые должны присутствовать в обеих таблицах. A LEFT JOIN B USING (C1,C2,C3,...) это то же самое, что и A.C1=B.C1 AND A.C2=B.C2 AND A.C3=B.C3,... Использование NATURAL LEFT JOIN эквивалентно совместному использованию LEFT JOIN и USING. STRAIGHT_JOIN выполняет то же самое, что и JOIN, за исключением того, что в даном случае левая таблица всегда считывается перед правой. Это помогает устранить ошибки в порядке выбора таблиц оптимизатором. SELECT * FROM table1,table2 WHERE table1.id=table2.id; SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id; SELECT * FROM table1 LEFT JOIN table2 USING (id); SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id LEFT JOIN table3 ON table2.id=table3.id; SELECT * FROM table1 USE INDEX (key1,key2) WHERE key1=1 AND key2=2 AND key3=3; SELECT * FROM table1 IGNORE INDEX (key3) WHERE key1=1 AND key2=2 AND key3=3; ----------------------------------------------------------- Эту и другие статьи можно прочитать на http://pl.agava.ru ----------------------------------------------------------- В нашем форуме (http://pl.agava.ru/cgi-bin/forum/config.pl) Вы можете получить ответы на интересующие Вас вопросы по теме Perl, CGI и баз данных. Наиболее активные участники форума будут отмечены на нашем сайте. Участники, которые регулярно отвечают на вопросы форума и делятся своим опытом, будут награждаться показами в ведущих росийских и зарубежных рекламных сетях. ----------------------------------------------------------- На нашем сервере открылся новый форум "Работа для Web программистов и дизайнеров", который расположен по адресу http://pl.agava.ru/cgi-bin/forum/job.pl Здесь Вы можете размещать свои резюме, предложения о сотрудничестве, информацию о вакансиях для web программистов и дизайнеров. ----------------------------------------------------------- (c) Perl в примерах 2000

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру