Оператор SELECTОператор SELECT применяется для извлечения строк, выбранных из одной
или нескольких таблиц. То есть с его помощью мы задаем столбцы или
выражения, которые надо извлечь (select_выражения), таблицы
(table_references), из которых должна производиться выборка, и,
возможно, условие (where_definition), которому должны соответствовать
данные в этих столбцах, и порядок, в котором эти данные нужно выдать. Кроме того, оператор SELECT можно использовать для извлечения строк,
вычисленных без ссылки на какую-либо таблицу. Например, чтобы
вычислить, чему равно 2*2, нужно просто написать Упрощенно структуру оператора SELECT можно представить следующим образом:
SELECT select_выражение1, select_выражение2,
...
[FROM table_references
[WHERE where_definition]
[ORDER BY {число | имя_столбца |
формула}
[ASC | DESC], ...]]
Квадратные скобки [ ] означают, что использование находящегося в них
оператора необязательно, вертикальная черта | означает перечисление
возможных вариантов. После ключевого слова ORDER BY указывают имя
столбца, число (целое беззнаковое) или формулу и способ упорядочения
(по возрастанию – ASC, или по убыванию – DESC). По умолчанию
используется упорядочение по возрастанию. Когда в select_выражении мы пишем «*», это значит выбрать все
столбцы. Кроме «*» в select_выражения могут использоваться функции
типа max, min и avg. Пример 10.4. Выбрать из таблицы Persons все данные, для которых поле
first_name имеет значение 'Александр':
mysql> SELECT * FROM Persons
WHERE first_name='Александр';
Пример
10.4.
Использование оператора SELECT
(html,
txt)
Выбрать название и описание (title, description) артефакта под
номером 10:
mysql> SELECT title,description
FROM Artifacts WHERE id=10;
Оператор INSERTОператор INSERT вставляет новые строки в существующую таблицу.
Оператор имеет несколько форм. Параметр имя_таблицы во всех этих
формах задает таблицу, в которую должны быть внесены строки. Столбцы,
для которых задаются значения, указываются в списке имен столбцов
(имя_столбца) или в части SET. Синтаксис: -
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] имя_таблицы [(имя_столбца,...)]
VALUES (выражение,...),(...),...
Эта форма команды INSERT вставляет строки в соответствии с точно
указанными в команде значениями. В скобках после имени таблицы
перечисляются столбцы, а после ключевого слова VALUES – их значения.
Например:
mysql> INSERT INTO Persons
(last_name, bday) VALUES
('Иванов', '1934');
вставит в таблицу Persons строку, в которой значения фамилии
(last_name) и даты рождения (bday) будут заданы соответственно как
«Иванов» и «1934». -
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] имя_таблицы [(имя_столбца,...)]
SELECT ...
Эта форма команды INSERT вставляет строки, выбранные из другой таблицы или таблиц.
Например:
mysql> INSERT INTO Artifacts (author)
SELECT id FROM Persons
WHERE last_name='Иванов'
AND bday='1934';
вставит в таблицу Artifacts в поле «автор» (author) значение
идентификатора, выбранного из таблицы Persons по условию, что фамилия
человека Иванов. -
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] имя_таблицы
SET имя_столбца=выражение,
имя_столбца=выражение, ...
Например:
mysql> INSERT INTO Persons
SET last_name='Петров',
first_name='Иван';
Эта команда вставит в таблицу Persons в поле last_name значение
«Петров», а в поле first_name – строку «Иван».
Форма INSERT ... VALUES со списком из нескольких значений
поддерживается в версии MySQL 3.22.5 и более поздних. Синтаксис
выражения имя_столбца=выражение поддерживается в версии MySQL 3.22.10
и более поздних. Действуют следующие соглашения. - Если не указан список столбцов для INSERT ... VALUES или INSERT ...
SELECT, то величины для всех столбцов должны быть определены в списке
VALUES() или в результате работы SELECT. Если порядок столбцов в
таблице неизвестен, для его получения можно использовать DESCRIBE
имя_таблицы.
- Любой столбец, для которого явно не указано значение, будет
установлен в свое значение по умолчанию. Например, если в заданном
списке столбцов не указаны все столбцы в данной таблице, то не
упомянутые столбцы устанавливаются в свои значения по умолчанию.
- Выражение expression может относиться к любому столбцу, который
ранее был внесен в список значений. Например, можно указать
следующее:
mysql> INSERT INTO имя_таблицы (col1,col2)
VALUES(15,col1*2);
Но нельзя указать:
mysql> INSERT INTO имя_таблицы (col1,col2)
VALUES(col2*2,15);
Мы еще не обсудили три необязательных параметра, присутствующих во
всех трех формах команды: LOW_PRIORITY, DELAYED и IGNORE. Параметры LOW_PRIORITY и DELAYED используются, когда с таблицей
работает большое число пользователей. Они предписывают устанавливать
приоритет данной операции перед операциями других пользователей. Если
указывается ключевое слово LOW_PRIORITY, то выполнение данной команды
INSERT будет задержано до тех пор, пока другие клиенты не завершат
чтение этой таблицы. В этом случае клиент должен ожидать, пока данная
команда вставки не будет завершена, что в случае интенсивного
использования таблицы может потребовать значительного времени. В
противоположность этому команда INSERT DELAYED позволяет данному
клиенту продолжать операцию сразу же, независимо от других
пользователей. Если в команде INSERT указывается ключевое слово IGNORE, то все
строки, имеющие дублирующиеся ключи PRIMARY или UNIQUE в этой
таблице, будут проигнорированы и не внесены в таблицу. Если не
указывать IGNORE, то данная операция вставки прекращается при
обнаружении строки, имеющей дублирующееся значение существующего
ключа.
|