
- •Практическое занятие №6 построение запросов к субд
- •Команда select
- •Некоторые другие команды sql
- •Insert into таблица [(поля)] values (значения)
- •Insert into regions values (77,'Москва')
- •Компонент запроса Query
- •Особенности работы с запросами
- •Отчет должен содержать:
- •Цель работы.
- •Контрольные вопросы:
Некоторые другие команды sql
Помимо уже рассмотренных запросов на выборку данных при помощи команды SELECT, рассмотрим некоторые другие команды языка манипулирования данными. В частности, это команды INSERT (вставить), UPDATE (обновить) и DELETE (удалить).
Начнем со вставки - команды INSERT, которая добавляет запись с указанными значениями полей в конец таблицы. В упрощенной форме основной синтаксис этой команды можно представить следующим образом:
Insert into таблица [(поля)] values (значения)
В простейшем случае, когда надо заполнить все (или почти все) поля новой записи, достаточно написать подобное выражение:
Insert into regions values (77,'Москва')
В том же случае, если требуется указать значения только для определенных полей, то их предварительно перечисляют после имени таблицы:
INSERT INTO bill (BILL_CUST, BILL_SUMM, BILL_DATE) VALUES (1, 100, '01.01.2006')
В принципе, то, что выполняется при помощи команды SQL INSERT, похоже на то, что делает метод InsertRecord. Однако SQL предоставляет дополнительные возможности, в частности, вставку целой группы записей:
INSERT INTO bill (BILL_CUST, BILL_SUMM, BILL_DATE) VALUES (1, 100, '01.01.2006'), (1,200,'01.02.2006'), (1,150,'01.03.2006')
Еще более широкие возможности открываются при помощи комбинирования команды INSERT с командой SELECT, причем вставку можно производить как в ту же самую таблицу, так и в любую другую. Например, если нам надо в некую таблицу bill2 внести все записи из таблицы bill, имеющие суммы свыше 300, мы можем написать следующий запрос
INSERT INTO bill2 SELECT * FROM bill WHERE BILL_SUMM>300
Здесь предполагается, что структура таблиц bill и bill2 полностью идентична. Если же это было бы не так, то можно внести только часть полей (при условии, что типы полей будут совпадать). Например, если в таблице bill2 было бы поле для суммы, то для вставки всех подходящих сумм можно написать следующий запрос:
INSERT INTO bill2 (B2_SUMM) SELECT BILL_SUMM FROM bill WHERE BILL_SUMM>300
ПРИМЕЧАНИЕ
При помощи INSERT-SELECT можно очень просто копировать данные из одной таблицы в другую. В то же время, если надо просто вставить данные из подготовленного текстового файла, то ряд СУБД предлагает более удобные и быстрые команды, например, LOAD DATA INFILE в MySQL.
Другая команда SQL, применяемая для модификации данных - это UPDATE. Она позволяет изменять значения в столбцах данных таблицы. В общих чертах ее синтаксис можно представить следующим образом:
UPDATE таблица SET имя_поля = значение [WHERE условие]
В простейшем случае, когда надо изменить все записи в колонке таблицы, можно написать следующее выражение:
UPDATE bill SET BILL_DATE = '01.01.2006'
Можно так же указывать не абсолютные, а вычисляемые значения:
UPDATE bill SET BILL_SUMM = BILL_SUMM * 2
Но чаще всего все-таки указывают условия, по которым следует находить те записи, которые следует изменить. Например, чтобы пересчитать все счета, выставленные до 31 января 2005 года, можно написать следующее выражение:
UPDATE bill SET BILL_SUMM = BILL_SUMM + 10 WHERE BILL_DATE<'31.12.2005'
Наконец, когда требуется изменить лишь какую-то определенную запись, что в качестве условия достаточно указать уникальное поле. Например, для таблицы счетов это поле BILL_ID, по которому можно однозначно идентифицировать какую-либо запись в таблице:
UPDATE bill SET BILL_SUMM = 1000 WHERE BILL_ID = 10
ВНИМАНИЕ
Следует учитывать, что если предусмотренные в VCL методы для работы с БД, как правило, влияют лишь на одну запись (т.е. на ту, что выделена курсором), то в SQL изменению подвержены все записи указанной таблицы.
Наконец, остается рассмотреть последнее часто применяемое действие - удаление записей из таблицы. В SQL для этих целей используют команду DELETE, определенную следующим образом:
DELETE FROM таблица [WHERE условие]
Подобно команде UPDATE, если не указано условие, то удалению будут подвержены все данные в таблице. Например, чтобы удалить все записи в таблице счетов, достаточно написать:
DELETE FROM bill
В более вероятном случае требуется удалить лишь единичные записи. Например, удалению могут быть подвержены счета, выписанные до 2006 года, или же какой-либо определенный (ошибочный) счет:
DELETE FROM bill WHERE BILL_DATE<'01.01.2006' DELETE FROM bill WHERE BILL_ID = 15
Таким образом, на текущий момент мы рассмотрели все основные команды SQL, относящиеся к языку манипулирования данными - SELECT, INSERT, UPDATE и DELETE. Во многих СУБД помимо этих команд имеется ряд дополнительных, например, TRUNCATE (аналог DELETE для всей таблицы) или REPLACE (вариация на тему вставки). Поэтому остается еще раз посоветовать ознакомиться с документацией на используемую СУБД.
То же самое касается и языка определения данных, представленного вариациями команд CREATE, DROP и ALTER: у каждой СУБД имеется собственный набор типов данных и свои тонкости работы с таблицами, индексами и т.д. В принципе, работая с "родными" для Delphi типами СУБД, вполне можно довольствоваться теми возможностями, что предоставляет утилита Database Desktop. Многие другие СУБД так же располагают собственными средствами, упрощающими процесс создания таблиц, в качестве примера можно привести широко распространенную утилиту phpMyAdmin, обеспечивающую управление СУБД MySQL через веб-интерфейс.