Запрос update и условие where 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Запрос update и условие where



UPDATE используется для того, чтобы изменить существующие значения или освободить поле в строке, поэтому новые значения должны соответствовать существующему типу данных и обеспечивать приемлемые значения. Если вы не хотите изменить значения во всех строках, то нужно использовать условие WHERE.

UPDATE table_name SET column1 = ‘data1’, column2 = ‘data2’ WHERE column3 = ‘data3’;

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

UPDATE table_name SET FirstName = ‘Василий’ WHERE FirstName = ‘Василий’ AND LastName = ‘Пупкин’;

Будьте осторожны! Запрос DELETE удаляет целые строки

Запрос DELETE полность удаляет строку из базы данных. Если вы хотите удалить одно единственное поле, то нужно использовать запрос UPDATE и установить для этого поля значение, которое будет являться аналогом NULL в вашей программе. Будьте внимательны, и ограничивайте ваш запрос DELETE условием WHERE, иначе вы можете потерять все содержимое таблицы.

DELETE FROM table_name WHERE column1 = ‘data1’;

Как только строка была удалена из вашей базы данных, она не подлежит восстановлению, поэтому желательно иметь столбец по имени «IsActive», или что-то типа того, который вы можете изменить на ноль, что будет указывать на блокировку представления данных из этой строки.

 

3.1.2 Сложные критерии отбора. Группировка записей

 

При отборе можно использовать несколько операций, задавая тем самым слож­ные критерии отбора записей. Сложный критерий (логическое выражение) со­стоит из:

1. Простых условий;

2. Логических операций:

 

· and — логическое и;

· or — логическое или;

· not — логическое не;

3. Круглых скобок.

В языке SQL приоритет операций сравнения выше приоритета логических опе­раций. Для изменения порядка выполнения операций используются круглые скобки.

Пример запроса со сложным критерием отбора:


SELECT Cards.
FROM Store,Cards
WHERE (S_Quantity > 250) AND
(C_Date BETWEEN "21.5.2008" AND "27.5.2008")

 

Здесь происходит отбор всех записей о движении товара в течение заданного периода, количество которого на складе превышает 250 единиц. В данном логи­ческом выражении простые условия заключены в скобки, что не обязательно, т. к. приоритет операций сравнения выше приоритета логических операций. Набор данных, полученный при таком отборе записей, может иметь вид:

С_Number C_Code С_Move C_Date

5 3 270 25.05.08

6 4 200 26.05.08

5 3 270 27.05.08

6 4 200 27.05.08

 

Отметим, что рассмотренные выше операции between и in также реализуют логические операции:between логическое и, a in — логическое или.

Записи набора данных могут быть сгруппированы по некоторому признаку. Группу образуют записи с одинаковыми значениями в полях, перечисленных в списке операнда group by. При группировании записей их проще анализировать и обрабатывать, например, с помощью статистических функций.

 

Группирование записей автоматически исключает повтор значений в полях, за­данных для группирования, т. к. записи с совпадающими значениями этих по­лей объединяются в одну группу.

Пример запроса с группированием записей:

                                                                                 
SELECT C_Date, COUNT(C_Date)

FROM Cards

WHERE C_Date BETWEEN "01.06.2008" AND "03.06.2008"

GROUP BY C_Date

 

Для каждой даты из указанного периода выводится количество записей, в кото­рых она встречается. Если не выполнить группирование, то в набор данных по­падут все записи, а при использовании группирования все даты для получен­ного набора данных уникальны.

Функция count выводит для каждой группы (сформированной по полю даты) число записей в группе. Полученный набор данных может иметь следующий вид:

С_Date COUNT(С_Date)

01.06.08 20

02.06.08 17

03.06.08 8
В этом примере поле даты С_Date использовано в операторе SELECT трижды, в общем случае можно использовать различающиеся поля.

Совместно с операндом group by можно использовать операнд having, с по­мощью которого задаются дополнительные условия группирования записей.

Рассмотрим пример запроса:

^ SELECT C_Date, COUNT(C_Date)

FROM Cards

GROUP BY C_Date

HAVING.COUNT(C_Date) > 50

Здесь отбираются данные для дат, когда движение товара было интенсивным – общее число записей в соответствующей группе превышало 50. Так как не ука­зан ограничивающий период времени, то при отборе в набор данных будут учи­тываться записи таблицы Cards с любыми датами.

 

3.1.3 Последовательная навигация по записям

 

Для выполнения действий по последовательному перебору записей, начиная от некоторой стартовой записи и до конца набора данных, используют цикл while...do или repeat...until:

with Tablel do begin

First;

while not EOF do begin

{Какие-либо действия над очередной записью} Next; end; {while} end; {with}

with Tablel do begin

First;

repeat

{Какие-либо действия над очередной записью} until not FindNext; end; {with}

Точно так же можно перемещаться от конца НД к его началу:

with Tablel do begin

Last;

while not BOF do begin

{Какие-либо действия над очередной записью} Prior; end; {while} end; {with}

with Tablel do begin

Last;

repeat

{Какие-либо действия над очередной записью} until not FindPrior; end; {with}

Если НД допускает вызов записи по ее номеру (его свойство IsSequenced в этом случае должно содержать значение True), можно использовать цикл for. Например, следующий обработчик события TForm. On Act ivate поместит все значения строкового поля BName НД Books в многострочное текстовое поле Memol:

procedure TForml.FormActivate(Sender: TObject); var

RecNo: Integer; begin

if Books.IsSequenced then

for RecNo:= 1 to Books.RecordCount do

begin

Books.RecNo:= RecNo; Memol.Lines.Add(Tablel['BName1]) end; end;

Замечу, что для компонентов TTable и TQuery, связанных с файл-серверными таблицами БД, свойство IsSequenced всегда содержит значение True. В клиент-серверной архитектуре оно зависит от используемого сервера БД. Свойство RecNo набора данных определяет порядковый номер обрабатываемой записи (нумерация начинается с 1), а его свойство RecordCount — количество записей.

Во всех случаях следует помнить, что если в ходе выполнения цикла последовательного перебора записей изменится ключевое поле записи или в НД будет вставлена новая (удалена старая) запись, курсор НД может изменить свое положение и правильная работа цикла будет нарушена. Если, например, мы хотим удалить все записи из таблицы, следующий фрагмент программы будет неверным:

with Tablel do while not EOF do begin

Delete; Next; end;

После удаления очередной записи курсор НД перейдет на следующую, но вызов Next заставит его сместиться еще раз, и очередная запись будет пропущена. Правильный вариант:

with Tablel do while not EOF do

Delete;

 

3.2 Запросы на изменение данных в БД

3.2.1 Обеспечение целостности, достоверности и непротиворечивости данных

 

Целостность данных – система правил, используемых для поддержания связей между записями в связанных таблицах, обеспечивающих защиту от случайного удаления или изменения данных.

Обеспечение целостности БД – система мер, направленных на поддержание правильности данных в БД в любой момент времени.

Целостность данных обеспечивается набором специальных предложений, называющихся ограничениями целостности.

Ограничения целостности – это набор определенных правил, которые устанавливают допустимость данных и связей между ними. Ограничения целостности могут относиться к разным объектам БД: атрибутам (полям), записям, отношениям, связям между ними.

Для полей могут быть использованы следующие виды ограничений:

1. Тип и формат поля автоматически допускают ввод только данных определенного типа.

2. Задание диапазона значений, как правило, используется для числовых полей. Диапазон значений может быть ограничен с двух сторон (закрытый диапазон), а может с какой-то одной: верхней или нижней (открытый диапазон).

3. Недопустимость пустого поля. Позволяет избежать появления в БД недописанных записей, в которых пропущены какие-либо обязательные атрибуты.

4. Задание списка значений, позволяет избежать излишнего разнообразия данных, если его можно ограничить.

5. Проверка на уникальность значения какого-либо поля, позволяет избежать появления записей-дубликатов.

Ограничения для связей

Пусть имеются отношение между двумя таблицами. Одна из таблиц будет являться главной (родительской), а вторая подчиненной (дочерней или связанной).

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

 

1. Невозможно ввести в поле внешнего ключа связанной таблицы значение, не содержащееся в ключевом поле родительской таблицы.

Пример

В таблицу "Заказы" невозможно ввести "Код товара", которого нет в таблице "Товары" (код несуществующего товара).

2. Не допускается удаление записи из главной таблицы, если существуют связанные с ней записи в подчиненной таблице.

3. Невозможно изменить значение ключевого поля в главной таблице, если существуют записи, связанные с данной.

 



Поделиться:


Последнее изменение этой страницы: 2021-12-15; просмотров: 31; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.147.65.65 (0.02 с.)