До сегодняшнего дня мы занимались выборками из базы данных. Я рассказал тебе практически все возможные приёмы для формировании данных из таблиц. Теперь пора научиться вставлять, удалять и модифицировать строки.
Для всего этого в SQL есть три магических оператора: INSERT (вставить), UPDATE (модифицировать), DELETE (удалить). Рассмотрим вставку строки, для этого используется простейшая конструкция:
INSERT INTO Имя Таблицы
VALUES (Значение 1, Значение 2, и т.д.);
Это общий вид. После оператора VALUES идёт перечисление всех полей строки. Теперь взглянём на конкретный пример:
INSERT INTO User1
VALUES ('Иванов', 'Сергей', 34);
Этой командой мы вставили строку и присвоили значения полям. В моей таблицы три поля: первые два поля строковые (Фамилия и Имя), последнее поле - целое число (возраст). Типы данных обязаны совпадать с теми, что установлены в таблицы, иначе секир башка твоему запросу.
А если ты не хочешь задавать все поля? Тогда ты можешь оставить их пустыми с помощью NULL:
INSERT INTO User1
VALUES ('Иванов', NULL, 34);
Как видишь, второе поле я оставил пустым и в него не будет заноситься значение.
А если у тебя таблица с большим количеством полей и ты хочешь заполнить только два из них? Неужели придется всем остальным полям ставить значение NULL? Нет. SQL - это достаточно продуманный язык и в нём есть на этот случай удобная вещичка:
INSERT INTO User1 (Family, Age)
VALUES ('Иванов', 35);
После конструкции INSERT INTO и имени базы я поставил скобки, где перечислил поля, которые необходимо заполнить (Фамилия и Возраст). В скобках после слова VALUES я перечисляю эти поля в той же последовательности, в которой перечислил перед этим (сначала фамилия, а потом возраст).
Теперь представь, что ты хочешь сохранить результат запроса SELECT в отдельной таблице. Для этого в SQL всё уже предусмотрено. Тебе нужно только написать:
INSERT INTO User1
SELECT *
FROM User2
WHERE Age=10
В этом примере сначала выполнится запрос SELECT:
SELECT *
FROM User2
WHERE Age=10
После его выполнения, результат будет занесён в таблицу User1. Ну как? Только не забудь, что количество столбцов в запросе и результирующей таблицы должно быть одинаково. А самое главное, это чтобы тип данных совпадал, иначе Гитлер капут.
Усложняем задачу. Теперь рассмотрим такой запрос:
INSERT INTO User1(Name,Age)
SELECT Name,Age
FROM User2
WHERE Age=10
Теперь в таблицу User1 будут перенесены только два столбца (имя и возраст). Здесь действуют те же ограничения - количество полей должно быть одинаково. Но есть и ещё одно - поля должны быть перечислены в таком порядке, чтобы типы и длина полей совпадали. У меня они перечислены так, что первое поле строковое, а второе целое число.
Двигаемся дальше. Мы смогли добавить строки, но надо и научиться изменять данные. Для этого нам доступна команда UPDATE . Сразу же попробуем взглянуть на пример:
UPDATE User1
SET age=65
Первая строка говорит о том, что нам надо обновить базу User1. Вторая строка начинается с оператора SET (установить). После этого я пишу поле, которое хочу обновить и присваиваю ему значение.
Этот маленький пример установит поле age у всех строк в значение 65. Если тебе нужно обновить только определённые строки, то ты должен написать так:
UPDATE User1
SET age=65
WHERE Name LIKE 'Вася'
Этот запрос установит значение 65 в поле AGE только тем строкам, в которых поле Name равно "Вася".
И снова усложняем себе жизнь.
UPDATE User1
SET age=age+1
Этот запрос увеличит во всех строках таблицы поле Age на единицу.
И наконец, обновление сразу нескольких полей:
UPDATE User1
SET age=age+1, Name='Иван'
WHERE Family LIKE 'Сидоров'
Этот запрос увеличит поле Age на единицу и установит поле Name в "Иван" во всех строках, где поле Family равно "Сидоров".
С обновлением полей покончено, теперь мы переходим к удалению строк из таблицы. Для этого есть команда DELETE :
DELETE FROM User1
Всё очень просто, эта конструкция удаляет абсолютно все строки из таблицы User1. Можно сказать, что этим мы очищаем таблицу.
Теперь рассмотрим другой пример:
DELETE FROM User1
WHERE Age=10
Этот пример удаляет только те строки, в которых поле Age равно 10.
Всё. Мы и так сегодня изучили достаточно много, поэтому пора заканчивать. Удачи!!!