Опубликован: 01.03.2005 | Доступ: свободный | Студентов: 33896 / 4520 | Оценка: 4.31 / 4.06 | Длительность: 16:41:00
ISBN: 978-5-9556-0026-0
Лекция 10:

Базы данных и СУБД. Введение в SQL

< Лекция 9 || Лекция 10: 123456 || Лекция 11 >
Оператор SELECT

Оператор SELECT применяется для извлечения строк, выбранных из одной или нескольких таблиц. То есть с его помощью мы задаем столбцы или выражения, которые надо извлечь ( select_выражения ), таблицы ( table_references ), из которых должна производиться выборка, и, возможно, условие ( where_definition ), которому должны соответствовать данные в этих столбцах, и порядок, в котором эти данные нужно выдать.

Кроме того, оператор SELECT можно использовать для извлечения строк, вычисленных без ссылки на какую-либо таблицу. Например, чтобы вычислить, чему равно 2*2, нужно просто написать

mysql> 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

Выбрать название и описание ( title, description ) артефакта под номером 10:

mysql> SELECT title,description 
     FROM Artifacts WHERE id=10;
Оператор INSERT

Оператор INSERT вставляет новые строки в существующую таблицу. Оператор имеет несколько форм. Параметр имя_таблицы во всех этих формах задает таблицу, в которую должны быть внесены строки. Столбцы, для которых задаются значения, указываются в списке имен столбцов ( имя_столбца ) или в части SET.

Синтаксис:

  1. INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
        [INTO] имя_таблицы [(имя_столбца,...)]
        VALUES (выражение,...),(...),...

    Эта форма команды INSERT вставляет строки в соответствии с точно указанными в команде значениями. В скобках после имени таблицы перечисляются столбцы, а после ключевого слова VALUES – их значения.

    Например:

    mysql> INSERT INTO Persons 
        (last_name, bday) VALUES 
        ('Иванов', '1934');

    вставит в таблицу Persons строку, в которой значения фамилии ( last_name ) и даты рождения ( bday ) будут заданы соответственно как "Иванов" и "1934".

  2. 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 по условию, что фамилия человека Иванов и год рождения 1934.

  3. 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, то данная операция вставки прекращается при обнаружении строки, имеющей дублирующееся значение существующего ключа.

< Лекция 9 || Лекция 10: 123456 || Лекция 11 >
Дарья Федотова
Дарья Федотова
Сергей Березовский
Сергей Березовский

В рамках проф. переподготовки по программе "Программирование"

Есть курсы, которые я уже прошел. Но войдя в курс я вижу, что они не зачтены (Язык Ассемблера и архитектура ЭВМ, Программирование на С++ для профессионалов). Это как?

Михаил Акимов
Михаил Акимов
Россия, Москвп, МИРЭА, МГУПИ, МИТХТ
Алексей Ласкин
Алексей Ласкин
Россия, Москва, НИБ