Синтаксис оператора select - документація mysql 4, 5 російською мовою

Оператор SELECT має наступну структуру:

SELECT застосовується для вилучення рядків, обраних з однієї або декількох таблиць. Вираз select_expression задає стовпці, в яких необхідно проводити вибірку. Крім того, оператор SELECT можна використовувати для вилучення рядків, обчислених без посилання на будь-яку таблицю. наприклад:

При вказівці ключових слів слід точно дотримуватися порядку, вказаний вище. Наприклад, вираз HAVING повинне розташовуватися після всіх виразів GROUP BY і перед усіма виразами ORDER BY.

Використовуючи ключове слово AS. висловом в SELECT можна призначити назву. Ім'я користувача використовується в якості імені стовпця в даному виразі і може застосовуватися в ORDER BY або HAVING. наприклад:

Псевдоніми стовпців можна використовувати в вираженні WHERE. оскільки знаходяться в стовпцях величини на момент виконання WHERE можуть бути ще не визначені. Проблеми з alias.

Вираз FROM table_references задає таблиці, з яких належить витягувати рядки. Якщо вказано ім'я більш ніж однієї таблиці, слід виконати об'єднання. Інформацію про синтаксис об'єднання можна знайти в розділі Синтаксис оператора JOIN. Для кожної заданої таблиці за бажанням можна вказати псевдонім.

У версії MySQL 3.23.12 можна вказувати, які саме індекси (ключі) MySQL повинен застосовувати для добування інформації з таблиці. Це корисно, якщо оператор EXPLAIN (виводить інформацію про структуру та порядок виконання запиту SELECT), показує, що MySQL зі списку можливих індексів вибрав неправильний. Якщо потрібно. щоб для пошуку запису в таблиці застосовувався тільки один з можливих індексів, слід задати значення цього індексу в USE INDEX (key_list). Альтернативне вираз IGNORE INDEX (key_list) забороняє використання в MySQL даного конкретного індексу.

В MySQL 4.0.9 можна також вказувати FORCE INDEX. Це працює також, як і USE INDEX (key_list) але на додаток дає зрозуміти сервера що повне сканування таблиці буде ДУЖЕ дорогою операцією. Іншими словами, в цьому випадку сканування таблиці буде використано тільки тоді, коли не буде знайдено іншого способу використовувати один з даних індексів для пошуку записів в таблиці.

Вирази USE / IGNORE KEY є синонімами для USE / IGNORE INDEX.

Посилання на таблиці можуть даватися як tbl_name (в рамках поточної бази даних), або як dbname.tbl_name з тим, щоб чітко вказати базу даних.

Посилання на стовпці можуть задаватися у вигляді col_name. tbl_name.col_name або db_name.tbl_name.col_name. У виразах tbl_name або db_name.tbl_name немає необхідності вказувати префікс для посилань на стовпці в команді SELECT. якщо ці посилання не можна витлумачити неоднозначно. Імена баз даних, таблиць, стовпців, індекси псевдоніми. де наведені приклади неоднозначних випадків, для яких потрібні більш чіткі визначення посилань на стовпці.

Посилання на таблицю можна замінити псевдонімом, використовуючи tbl_name [AS] alias_name:

У виразах ORDER BY і GROUP BY для посилань на стовпці, вибрані для виведення інформації, можна використовувати або імена стовпців, або їх псевдоніми, або їх позиції (місця розташування). Нумерація позицій стовпців починається з 1:

Для того щоб сортування проводилася в зворотному порядку, в утвердженні ORDER BY до імені заданого стовпчика, в якому проводиться сортування, слід додати ключове слово DESC (регресний). За замовчуванням прийнята сортування в порядку зростання, який можна задати явно за допомогою ключового слова ASC.

У вираженні WHERE можна використовувати будь-яку з функцій, яка підтримується в MySQL. Функції, які використовуються в операторах SELECT і WHERE.

Вираз HAVING може посилатися на будь-який стовпець або псевдонім, згаданий в вираженні select_expression. HAVING відпрацьовується останнім, безпосередньо перед відсиланням даних клієнта, і без якої б то не було оптимізації. Не використовуйте цей вислів для визначення того, що повинно бути визначено в WHERE. Наприклад, не можна задати наступне оператор:

Замість цього слід задавати:

У версії MySQL 3.22.5 або більш пізньої можна також писати запити, як показано нижче:

У старіших версіях MySQL замість цього можна вказувати:

Параметри (опції) DISTINCT. DISTINCTROW і ALL вказують, повинні повертатися два записи. За замовчуванням встановлено параметр (ALL), тобто повертаються всі зустрічаються рядки. DISTINCT і DISTINCTROW є синонімами і вказують, що дублюються рядки в результуючому наборі даних повинні бути видалені.

Всі параметри, що починаються з SQL_. STRAIGHT_JOIN і HIGH_PRIORITY. являють собою розширення MySQL для ANSI SQL.

При вказівці параметра HIGH_PRIORITY містить його оператор SELECT матиме вищий пріоритет, ніж команда поновлення таблиці. Потрібно тільки використовувати цей параметр із запитами, які повинні виконуватися дуже швидко і відразу. Якщо таблиця заблокована для читання, то запит SELECT HIGH_PRIORITY буде виконуватися навіть при наявності команди поновлення, яка чекає на, поки таблиця звільниться.

Параметр SQL_BIG_RESULT можна використовувати з GROUP BY або DISTINCT. щоб повідомити оптимізатора, що результат буде містити велику кількість рядків. Якщо вказаний цей параметр, MySQL при необхідності буде безпосередньо використовувати тимчасові таблиці на диску, проте перевага надаватиметься не створення тимчасової таблиці з ключем за елементами GROUP BY. а сортування даних.

При вказівці параметра SQL_BUFFER_RESULT MySQL буде заносити результат в тимчасову таблицю. Таким чином MySQL отримує можливість раніше зняти блокування таблиці; це корисно також для випадків, коли для посилки результату клієнтові потрібно чимало часу.

Параметр SQL_SMALL_RESULT є опцією, специфічної для MySQL. Даний параметр можна використовувати з GROUP BY або DISTINCT. щоб повідомити оптимізатора, що результуючий набір даних буде невеликим. В цьому випадку MySQL для зберігання результуючої таблиці замість сортування буде використовувати швидкі тимчасові таблиці. У версії MySQL 3.23 вказувати цей параметр зазвичай немає необхідності.

Параметр SQL_CALC_FOUND_ROWS (MySQL 4.0.0 і новіший) повертає кількість рядків, які повернув би оператор SELECT. якби не було вказано LIMIT. Шукана кількість рядків можна отримати за допомогою SELECT FOUND_ROWS (). Різні функції.

Зауважте, що у версіях MySQL до 4.1.0 це не працює з LIMIT 0. який оптимізований для того, щоб негайно повернути нульовий результат. Як MySQL оптимізує LIMIT.

Параметр SQL_CACHE наказує MySQL зберігати результат запиту в кеші запитів при використанні QUERY_CACHE_TYPE = 2 (DEMAND). Кеш запитів в MySQL.

Параметр SQL_NO_CACHE забороняє MySQL зберігати результат запиту в кеші запитів. Кеш запитів в MySQL.

При використанні виразу GROUP BY рядка виводу будуть сортуватися відповідно до порядку, заданих в GROUP BY. - так, як якщо б застосовувалося вираз ORDER BY для всіх полів, зазначених у GROUP BY. В MySQL вираз GROUP BY розширено таким чином, що для нього можна також вказувати параметри ASC і DESC:

Розширений оператор GROUP BY в MySQL забезпечує, зокрема, можливість вибору полів, які не згаданих в вираженні GROUP BY. Якщо ваш запит не приносить очікуваних результатів, прочитайте, будь ласка, опис GROUP BY. Функції, які використовуються в операторах GROUP BY.

При вказівці параметра STRAIGHT_JOIN оптимізатор буде об'єднувати таблиці в тому порядку, в якому вони перераховані в вираженні FROM. Застосування даного параметра дозволяє збільшити швидкість виконання запиту, якщо оптимізатор виробляє об'єднання таблиць неоптимальним чином. Синтаксис оператора EXPLAIN (отримання інформації про SELECT).

Вираз LIMIT може використовуватися для обмеження кількості рядків, повернутих командою SELECT. LIMIT приймає один або два числових аргументу. Ці аргументи повинні бути цілочисельними константами. Якщо задані два аргументи, то перший вказує на початок першої повертається рядка, а другий задає максимальну кількість повертаються рядків. При цьому зміщення початкового рядка одно 0 (1):

Для сумісності з PostgreSQL MySQL також підтримує синтаксис LIMIT # OFFSET #.

Для того, щоб вибрати всі рядки з певного зміщення і до кінця результату, ви можете використовувати значення -1 в якості другого параметра:

Якщо заданий один аргумент, то він показує максимальну кількість повертаються рядків:

Іншими словами, LIMIT n еквівалентно LIMIT 0, n.

Оператор SELECT може бути представлений у формі SELECT. INTO OUTFILE 'file_name'. Цей різновид команди здійснює запис обраних рядків в файл, вказаний в file_name. Даний файл створюється на сервері і до цього не має існувати (таким чином, крім іншого, запобігає руйнування таблиць і файлів, таких як / etc / passwd). Для використання цієї форми команди SELECT необхідні привілеї FILE. Форма SELECT. INTO OUTFILE головним чином призначена для виконання дуже швидкого дампа таблиці на серверному комп'ютері. Команду SELECT. INTO OUTFILE не можна застосовувати, якщо необхідно створити результуючий файл на іншому хості, відмінному від серверного. У такому випадку для генерації потрібного файлу замість цієї команди слід використовувати деяку клієнтську програму на зразок mysqldump --tab або mysql -e "SELECT."> Outfile. Команда SELECT. INTO OUTFILE є додатковою по відношенню до LOAD DATA INFILE; синтаксис частини export_options цієї команди містить ті самі висловлювання FIELDS і LINES. які використовуються в команді LOAD DATA INFILE. Синтаксис оператора LOAD DATA INFILE. Слід враховувати, що в результуючому текстовому файлі оператор ESCAPED BY екранує тільки такі символи:

Символ оператора ESCAPED BY

Перший символ оператора FIELDS TERMINATED BY

Перший символ оператора LINES TERMINATED BY

Якщо замість INTO OUTFILE використовувати INTO DUMPFILE. то MySQL запише в файл тільки один рядок без символів завершення стовпців або рядків і без якого б то не було екранування. Це корисно для зберігання даних типу BLOB в файлі.

Слід враховувати, що будь-який файл, створений за допомогою INTO OUTFILE і INTO DUMPFILE. буде доступний для запису всім користувачам! Причина цього полягає в наступному: сервер MySQL не може створювати файл, що належить тільки якого-небудь активного користувача (ви ніколи не можете запустити mysqld від користувача root), відповідно, файл повинен бути доступний для запису всім користувачам.

При використанні FOR UPDATE з обробником таблиць, які підтримують блокування сторінок / рядків, вибрані рядки будуть заблоковані для запису.