ВЫБОР
Синтаксис
SELECT
[ALL | DISTINCT | DISTINCTROW]
[HIGH_PRIORITY]
[STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
select_expr [, select_expr ...]
[ FROM table_references
[WHERE where_condition]
[GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]]
[HAVING where_condition]
[ORDER BY {col_name | expr | position} [ASC | DESC], ...]
[LIMIT {[offset,] row_count | row_count OFFSET offset [ROWS EXAMINED rows_limit] } |
[OFFSET start { ROW | ROWS }]
[FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } { ONLY | WITH TIES }] ]
procedure|[PROCEDURE procedure_name(argument_list)]
[INTO OUTFILE 'file_name' [CHARACTER SET charset_name] [export_options] |
INTO DUMPFILE 'file_name' | INTO var_name [, var_name] ]
[FOR UPDATE lock_option | LOCK IN SHARE MODE lock_option]
export_options:
[{FIELDS | COLUMNS}
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char']
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
lock_option:
[WAIT n | NOWAIT | SKIP LOCKED] Описание
SELECT используется для извлечения строк, выбранных из одной или нескольких таблиц, и может включать операторы ОБЪЕДИНЕНИЕ и подзапросы.
- Каждый выражение select_expr указывает столбец или данные, которые вы хотите извлечь. У вас должен быть как минимум один выражение выбора. См. Выражения выбора ниже.
- Вставка
FROMуказывает таблицу или таблицы, из которых нужно извлечь строки. Используйте имя одной таблицы или выражениеJOIN. См. СОЕДИНЕНИЕ для получения подробных сведений. Если таблица не задействована, можно указать FROM DUAL.
- Каждая таблица также может быть указана как
db_name.tabl_name. Каждый столбец также может быть указан какtbl_name.col_nameили даже какdb_name.tbl_name.col_name. Это позволяет писать запросы, которые включают несколько баз данных. См. Квалификаторы идентификаторов для получения подробной информации о синтаксисе.
- Вставка
WHERE, если она указана, указывает условие или условия, которым должны удовлетворять строки, чтобы быть выбранными.where_condition- это выражение, которое вычисляется как истинное для каждой строки, которая должна быть выбрана. Если нет условия WHERE, запрос выбирает все строки.- В условии
WHEREвы можете использовать любые функции и операторы, которые поддерживает MariaDB, за исключением агрегатных (суммарных) функций. См. Функции и операторы и Функции и модификаторы для использования с GROUP BY (агрегирование).
- В условии
- Используйте оператор ORDER BY для упорядочивания результатов.
- Используйте оператор LIMIT, чтобы ограничить результаты только определенным количеством строк, необязательно со смещением.
- Используйте операторы GROUP BY и
HAVINGдля группировки строк, когда они имеют общие столбцы или вычисленные значения.
ВЫБОР также может использоваться для извлечения вычисленных строк без ссылки на какую-либо таблицу.
Выражения выбора
Оператор SELECT должен содержать одно или несколько выражений выбора, разделенных запятыми. Каждое выражение выбора может быть одним из следующих:
- Имя столбца.
- Любое выражение, использующее функции и операторы.
-
*для выбора всех столбцов из всех таблиц в условииFROM. -
tbl_name.*для выбора всех столбцов только из таблицы tbl_name.
При указании столбца вы можете использовать только имя столбца или квалифицировать имя столбца именем таблицы, используя tbl_name.col_name. Квалифицированная форма полезна, если вы объединяете несколько таблиц в условии FROM. Если вы не квалифицируете имена столбцов при выборе из нескольких таблиц, MariaDB попытается найти столбец в каждой таблице. Если имя столбца существует в нескольких таблицах, это ошибка.
Вы можете указывать имена столбцов в кавычках. Если вы квалифицируете имена столбцов именами таблиц, указывайте каждую часть отдельно как `tbl_name`.`col_name`.
Если вы используете какие-либо функции группировки в любом из выражений выбора, все строки в ваших результатах будут неявно сгруппированы, как если бы вы использовали GROUP BY NULL.
УНИКАЛЬНЫЕ
Запрос может производить некоторые идентичные строки. По умолчанию извлекаются все строки, даже если их значения одинаковы. Чтобы явно указать, что вы хотите извлечь одинаковые строки, используйте опцию ALL. Если вы хотите удалить дубликаты из набора результатов, используйте опцию DISTINCT. DISTINCTROW - это синоним для DISTINCT. См. также COUNT DISTINCT и SELECT UNIQUE в режиме Oracle.
В
Вставка INTO используется для указания того, что результаты запроса должны быть записаны в файл или переменную.
- SELECT INTO OUTFILE - форматирование и запись результата во внешний файл.
- SELECT INTO DUMPFILE - двоичная запись неформатированных результатов в внешний файл.
- SELECT INTO Переменная - выбор и установка переменных.
Обратное SELECT INTO OUTFILE - LOAD DATA.
LIMIT
Ограничивает количество возвращаемых строк. См. LIMIT и LIMIT ROWS EXAMINED для получения подробной информации.
БЛОКИРОВКА В РЕЖИМЕ ОБМЕНА/ДЛЯ ОБНОВЛЕНИЯ
См. LOCK IN SHARE MODE и FOR UPDATE для получения подробной информации о соответствующих предложениях блокировки.
OFFSET ... FETCH
ORDER BY
Упорядочивает набор результатов. См. ORDER BY для получения подробной информации.
РАЗДЕЛ
Указывает оптимизатору, какие разделы релевантны для запроса. Другие разделы не будут читаться. См. Обрезка и выбор разделов для получения подробной информации.
ПРОЦЕДУРА
Передает весь набор результатов процедуре C. См. ПРОЦЕДУРА и АНАЛИЗ ПРОЦЕДУРЫ (единственная встроенная процедура, не требующая перекомпиляции сервера).
SKIP LOCKED
Предложение SKIP LOCKED было добавлено в MariaDB 10.6.0.
Это приводит к исключению из набора результатов тех строк, которые не могли быть заблокированы (LOCK IN SHARE MODE или FOR UPDATE). Здесь подразумевается явное NOWAIT. Это реализовано только для таблиц InnoDB и игнорируется в противном случае.
SQL_CALC_FOUND_ROWS
Когда используется SQL_CALC_FOUND_ROWS, MariaDB рассчитает, сколько строк было бы в результате, если бы не было условия LIMIT. Результат можно получить, вызвав функцию FOUND_ROWS() в вашем следующем операторе SQL.
Ограничение времени выполнения оператора
Используя max_statement_time в сочетании с SET STATEMENT, можно ограничить время выполнения отдельных запросов. Например:
SET STATEMENT max_statement_time=100 FOR SELECT field1 FROM table_name ORDER BY field1;
WAIT/NOWAIT
Установите тайм-аут ожидания блокировки. См. WAIT и NOWAIT.
Примеры
SELECT f1,f2 FROM t1 WHERE (f3<=10) AND (f4='y');
См. Получение данных из MariaDB (начальное руководство) или различные подстатьи для получения дополнительных примеров.
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/select/