Системы управления базами данных (I часть) Языковые средства СУБД. Язык SQL. Лекции доступны на сайте www.ucit.ru В разделе сайта: Профессиональная переподготовка Рабочие программы Языки определения данных и манипулирования данными Для работы с базами данных используются специальные языки, в целом называемые подъязыками данных, поскольку они включают подмножество операторов, связанное с объектами и операциями баз данных, но не содержат конструкции для выполнения всех вычислительных операций языков программирования высокого уровня. Многие СУБД поддерживают возможность внедрения операторов подъязыков данных в языки высокого уровня, таких, например, как COBOL, Fortran, Pascal, Ada, С. Как уже отмечалось, в этом случае язык высокого уровня считается базовым, а подъязык данных — внедренным. В СУБД поддерживается несколько специализированных по своим функциям подъязыков. Их можно разбить на две категории: - Язык определения данных - описательный язык, с помощью которого описывается предметная область: именуются объекты, определяются их свойства и связи между объектами. Он используется главным образом для определения логической структуры БД, его нельзя исполь¬зовать для управления данными. Результатом компиляции ЯОД — операторов является набор таблиц, хранимый в системном каталоге, в котором содержатся метаданные - Языки манипулирования данными содержит набор операторов манипулирования данными, т. е. операторов, позволяющих заносить данные в БД, удалять, модифицировать или выбирать существующие данные. Языки манипулирования данными делятся на два типа: процедурный ЯМД, декларативный (непроцедурный) ЯМД. Работая с процедурным ЯМД, пользователь должен четко представлять себе то, что он должен получить, и как он может это сделать с помощью средств ЯМД. Эти средства представляют собой операторы над данными, которые необходимо выполнить в определенном порядке для получения требуемой информации. Обычно такой процедурный язык позволяет извлечь запись, обработать ее и, в зависимости от полученных результатов, извлечь другую запись, которая должна быть подвергнута аналогичной обработке, и т. д. К ним относят языки ЯМД сетевых и иерар¬хических СУБД, языки, поддерживающие операции реляционной алгебры. Декларативные языки ЯМД предоставляют пользователю средства, позволяющие указать лишь то, какие данные требуются. Решение вопроса о том, как их следует извлекать, берет на себя процессор данного языка, работающий с целыми наборами записей. Непроцедурные языки ЯМД позволяют определить весь набор требуемых дан¬ных с помощью одного оператора извлечения или обновления. СУБД транслирует выражение на языке ЯМД в процедуру (или набор процедур), которая обеспечивает манипулирование затребованным набором записей. Данный подход освобождает пользователя от необходимости знать детали внутренней реализации структур данных и особен¬ности алгоритмов, используемых для извлечения и возможного преобразования данных. Непроцедурные языки обыч-но проще понять и использовать, чем процедурные языки. Реляционные СУБД обычно включают поддержку непроцедурных языков манипулирования данными — чаще всего это бывает язык структурированных запросов SQL или язык запросов по образцу QBE. Часть непроцедурного языка ЯМД, которая отвечает за извлечение данных, называется языком запросов. Язык запросов можно определить как высокоуровневый узкоспециализированный язык, предназначенный для удовлетворения различных требований по выборке информации из базы данных. Анализируя тенденции в развитии языков обработки данных, можно предположить, что и в дальнейшем оно пойдет, скорее всего, по направлению развития непроцедурных языков с использованием компонентов высокого уровня, которые часто называют «инструментами четвертого поколения». SQL (Structured Query Language) SQL (обычно произносимый как "СИКВЭЛ" или "ЭСКЮЭЛЬ") символизирует собой Структурированный Язык Запросов. Это - язык, который дает Вам возможность создавать и работать в реляционных базах данных, являющихся наборами связанной информации, сохраняемой в таблицах. Языки манипулирования данными Все языки манипулирования данными (ЯМД), созданные до появления реляционных баз данных и разработанные для многих систем управления базами данных (СУБД) персональных компьютеров, были ориентированы на операции с данными, представленными в виде логических записей файлов. Это требовало от пользователей детального знания организации хранения данных и достаточных усилий для указания не только того, какие данные нужны, но и того, где они размещены и как шаг за шагом получить их. придется самому узнать адрес кинотеатра и предложить водителю проехать к нему по сказать название фильма - и шофер сам таким-то и таким-то улицам. В найдет кинотеатр, в котором показываютсамому узнать, где нужный фильм. (Подобным же образом, демонстрируется нужный самом худшем случае вам, может быть, даже придется по самостоятельно, отыскивает фильм и назвать кинотеатр. дороге давать указания: запрошенные данные SQL.) Тогда водитель должен "Повернуть налево... проехать найти адрес этого пять кварталов... повернуть кинотеатра. направо...". Из истории появления SQL Появление теории реляционных баз данных и предложенного Коддом языка запросов "ALPHA", основанного на реляционном исчислении, инициировало разработку ряда языков запросов, которые можно отнести к двум классам: 1.Алгебраические языки, позволяющие выражать запросы средствами специализированных операторов, применяемых к отношениям (JOIN - соединить, INTERSECT - пересечь, SUBTRACT вычесть и т.д.). 2.Языки исчисления предикатов, которые представляют собой набор правил для записи выражения, определяющего новое отношение из заданной совокупности существующих отношений. Другими словами исчисление предикатов есть метод определения того отношения, которое нам желательно получить (как ответ на запроc) из отношений, уже имеющихся в базе данных. Разработка, в основном, шла в отделениях фирмы IBM (языки ISBL, SQL, QBE) и университетах США (PIQUE, QUEL). Последний создавался для СУБД INGRES (Interactive Graphics and Retrieval System), которая была разработана в начале 70-х годов в Университете шт. Калифорния и сегодня входит в пятерку лучших профессиональных СУБД. Сегодня из всех этих языков полностью сохранились и развиваются QBE (Query-ByExample - запрос по образцу) и SQL, а из остальных взяты в расширение внутренних языков СУБД только наиболее интересные конструкции. В начале 80-х годов SQL "победил" другие языки запросов и стал фактическим стандартом таких языков для профессиональных реляционных СУБД. В 1987 году он стал международным стандартом языка баз данных и начал внедряться во все распространенные СУБД персональных компьютеров. Почему SQL? 1. Непрерывный рост быстродействия, а также снижение энергопотребления, размеров и стоимости компьютеров привели к резкому расширению возможных рынков их сбыта, круга пользователей, разнообразия типов и цен. Естественно, что расширился спрос на разнообразное программное обеспечение. 2. Фирмы, производящие программное обеспечение, стали выпускать на рынок все более и более интеллектуальные и, следовательно, объемные программные комплексы. Приобретая (желая приобрести) такие комплексы, многие организации и отдельные пользователи часто не могли разместить их на собственных ЭВМ, однако не хотели и отказываться от нового сервиса. Для обмена информацией и ее обобществления были созданы сети ЭВМ, где обобществляемые программы и данные стали размещать на специальных обслуживающих устройствах - файловых серверах. 3. СУБД, работающие с файловыми серверами, позволяют множеству пользователей разных ЭВМ (иногда расположенных достаточно далеко друг от друга) получать доступ к одним и тем же базам данных. При этом упрощается разработка различных автоматизированных систем управления организациями, учебных комплексов, информационных и других систем, где множество сотрудников (учащихся) должны использовать общие данные и обмениваться создаваемыми в процессе работы (обучения). Однако при такой идеологии вся обработка запросов из программ или с терминалов пользовательских ЭВМ выполняется на этих же ЭВМ. Поэтому для реализации даже простого запроса ЭВМ часто должна считывать из файлового сервера и (или) записывать на сервер целые файлы, что ведет к конфликтным ситуациям и перегрузке сети. 4. Для исключения указанных и некоторых других недостатков была предложена технология "Клиент-Сервер", по которой запросы пользовательских ЭВМ (Клиент) обрабатываются на специальных серверах баз данных (Сервер), а на ЭВМ возвращаются лишь результаты обработки запроса. При этом, естественно, нужен единый язык общения с Сервером и в качестве такого языка выбран SQL. Поэтому все современные версии профессиональных реляционных СУБД (DB2, Oracle, Ingres, Informix, Sybase, Progress, Rdb) и даже нереляционных СУБД (например, Adabas) используют технологию "Клиент-Сервер" и язык SQL. К тому же приходят разработчики СУБД персональных ЭВМ, многие из которых уже сегодня снабжены языком SQL. 5. Реализация в SQL концепции операций, ориентированных на табличное представление данных, позволило создать компактный язык с небольшим (менее 30) набором предложений. SQL может использоваться как ИНТЕРАКТИВНЫЙ (для выполнения запросов) и как ВСТРОЕННЫЙ (для построения прикладных программ). Состав языка SQL Язык SQL предназначен для манипулирования данными в реляционных базах данных, определения структуры баз данных и для управления правами доступа к данным в многопользовательской среде. Поэтому, в язык SQL в качестве составных частей входят: язык манипулирования данными (Data Manipulation Language, DML) язык определения данных (Data Definition Language, DDL) язык управления данными (Data Control Language, DCL). Подчеркнем, что это не отдельные языки, а различные команды одного языка. Такое деление проведено только лишь с точки зрения различного функционального назначения этих команд. Язык манипулирования данными используется, как это следует из его названия, для манипулирования данными в таблицах баз данных. Он состоит из 4 основных команд: SELECT(выбрать)INSERT(вставить) UPDATE(обновить)DELETE(удалить ) Язык определения данных используется для создания и изменения структуры базы данных и ее составных частей таблиц, индексов, представлений (виртуальных таблиц), а также триггеров и сохраненных процедур. Основными его командами являются: CREATE DATABASE(создать базу данных) CREATE TABLE(создать таблицу) CREATE VIEW(создать виртуальную таблицу) CREATE INDEX(создать индекс) CREATE TRIGGER(создать триггер) CREATE PROCEDURE(создать сохраненную процедуру) ALTER DATABASE(модифицировать базу данных) ALTER TABLE(модифицировать таблицу) ALTER VIEW(модифицировать виртуальную таблицу) ALTER INDEX(модифицировать индекс) ALTER TRIGGER(модифицировать триггер) ALTER PROCEDURE(модифицировать сохраненную процедуру) DROP DATABASE(удалить базу данных) DROP TABLE(удалить таблицу) DROP VIEW(удалить виртуальную таблицу) DROP INDEX(удалить индекс) DROP TRIGGER(удалить триггер) DROP PROCEDURE(удалить сохраненную процедуру) Язык управления данными используется для управления правами доступа к данным и выполнением процедур в многопользовательской среде. Более точно его можно назвать "язык управления доступом". Он состоит из двух основных команд: GRANT(дать права) REVOKE(забрать права) С точки зрения прикладного интерфейса существуют две разновидности команд SQL: интерактивный SQL встроенный SQL. Интерактивный SQL используется в специальных утилитах (типа WISQL или DBD), позволяющих в интерактивном режиме вводить запросы с использованием команд SQL, посылать их для выполнения на сервер и получать результаты в предназначенном для этого окне. Встроенный SQL используется в прикладных программах, позволяя им посылать запросы к серверу и обрабатывать полученные результаты, в том числе комбинируя set-ориентированный и record-ориентированный подходы. SQL включает: 1. предложения определения данных (определение баз данных, а также определение и уничтожение таблиц и индексов); 2. запросы на выбор данных (предложение SELECT); 3. предложения модификации данных (добавление, удаление и изменение данных); 4. предложения управления данными (предоставление и отмена привилегий на доступ к данным, управление транзакциями и другие). Кроме того, он предоставляет возможность выполнять в этих предложениях: • арифметические вычисления (включая разнообразные функциональные преобразования), обработку текстовых строк и выполнение операций сравнения значений арифметических выражений и текстов; • упорядочение строк и (или) столбцов при выводе содержимого таблиц на печать или экран дисплея; • создание представлений (виртуальных таблиц), позволяющих пользователям иметь свой взгляд на данные без увеличения их объема в базе данных; • запоминание выводимого по запросу содержимого таблицы, нескольких таблиц или представления в другой таблице (реляционная операция присваивания). • агрегатирование данных: группирование данных и применение к этим группам таких операций, как среднее, сумма, максимум, минимум, число элементов и т.п. Основные типы данных SQL 1. INTEGER - целое число (обычно до 10 значащих цифр и знак); 2. SMALLINT - "короткое целое" (обычно до 5 значащих цифр и знак); 3. DECIMAL(p,q) - десятичное число, имеющее p цифр (0 < p < 16) и знак; с помощью q задается число цифр справа от десятичной точки (q < p, если q = 0, оно может быть опущено); 4. FLOAT - вещественное число с 15 значащими цифрами и целочисленным порядком, определяемым типом СУБД; 5. CHAR(n) - символьная строка фиксированной длины из n символов (0 < n < 256); 6. VARCHAR(n) - символьная строка переменной длины, не превышающей n символов (n > 0 и разное в разных СУБД, но не меньше 4096); 7. DATE - дата в формате, определяемом специальной командой (по умолчанию mm/dd/yy); поля даты могут содержать только реальные даты, начинающиеся за несколько тысячелетий до н.э. и ограниченные пятым-десятым тысячелетием н.э.; 8. TIME - время в формате, определяемом специальной командой, (по умолчанию hh.mm.ss); 9. DATETIME - комбинация даты и времени; 10. MONEY - деньги в формате, определяющем символ денежной единицы ($, руб, ...) и его расположение (суффикс или префикс), точность дробной части и условие для показа денежного значения. Ориентированный на работу с таблицами SQL не имеет достаточных средств для создания сложных прикладных программ. Поэтому в разных СУБД он либо используется вместе с языками программирования высокого уровня (например, такими как Си или Паскаль), либо включен в состав команд специально разработанного языка СУБД (язык систем dBASE, R:BASE и т.п.). Унификация полных языков современных профессиональных СУБД достигается за счет внедрения объектно-ориентированного языка четвертого поколения 4GL. Последний позволяет организовывать циклы, условные предложения, меню, экранные формы, сложные запросы к базам данных с интерфейсом, ориентированным как на алфавитноцифровые терминалы, так и на оконный графический интерфейс (X- Windows, MS-Windows). Таблицы SQL Представления Одна из основных задач, которую позволяют решать представления, обеспечение независимости пользовательских программ от изменения логической структуры базы данных при ее расширении и (или) изменении размещения столбцов, возникающего, например, при расщеплении таблиц. В последнем случае можно создать ПРЕДСТАВЛЕНИЕ - соединение с именем и структурой расщепленной таблицы, позволяющее сохранить программы, существовавшие до изменения структуры базы данных. Кроме того, представления дают возможность различным пользователям по-разному видеть одни и те же данные, возможно, даже в одно и то же время. Это особенно ценно при работе различных категорий пользователей с единой интегрированной базой данных. Пользователям предоставляют только интересующие их данные в наиболее удобной для них форме (окно в таблицу или в любое соединение любых таблиц). Наконец, от определенных пользователей могут быть скрыты некоторые данные, невидимые через предложенное им представление. Таким образом, принуждение пользователя осуществлять доступ к базе данных через представления является простым, но эффективным механизмом для управления санкционированием доступа. Курсоры Основная проблема "встраивания" предложения SELECT в программу заключается в том, что SELECT, как правило, порождает таблицу с множеством строк и столбцов, а включающий язык не обладает хорошими средствами, позволяющими оперировать одновременно более чем одной записью (строкой). По этим причинам необходимо обеспечить своего рода мост между уровнем множеств языка SQL и уровнем записей включающего языка. Такой мост обеспечивают курсоры. Курсор состоит, по существу, из некоторого рода указателя, который может использоваться для просмотра множества записей. Поочередно указывая каждую запись в данном множестве, он обеспечивает возможность обращения к этим записям по одной одновременно. Создание базовых таблиц Базовые таблицы описываются в SQL с помощью предложения CREATE TABLE (создать таблицу), синтаксис которого имеет небольшие различия в различных СУБД. Однако все они поддерживают следующую минимальную форму: CREATE TABLE базовая_таблица (столбец тип_данных [NOT NULL] [,столбец тип_данных [NOT NULL]] ...); где ТИП_ДАННЫХ должен принадлежать к одному из типов данных, поддерживаемых СУБД Пример Create Table Студенты ( Ном_зач INT NOT NULL, Фамилия CHAR (70) NOT NULL, Имя CHAR (50) NOT NULL, Отчество CHAR (50) NOT NULL, Индекс_гр INT, Язык_1 СНАR (10), №гр_языка1 SMALLINT, Язык_2 СНАR (10), №гр_языка2 SMALLINT ); Логическая концептуальная схема БД «Поставщики-Детали» Поставщик Регион Код_Поста вщ Код_рег Имя_ре г Город Код_горо да Имя_Поста вщ Код_города Код_Поста вщ Код_Детал и Детали Количеств Код_Детал о и Имя_горо да Код_реги она Поставка Цвета Код_Цвета Наимен_цвета Название_ дет Код_цвета Пример создания таблицы Запросы Конструктор Детали Создать Вид Режим SQL Определение первичного CREATE INDEX имя_поля ON имя таблицы (имя_поля) with PRIMARY ключа Поле Код_дет стало ключевым и индексированным Ключевое поле ВСЕГДА индексированное Построение индекса Индекс - это системная таблица, построенная по значениям заданного столбца заданной таблицы. Примером может быть предметный указатель в книге. CREATE [UNIQUE] INDEX имя_индекса ON базовая_таблица (столбец [[ASC] | DESC] [, столбец [[ASC] | DESC]] ...); Построим индекс для поля Поставщик: Значение поля Номера строк Полесье 1,2,3 Наталка 4 CREATE INDEX Поставки_Поставщик ON Поставки (Поставщик) Неиндексированное поле Запросы Создать в режиме конструктора Режим SQL Запуск запроса Теперь поле Наим_дет ИНДЕКСИРОВАННОЕ Удаление базовой таблицы Существующую базовую таблицу можно в любой момент уничтожить с помощью предложения DROP TABLE (уничтожить таблицу): DROP TABLE базовая_таблица; по которому удаляется описание таблицы, ее данные, связанные с ней представления и индексы, построенные для столбцов таблицы Добавление полей в таблицу Добавление поля в таблицу: ALTER TABLE имя таблицы ADD <имя поля> <тип поля> [NOT NULL],… Появился столбец Дата_пр Аналогично УДАЛЕНИЕ ПОЛЯ ALTER TABLE имя таблицы DROP имя поля МОДИФИКАЦИЯ ПОЛЯ ALTER TABLE имя таблицы MODIFY имя поля тип поля… О предложении SELECT Все запросы на получение практически любого количества данных из одной или нескольких таблиц выполняются с помощью единственного предложения SELECT. В общем случае результатом реализации предложения SELECT является другая таблица. К этой новой (рабочей) таблице может быть снова применена операция SELECT и т.д., т.е. такие операции могут быть вложены друг в друга. Представляет исторический интерес тот факт, что именно возможность включения одного предложения SELECT внутрь другого послужила мотивировкой использования прилагательного "структуризированный" в названии языка SQL. Предложение SELECT может использоваться как: 1.самостоятельная команда на получение и вывод строк таблицы, сформированной из столбцов и строк одной или нескольких таблиц (представлений); 2.элемент WHERE- или HAVING-условия (сокращенный вариант предложения, называемый "вложенный запрос"); 3.фраза выбора в командах CREAT VIEW, DECLARE CURSOR или INSERT; 4.средство присвоения глобальным переменным значений из строк сформированной таблицы (INTOфраза). SELECT (выбрать) данные из указанных столбцов и (если необходимо) выполнить перед выводом их преобразование в соответствии с указанными выражениями и (или) функциями FROM (из) перечисленных таблиц, в которых расположены эти столбцы WHERE (где) строки из указанных таблиц должны удовлетворять указанному перечню условий отбора строк GROUP BY (группируя по) указанному перечню столбцов с тем, чтобы получить для каждой группы единственное агрегированное значение, используя во фразе SELECT SQL-функции SUM (сумма), COUNT (количество), MIN (минимальное значение), MAX (максимальное значение) или AVG (среднее значение) HAVING (имея) в результате лишь те группы, которые удовлетворяют указанному перечню условий отбора групп Простая выборка Выбор всех полей Выборка вычисляемых значений Можно выбирать не только все поля, а и новые – ВЫЧИСЛЯЕМЫЕ Например, знаем, что цена одной детали – 15 рублей, можно вычислить поле СТОИМОСТЬ и выбрать его значение Выборка c использованием фразы WHERE (выборка с Для отбора нужных строк таблицы можно использовать операторы условием) сравнения : = (равно), <> (не равно), < (меньше), <= (меньше или равно), > (больше), >= (больше или равно), которые могут предваряться оператором NOT, создавая, например, отношения "не меньше" и "не больше". Возможность использования нескольких условий, соединенных логическими операторами AND, OR, AND NOT и OR NOT, позволяет осуществить более детальный отбор строк. Выбраны детали, произведенные 13.12.2007 года с кодом цвета 111 Использование BETWEEN С помощью BETWEEN ... AND ... (находится в интервале от ... до ...) можно отобрать строки, в которых значение какого-либо столбца находятся в заданном диапазоне. Выборка деталей, количество которых находится в диапазоне от 100 до 200 Использование LIKE Обычная форма "имя_столбца LIKE текстовая_константа" для столбца текстового типа позволяет отыскать все значения указанного столбца, соответствующие образцу, заданному "текстовой_константой". Символы этой константы интерпретируются следующим образом: символ * (звездочка) – заменяет любую последовательность из N символов (где N может быть нулем), все другие символы означают просто сами себя. Запрос с параметром Можно использовать LIKE для создания так называемого ЗАПРОСА С ПАРАМЕТРОМ, когда при запуске запроса на выполнение пользователь сам задаст условие отбора: "имя_столбца LIKE [текст для отбора]" Выборка с упорядочением Простейший вариант этой фразы - упорядочение строк результата по значению одного из столбцов с указанием порядка сортировки по возрастанию ASC (ASCending) или убыванию DESC (DESCending), или без такого указания. (По умолчанию строки будут сортироваться в порядке возрастания значений в указанном столбце - ASC .) Сортировка записей таблицы Детали по убыванию значений поля Кол_во Агрегирование данных SQL существует ряд специальных стандартных функций (SQL-функций). Каждая из этих функций оперирует совокупностью значений столбца некоторой таблицы и создает единственное значение, определяемое так: COUNT - число значений в столбце SUM - сумма значений в столбце AVG - среднее значение в столбце MAX - самое большое значение в столбце MIN - самое малое значение в столбце. Для функций SUM и AVG рассматриваемый столбец должен содержать числовые значения. Следует отметить, что здесь столбец - это столбец виртуальной таблицы, в которой могут содержаться данные не только из столбца базовой таблицы, но и данные, полученные путем функционального преобразования и (или) связывания символами арифметических операций значений из одного или нескольких столбцов. При этом выражение, определяющее столбец такой таблицы, может быть сколь угодно сложным, но не должно содержать SQL-функций (вложенность SQL-функций не допускается). Однако из SQL-функций можно составлять любые выражения. Аргументу всех функций может предшествовать ключевое слово DISTINCT (различный), указывающее, что избыточные дублирующие значения должны быть исключены перед тем, как Пример агрегирования Подсчитывается суммарное количество деталей с наименованием Гайка (200+231+100=531) и количество непустых значений в поле Кол_во, соответствующих записями с наименованием детали Гайка (3 таких поля) Фраза GROUP BY Фраза GROUP инициирует (группировать BY перекомпоновку указанной по) во FROM таблицы по группам, каждая из которых имеет одинаковые значения указанном в GROUP BY. в столбце, Фраза HAVING Фраза HAVING играет такую же роль для групп, что и фраза WHERE для строк: она используется для исключения групп, точно так же, как WHERE используется для исключения строк. Эта фраза включается в предложение лишь при наличии фразы GROUP BY, а выражение в HAVING должно принимать единственное значение для группы. Выборка из нескольких таблиц Выберем данные о всех поставщиках, поставляющих детали БОЛТ разных цветов Нам понадобятся таблицы Поставщики, Детали, Цвета Предложения модификации данных SQL Модификация данных может выполняться с помощью предложений DELETE (удалить), INSERT (вставить) и UPDATE (обновить). Подобно предложению SELECT они могут оперировать как базовыми таблицами, так и представлениями. Однако по ряду причин не все представления являются обновляемыми. Предложение DELETE имеет формат DELETE FROM базовая таблица | представление [WHERE фраза]; и позволяет удалить содержимое всех строк указанной таблицы (при отсутствии WHERE - фразы) или тех ее строк, которые выделяются WHERE- фразой. ! Предложение INSERT имеет один из следующих форматов: INSERT INTO {базовая таблица | представление} [(столбец [,столбец] ...)] VALUES ({константа | переменная} [,{константа | переменная}] ...); или INSERT INTO {базовая таблица | представление} [(столбец [,столбец] ...)] подзапрос; В первом формате в таблицу вставляется строка со значениями полей, указанными в перечне фразы VALUES (значения), причем i-е значение соответствует i-му столбцу в списке столбцов (столбцы, не указанные в списке, заполняются NULL-значениями). Если в списке VALUES фразы указаны все столбцы модифицируемой таблицы и порядок их перечисления соответствует порядку столбцов в описании таблицы, то список столбцов в фразе INTO можно опустить. Во втором формате сначала выполняется подзапрос, т.е. по предложению SELECT в памяти формируется рабочая таблица, а потом строки рабочей таблицы загружаются в модифицируемую таблицу. При этом i-й столбец рабочей таблицы (i-й элемент списка SELECT) соответствует i-му столбцу в списке столбцов модифицируемой таблицы. Предложение UPDATE имеет следующий формат: UPDATE (базовая таблица | представление} SET столбец = значение [, столбец = значение] ... [WHERE фраза] где значение – это столбец | выражение | константа | переменная , и может включать столбцы лишь из обновляемой таблицы, т.е. значение одного из столбцов модифицируемой таблицы может заменяться на значение ее другого столбца или выражения, содержащего значения нескольких ее столбцов, включая изменяемый. При отсутствии WHERE фразы обновляются значения указанных столбцов во всех строках модифицируемой таблицы. WHERE фраза позволяет сократить число обновляемых строк, указывая условия их отбора. В значениях, находящихся в правых частях равенств фразы SET, следует уточнять имена используемых столбцов, предваряя их именем таблицы. Использование интерфейса пользователя для создания запросов Отношение Рейс Запрос с параметром Группировка