Синтаксис оператора update в sql. SQL


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

UPDATE <имя таблицы>
SET {имя столбца = {выражение для вычисления значения столбца
| NULL
| DEFAULT},...}
[ {WHERE <предикат>}];

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

Если столбец допускает NULL-значение, то его можно указать в явном виде. Кроме того, можно заменить имеющееся значение на значение по умолчанию (DEFAULT ) для данного столбца.

Естественно, типы данных столбцов hd и ram должны быть совместимы. Для приведения типов может использоваться выражение CAST .

Если требуется изменять данные в зависимости от содержимого некоторого столбца, можно воспользоваться выражением CASE . Если, скажем, нужно поставить жесткие диски объемом 20 Гб на ПК-блокноты с памятью менее 128 Мб и 40 гигабайтные - на остальные ПК-блокноты, то можно написать такой запрос:

Необходимо сказать несколько слов об автоинкрементируемых столбцах. Если столбец code в таблице Laptop определен как IDENTITY(1,1) , то следующий оператор

Разумеется, другой строки со значением code =5 в таблице быть не должно.

В Transact-SQL оператор UPDATE расширяет стандарт за счет использования необязательного предложения FROM . В этом предложении специфицируется таблица, обеспечивающая критерий для операции обновления. Дополнительную гибкость здесь дает использование операций соединения таблиц.

Пример . Пусть требуется указать "No PC" (нет ПК) в столбце type для тех моделей ПК из таблицы Product PC . Решение посредством соединения таблиц можно записать так:

Оператор DELETE

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

DELETE FROM <имя таблицы > ;

Если предложение WHERE отсутствует, удаляются все строки из таблицы или представления (представление должно быть обновляемым). Более быстро эту операцию (удаление всех строк из таблицы) в Transact-SQL можно также выполнить с помощью команды

Однако есть ряд отличий в реализации команды TRUNCATE TABLE по сравнению с использованием оператора DELETE , которые следует иметь в виду:

1. Не журнализируется удаление отдельных строк таблицы. В журнал записывается только освобождение страниц, которые были заняты данными таблицы.
2. Не отрабатывают триггеры, в частности, триггер на удаление.
3. Команда неприменима, если на данную таблицу имеется ссылка по внешнему ключу, и даже если внешний ключ имеет опцию каскадного удаления.
4. Значение счетчика (IDENTITY ) сбрасывается в начальное значение.

Пример . Требуется удалить из таблицы Laptop все ПК-блокноты с размером экрана менее 12 дюймов.

TRUNCATE TABLE Laptop

Transact-SQL расширяет синтаксис оператора DELETE , вводя дополнительное предложение FROM

FROM <источник табличного типа>

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

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

Поясним сказанное на примере. Пусть требуется удалить те модели ПК из таблицы Product , для которых нет соответствующих строк в таблице PC .

Используя стандартный синтаксис, эту задачу можно решить следующим запросом:

Здесь используется внешнее соединение, в результате чего столбец pc.model для моделей ПК, отсутствующих в таблице PC , будет содержать NULL-значение, что и используется для идентификации подлежащих удалению строк.

Последнее обновление: 13.07.2017

Для изменения уже имеющихся строк в таблице применяется команда UPDATE . Она имеет следующий формальный синтаксис:

UPDATE имя_таблицы SET столбец1 = значение1, столбец2 = значение2, ... столбецN = значениеN

Например, увеличим у всех товаров цену на 5000:

UPDATE Products SET Price = Price + 5000

Используем критерий, и изменим название производителя с "Samsung" на "Samsung Inc.":

UPDATE Products SET Manufacturer = "Samsung Inc." WHERE Manufacturer = "Samsung"

Более сложный запрос - заменим у поля Manufacturer значение "Apple" на "Apple Inc." в первых 2 строках:

UPDATE Products SET Manufacturer = "Apple Inc." FROM (SELECT TOP 2 FROM Products WHERE Manufacturer="Apple") AS Selected WHERE Products.Id = Selected.Id

С помощью подзапроса после ключевого слова FROM производится выборка первых двух строк, в которых Manufacturer="Apple". Для этой выборки будет определен псевдоним Selected. Псевдоним указывается после оператора AS .

Далее идет условие обновления Products.Id = Selected.Id . То есть фактически мы имеем дело с двумя таблицами - Products и Selected (которая является производной от Products). В Selected находится две первых строки, в которых Manufacturer="Apple". В Products - вообще все строки. И обновление производится только для тех строк, которые есть в выборке Selected. То есть если в таблице Products десятки товаров с производителем Apple, то обновление коснется только двух первых из них.

Платформа SQL Server поддерживает большинство основных компонентов инструкции UPDATE стандарта ANSI, но не поддерживаются ключевые слова ONLY и ARRAY и не поддерживается возможность обновления массивов. В SQL Server функциональность инструкции UPDATE была расширена путем добавления подсказок по таблице при помощи предложения WITH, добавления подсказок по запросу при помощи предложения OPTION, а также введена более надежная обработка переменных. Синтаксис следующий.

UPDATE {имя_таблицы | имя_представления | набор-строк} )] SET {имя_столбца={DEFAULT | NULL | скалярное_выражение} |

имя стременной=скалярное_выражение| имя_переменной=имя_столбца=скалярное_выражение} [, …] ]

WHERE {условия | CURRENT OF имя_курсора) )]

Синтаксические элементы инструкции UPDATE в SQL Server следующие.

WITH подсказка

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

имя_переменной

Переменные SQL Server должны быть объявлены до использования инструкции UPDATE, в форме DECLARE @переменная. Конструкция SET @переменная=столбец!=выражение! устанавливает для переменной значение, равное окончательному значению обновленного столбца, а конструкция SET @переменная -столбец!, столбец!=выражение устанавливает для переменной значение, равное значению в столбце до выполнения инструкции UPDATE.

Предоставляет возможность создать для указания обновляемых строк высокоизбирательный критерий на основе соединения. Предложение FROM не нужно, если при указании строк используется только одна таблица - целевая. Функции для работы с наборами строк (rowset functions) в SQL Server описываются в разделе «Инструкция SELECT».

AS псевдоним

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

Предоставляется возможность использовать стандартный синтаксис ANSI для соединений таблиц совместно с предложением FROM.

Небольшая вариация предложения WHERE CURRENT OF стандарта ANSI. Предложение WHERE CURRENT OF имя курсора, используемое в комбинации с курсором, заставляет платформу SQL Server обновить только одну запись, на которой в данный момент расположен курсор. Предполагается, что курсор является локальным, но можно указать и глобальный курсор, используя ключевое слово GLOBAL.

OPTION подсказка

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

Главное расширение, которое вводит Microsoft SQL Server в инструкцию UPDATE стандарта ANSI, - это предложение FROM. Предложение FROM позволяет использовать предложение JOIN, что значительно упрощает обновление строк целевой таблицы путем связывания строк, указанных в предложении FROM, со строками, обновляемыми компонентом UPDATE имя_таблицы. В следующем примере показано обновление результата соединения таблиц с использованием стиля ANSI и довольно громоздкого подзапроса, а потом - обновление с использованием предложения FROM SQL Server. Оба запроса выполняют одно и то же действие, но совершенно по-разному.

Выполнение такого обновления при использовании стиля Transact-SQL сводится к соединению двух таблиц - authors и titleauthor - с таблицей titles. Для выполнения той же самой операции с использованием кода ANSI нужно сначала найти значение au_id в таблице authors и передать его в таблицу titleauthor, а затем нужно найти значение title_id и передать его в основную инструкцию UPDATE.

В следующем примере обновляется столбец state для первых десяти записей таблицы authors.

UPDATE authors SET state="ZZ" FROM (SELECT TOP 10 * FROM authors ORDER BY au_lname) AS t1 WHERE authors.au_id=t1.au_.id

В этом примере важно обратить внимание на то, что, как правило, довольно сложно обновить первые п записей при помощи инструкции UPDATE, если нет какой-нибудь явной последовательности строк, которую можно определить при помощи предложения WHERE. Однако вложенный табличный подзапрос в предложении FROM, использующий ключевое слово ТОР для получения первых 10 записей, помогает не тратить силы на дополнительное программирование, которое иначе было бы необходимо.

Что если я спрошу: "Все ли обновления установлены на ваш SQL Server?"

Как ответить на такой вопрос? Заглянуть в центр обновления Windows? Это вряд ли поможет. Скорее всего вы увидите там вот такую картину:

Но, как ни странно, это вовсе не означает, что на SQL Server установлены самые свежие обновления!

Для отслеживания обновлений именно для SQL-сервера Микрософт создал специальную страничку — . Положите её себе в закладки:

Но прежде чем идти туда, необходимо выяснить, какая версия установлена у нас прямо сейчас. Нам нужен точный номер, включающий в себя номер построения (build number). Получить его можно посмотрев на системную переменную @@Version :

Запомните эти цифры — только по ним мы сможем определить какие обновления у нас уже установлены, а какие — нет. SQL-сервер, в отличие от операционной системы сам не сообщает нам о каждом установленном обновлении. Поэтому придётся работать с номером @@Version .

Теперь заходим в центр обновления SQL-сервера и видим там удобную табличку:

Здесь нам понадобятся три вещи:

  • Во-первых, запомним номер построения, соответствующий этому обновлению. По окончании процедуры обновления @@Version нашего SQL-сервера должна выдавать именно такой номер.
  • Во-вторых, обязательно следует посмотреть историю номеров построений, соответствующих обновлениям с последнего сервисного пакета. Это важно, потому что накопительное обновление установится только на предшествующий ему сервисный пакет.
  • И в-третьих, полезно посмотреть список исправлений, содержащихся в накопительном пакете. Администратор должен быть в курсе изменений, вносимых этим пакетом.

Посмотрев номера построений предшествующих обновлений, мы увидим, что разрыв в номерах по сравнению с нашей текущей версией подозрительно большой:

Это из-за того, что у нас не установлен сервисный пакет SP1. Придётся сначала поставить его.

И вот теперь у нас есть план действий:

  1. Устанавливаем сервисный пакет SP1.
  2. Устанавливаем накопительный пакет обновлений CU4.

Действуем! После установки SP1 проверяем номер @@Version . С исходного 2100.60 он увеличился до 3000.0.

Изменение значения полей (команда UPDATE ). Комацдой UPDATE можно изменить в строке некоторые или все значения. В команде указыва­ются имя таблицы и изменения. Предположим, приказом ректора всем сту­дентам, которые получают стипендию, устанавливается новый (одинаковый для всех) размер стипендии в размере 50 000 руб. Для этого подается ко­манда:

UPDATE Spisok

SET stip = 50 000;

В команде UPDATE в предложении WHERE можно задать обновление только определенных строк.

UPDATE Spisok

SET stip = 50 000

WHERE kurs=I;

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

Одной командой UPDATE нельзя обновить несколько таблиц.

В команде UPDATE в предложении SET можно применять скалярные выражения для изменения значения поля. Предположим, всем студентам размер стипендии увеличен на 25 %; требуется внести изменения:

UPDATE Spisok

SET stip = (stip *25)/100;

Итак, команда UPDATE предназначена для замены значений в строках (записях) таблицы.

SQL. Синтаксис команды DELETE

Удаление строк из таблицы (команда DELETE ). Командой DELETE удаляются не отдельные значения полей строки, а целые строки. После вы­полнения команды DELETE для всей таблицы она становится пустой, на­пример:

DELETE FROM Spisok;

Для удаления конкретно указанных строк можно использовать предикат

DELETE FROM Spisok

WHERE stip = 0;

или указать значение первичного ключа для удаления одной записи

DELETE FROM Spisok

WHERE fio = "Петькин";

В командах INSERT, DELETE, UPDATE можно применять подзапросы.

SQL Синтаксис команды SELECT

Язык SQL есть структурированный язык запросов. Запрос в этой среде-это команда, с помощью которой пользователь формирует задачу для СУБД. После выполнения команды СУБД должа представить указанную в запросе информацию для пользователя.
все запросы в SQL формулируются с помощью одной команды SELECT, после которой в базе данныз начинается поиск определенной (нужной) информации в таблице.

Пример . На основании таблицы Spisok получить таблицу со всеми записями следующего вида:

Подается команда:

SELECT fio, stip FROM Spisok;

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

fio stip
Рыбкина
Уткина
Пшеничко
Собачкина
Яичко

Select - ключевое слово, которое «сообщает» СУБД о том, что команда является запросом;

fio, stip - список имен полей (столбцов), по которым должна выбираться информация и нормироваться новая таблица;

FROM Spisok; FROM- ключевое слово, должно быть в каждом запросе; Spisik- имя таблицы –источника данных для запроса;

Символ точка с запятой (;) признак окончания команды и готовности к её выполнению.

После ключевого слова SELECT следует пробел. Далее через запятую перечисляются имена полей(столбцов) выборки.

Для вывода всех столбцов таблицы базы данных список полей можно не перечислять, заменив его символом «звездочка» (*). Столбцы выводятся в соответствии со структурой таблицы-источника

SELECT * FROM Spisok;

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

SELECT kurs, gruppa, fio FROM Spisok;

SQL. Выбор по критерию (WHERE)

С помощью приложения WHERE в команде SELECT задается условие выбора записей из таблицы; предикат может принимать значения «истина» или «ложь».

Пример.

Команда SELECT для выбора из таблицы Spisok студентов группы ЭТ-41:

SELECT gruppa, fio FROM Spisok WHERE gruppa=’ЭТ-41’ ;

Программа просмотрит все записи таблицы Spisok, проверяя каждую из них истинность предиката gruppa=’ЭТ-41’. В результате выполнения получим.

gruppa fio
ЭТ-41 Рыбкина
ЭТ-41 Уткина
ЭТ-41 Пшеничко
ЭТ-41 Собачкина
ЭТ-41 Яичко

Использование SQL с другими языками программирования

Язык SQL используется для написания программ доступа к базам данных в качестве подъязыка других процедурных языков программирования (Pascal, PL/1, Fortran, COBOL, C, Ada и др.). Язык SQL не процедурный, а декларативный, локальный. Его можно встраивать в программы, написанные на процедурных языках. В язык SQL отсутствует базовые операторы проверки условий IF, операторы FOR, DO и WHILE и др. Язык SQL предназначен исключительно для управления базами данных.

Совместное применение этих языков позволяет программировать сложные процедурные программы, например, программировать их на Pascal, а через SQL обращаться к их базе данных. Все встроенные команды SQL включаются в основной текст программы на языке высокого уровня, начиются фразой EXEX SQL и заканчиваются знаком завершения соответствующего языка (в Pascal;).

Программа с встроенным SQL перед собственной компиляцией проходит предкомпиляцию, где команды SQL преобразуются (транслируются) предкомпилятором в форму языка высокого уровня; после этого происходит компиляция все основной программы.

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

Visual Basic Application. Основные понятия.

В программировании базовыми понятиями являются «переменная» и «значение переменной». Переменная(variable)- это величина (объект), значение которой меняется в ходе выполнения программы. Переменная в компьютере представляется по присвоенному ему имени (идентификатору), и ее значение определяется оператором присвоения.

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

Данные присваивают объект числами, буквами и другими способами. Над числами выполняются арифметические, над буквами- логические операции. Уже это свидетельствует о разных типах данных, для каждого из которых приняты свои способы их внутри машинного представления.

Типы данных VBA

Типы данных Префикс Символ описания Размер (байт) Значение
Integer Int % Короткое Целое (-32788 до +32767)
Long Lng & Длинное Целое (-2147483648 до +2147483647)
Single Sng ! Число с плавающей точкой одинарной точности: от -3.4e38 до +3.4е38
Double Dbl # Число с плавающей точкой двойной точности: от -1.79e308 до +1.79е308
Byte Byt Нет Байт: от 0 до 255
Currency Cur @ Число с фиксированной т очкой: От -922337203685477,5808 До +922337203685477,5807
String Str $ 10 + 2 на символ Строка: от 0 до 65535 символов
Boolean Bin Нет Булевское число: true и false
Date Dat Нет Дата и время
Variant Var Нет <16 Любые данные
Object Obj Нет Любая ссылка на объект

Переменные и константы в VBA

Переменные в программе объявляются, т е определяется тип переменной и область действия. Объявлять переменные можно на двух уровнях – уровне процедуры и уровне модуля.

Объявление на уровне модулей производится операторами Public и private: на уровнях модулей и процедуры – оператором Dim: только на уровне процедуры – оператором static.

Инициализация объявленных переменных происходит во время компиляции: числовой переменной присваивается значение нуль (0): строковой переменной – пустая строка (нулевой длины): переменной типа Variant – значение Emtry (отсутствие значения).

Константы: имеют имя, но не изменяют своего значения во время выполнения программы. Для определения констант в VB используется оператор Const такого формата:

Const {имя коснтанты =<константное выражение>}…

Public – объявленнная константа доступна для любой процедуры

Private – для процедур внутри модуля

AS<тип данных> - объявление типа данных константы