Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PMO_PMS_shpory_final.docx
Скачиваний:
7
Добавлен:
17.09.2019
Размер:
457.71 Кб
Скачать
  1. Структурированный язык запросов sql. Оператор update. Структура оператора и примеры использования. Использование update с вложенными подзапросами.

SQL (Structured Query Language — «язык структурированных запросов») — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. SQL основывается на исчислении кортежей. Все языки манипулирования данными (ЯМД), созданные до появления реляционных баз данных и разработанные для многих систем управления базами данных (СУБД) персональных компьютеров, были ориентированы на операции с данными, представленными в виде логических записей файлов. Это требовало от пользователей детального знания организации хранения данных и достаточных усилий для указания не только того, какие данные нужны, но и того, где они размещены и как шаг за шагом получить их. SQL (Structured Query Language - структуризованный язык запросов) ориентирован на операции с данными, представленными в виде логически взаимосвязанных совокупностей таблиц. Особенность предложений этого языка состоит в том, что они ориентированы в большей степени на конечный результат обработки данных, чем на процедуру этой обработки. SQL сам определяет, где находятся данные, какие индексы и даже наиболее эффективные последовательности операций следует использовать для их получения: не надо указывать эти детали в запросе к базе данных. Язык SQL представляет собой совокупность операторов, инструкций и вычисляемых функций. Операторы SQL делятся на операторы определения данных (Data Definition Language, DDL): CREATE создает объект, БД (саму базу, таблицу, представление, пользователя и т. д.), ALTER изменяет объект, DROP удаляет объект.

Операторы манипуляции данными (Data Manipulation Language, DML): SELECT считывает данные, удовлетворяющие заданным условиям, INSERT добавляет новые данные, UPDATE изменяет существующие данные, DELETE удаляет данные. Операторы определения доступа к данным (Data Control Language, DCL): GRANT предоставляет пользователю (группе) разрешения на определенные операции с объектом

REVOKE отзывает ранее выданные разрешения, DENY задает запрет, имеющий приоритет над разрешением. Операторы управления транзакциями (Transaction Control Language, TCL): COMMIT применяет транзакцию, ROLLBACK откатывает все изменения, сделанные в контексте текущей транзакции,

SAVEPOINT делит транзакцию на более мелкие участки.

Оператор UPDATE позволяет изменять значения в существующих строках базы данных. Например, всем сотрудникам можно добавить надбавку в размере $100:

UPDATE Employee SET Salary = Salary + 100

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

ввести новую минимальную зарплату:

UPDATE Employee SET Salary = 21000 WHERE Salary < 21000

Конечно, оператор UPDATE можно использовать одновременно для нескольких столбцов или даже для обнуления некоторого столбца. Например, предположим, сотрудница по имени Мэри вышла замуж,

изменила фамилию, и уехала в длительное свадебное путешествие. С помощью следующего оператора можно изменить ее имя, ее отделу присвоить значение NULL и изменить ее текущий статус:

UPDATE Employee

SET EmpName = 'Mary Jones'. Dept = NULL, Status = 'On Leave' WHERE EmpNum =324

Язык SQL разрешает использовать в других операторах языка DML подзапросы, которые являются внутренними запросами, определяемыми оператором SELECT.

Подзапрос - очень мощное средство языка SQL. Он позволяет строить сложные иерархии запросов, многократно выполняемые в процессе построения результирующего набора или выполнения одного из операторов изменения данных (DELETE, INSERT, UPDATE).

Подзапрос позволяет решать следующие задачи:

определять набор строк, добавляемый в таблицу на одно выполнение оператора INSERT;

определять данные, включаемые в представление, создаваемое оператором CREATE VIEW ;

определять значения, модифицируемые оператором UPDATE;

указывать одно или несколько значений во фразах WHERE и HAVING оператора SELECT;

определять во фразе FROM таблицу как результат выполнения подзапроса;

применять коррелированные подзапросы.

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

Оператор UPDATE применяется для внесения изменений в данные таблиц.

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

Например:

SELECT f1, CAST (f2 AS CHAR),

CAST (f3 AS CHAR) from tbl1;

UPDATE tbl2 SET f2 = (SELECT CAST (f2 AS CHAR)

from tbl1 WHERE f1=1);

UPDATE tbl2 SET f5 = (SELECT CAST (f5 AS DATE)

from tbl1 WHERE f1=1),

f6= CAST ('10/12/2003' AS DATE);

Условное выражение CASE. Условное выражение CASE позволяет выбрать одно из нескольких значений на основании указываемого условия. Условное выражение CASE имеет следующее формальное описание:

{ CASE

{ expr WHEN expr THEN { expr | NULL }}

| { WHEN expr THEN { expr | NULL }}

[ ELSE { expr | NULL } ]

END}

| { NULLIF {expr1,expr2) }

| {COALESCE (expr .,:) }

Условное выражение CASE может быть записано, соответственно, в четырех формах:

CASE с выражениями:

SELECT f1, CASE f3

WHEN 'abc' THEN '1_abc' END FROM tbl1;

CASE с предикатами:

SELECT f1, CASE

WHEN f3= 'abc' THEN '1_abc'

ELSE f3 END FROM tbl1;

NULLIF - если выражения, указанные в скобках, не совпадают, то выбирается первое из этих значений, в противном случае устанавливается значение NULL:

UPDATE tbl2 SET f3 = (SELECT NULLIF (f3,'aaa')

FROM tbl1 WHERE f1=1);

COALESCE - выбирается первое значение в списке, не равное NULL:

INSERT INTO tbl1(f1,f2)

VALUES (1+ COALESCE(SELECT MAX(f1)

FROM tbl1, 0 ), 100);

Для успешного выполнения оператора UPDATE требуется ряд условий, включающий следующие:

наличие соответствующих привилегий;

для представления требуется определение его как изменяемого;

при изменении представлений применяются ограничения WITH CHECK OPTION или WITH CASCADED CHECK OPTION, установленные при создании этого представления;

в транзакциях "только чтение" изменение доступно только для временных таблиц;

выражения, используемые для определения значений, не могут содержать подзапросы с агрегирующими функциями;

для обновляемого курсора, указанного фразой FOR UPDATE, каждый изменяемый столбец также должен быть определен как FOR UPDATE;

в курсоре с фразой ORDER BY нельзя выполнять изменение столбцов, указанных в этой фразе.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]