Урок 2. Запросы. Манипуляция данными.

Видеоурок, на котором базируется данный пост - Запросы и манипуляции данными. Для лучшего усвоения информации и более подробного изучения SQL настоятельно рекоммендуем Вам просмотреть видеокурс SQL Essential.


DML

DML - Data Manipulation Language - это семество компьютерных языков, используемых пользователями баз данных для получения, вставки, удаоения или изменения данных в базах данных.

Одним из наиболее популярных языков манипулирования данными является SQL. Но, так как мы будем работать с MSSQL, мы будем использовать процедурное расширение SQL, которое называется T-SQL (тобишь, Transact-SQL).

Основными функциями DML являются:

  • INSERT - вставка данных.
  • SELECT - выборка данных.
  • UPDATE - изменение данных.
  • DELETE - удаление данных.

В введении в SQL в конце мы создали свою базу данных и создали в ней таблицу Autopark. Итак, давайте попробуем занести в нашу таблицу некоторые значения (напоминаю: не забудьте подключиться к текущей БД!!!):

CREATE TABLE Autopark
(
	CarID smallint IDENTITY NOT NULL,
	CarName char(25) NOT NULL,
	CarColor char(15) NULL,
	CarDate date NULL,
	CarPrice int NOT NULL
)
GO

А теперь давайте потренируемся в использовании этих 4х основных команд:



UPDATE

UPDATE - это команда, необходимая для редактирования элементов в базе данных.

Добавим-ка новую строку в нашу таблицу:

insert Autopark
(CarName, CarPrice)
values ('Ferrari', 600000)
GO

Как видим, мы добавили нашу строку пользуясь тем, что поля, которые мы тут явно не указали, допускают значение NULL.

А теперь давайте отредактируем все элементы, у которых поле CarName будет равно 'Ferrari':

update Autopark
set CarColor = 'red', CarDate = '01/01/2017' -- присвоить полям новые значения.
where CarName = 'Ferrari' -- ограничение по полю CarName. Если не уточнить по какому полю менять значение - оно изменится во всём столбце. 
GO

строка

update Autopark

указывает нам на то, что редактировать мы будем именно таблицу Autopark, а не что-то другое. Затем, используя ключевое слово SET мы присваеваем полям CarColor и CarDate определённые значения. И конечно же ставим ограничение WHERE, в котором явно указываем к каким именно строкам будет применено данное изменение. Как указано в комментарии, в случае если Вы забудете установить ограничение, все строки в таблице убдут подвержены изменениям, в результате чего все поля CarColor и CarDate примут значения 'red' и '01/01/2017'.


DELETE и TRUNCATE

DELETE - это команда, цель которой, логично, является удаление определённых полей или элементов. В случае использования данной команды в таблице, мы будем удалять строки.

Если мы хотим удалить все элементы из таблицы (проще говоря, очистить таблицу), нам понадобится следующая команда:

delete Autopark 
GO

В результате наша таблица Autopark станет абсолютно пустой. Однако использовать эту команду для очищения всех полей в таблице не рекоммендуется, поскольку работает она достаточно медленно, и когда нам понадобится очистить какую-то особо крупную таблицу, то её очищение путём использования команды DELETE займёт слишком много времени. Если Вам необходимо очистить таблицу, то намного лучше использовать другую команду, а именно - TRUNCATE.

truncate table Autopark
go

Данная команда будет выполняться значительно быстрее и выполняет ту же самую функцию что и DELETE в контексте целой таблицы.

В случае если мы хотим убрать только определённые строки в таблице, мы должны поставить ограничение на удаление через наше любимое ключевое слово WHERE:

delete Autopark
where CarPrice < 200000
GO

В результате все строки, в которых поле CarPrice имеет значение меньше чем 200000 будут удалены, а остальные строки, не подходящие под "категорию отсева" изменения никак не затронут.


Самые внимательные из вас могли бы заметить, что в коде я использовал одни и те же ключевые слова в разных регистрах. Если Вы пробовали сделать то же самое, Вы не могли не заметить, что команды, написанные в нижнем регистре, выполняются с таким же успехом, что и команды, написаные в высшем регистре. Отсюда мы делаем вывод, что язык SQL абсолютно не чувствителен к регистру.